From 71ca5234c62d16c5643fdb63df8d97ef9a98291b Mon Sep 17 00:00:00 2001 From: Santiago Ospina Date: Thu, 4 Oct 2018 21:51:35 +0200 Subject: [PATCH] Enable cfl only of explicit schemes Signed-off-by: Santiago Ospina --- dune/dorie/interface/transport_simulation.cc | 7 +++++-- dune/dorie/interface/transport_simulation.hh | 6 +----- dune/dorie/solver/util_cfl_condition.hh | 7 ++----- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/dune/dorie/interface/transport_simulation.cc b/dune/dorie/interface/transport_simulation.cc index 0008e8db..1f9b241e 100644 --- a/dune/dorie/interface/transport_simulation.cc +++ b/dune/dorie/interface/transport_simulation.cc @@ -144,9 +144,12 @@ void TransportSimulation::step () auto t = controller->getTime(); suggest_timestep(controller->getDT()); - // for some reason dt!=this->dt - const auto _dt = this->dt; + double courant_number = 0.5; //FIXME: add keyword in inifile + if (not ts_param->implicit()) + this->suggest_timestep(courant_number*Dune::Dorie::cfl_condition(*gf_water_flux)); + // for some reason dt!=this->dt, any idea why? + // Check whether time intervals of grid functions are valid if (Dune::FloatCmp::gt(water_flux_interval.begin,t+this->dt)) DUNE_THROW(Dune::Exception," "); diff --git a/dune/dorie/interface/transport_simulation.hh b/dune/dorie/interface/transport_simulation.hh index 5e0d9ba2..fb7c7671 100644 --- a/dune/dorie/interface/transport_simulation.hh +++ b/dune/dorie/interface/transport_simulation.hh @@ -298,11 +298,7 @@ public: void suggest_timestep(TimeField _dt) override { - auto cfl_dt = 0.3*Dune::Dorie::cfl_condition(*gf_water_flux); // FIXME - std::cout << "cfl_dt: " << cfl_dt << std::endl; - this->dt = std::min(_dt,controller->getDT()); - this->dt = std::min(dt,cfl_dt); - std::cout << "dt: " << cfl_dt << std::endl; + dt = std::min(_dt,controller->getDT()); } // TODO: Define data exchange with richards diff --git a/dune/dorie/solver/util_cfl_condition.hh b/dune/dorie/solver/util_cfl_condition.hh index 473444b5..42949403 100644 --- a/dune/dorie/solver/util_cfl_condition.hh +++ b/dune/dorie/solver/util_cfl_condition.hh @@ -55,7 +55,7 @@ namespace Dorie{ for (int i = 1; i < geo.corners(); ++i) for (int j = 0; j < i-1; ++j) h_T = std::max(h_T,(geo.corner(i)-geo.corner(j)).two_norm()); - std::cout << "h_T: " << h_T << std::endl; + // Check that h_T is not zero in debug mode, who knows. assert(Dune::FloatCmp::gt(h_T,0.)); @@ -69,15 +69,12 @@ namespace Dorie{ gf.evaluate(cell,x,water_flux); max_water_flux = std::max(max_water_flux,water_flux.two_norm()); } - std::cout << "max_water_flux: " << max_water_flux << std::endl; + // Calculate the cfl for this cell if (Dune::FloatCmp::gt(max_water_flux,0.)) suggested_dt = std::min(suggested_dt,h_T/max_water_flux); - - std::cout << "suggested_dt: " << suggested_dt << std::endl; } - std::cout << "FINAL suggested_dt: " << suggested_dt << std::endl; // Communicate the lowest cfl number to all procesors suggested_dt = gv.comm().min(suggested_dt); return suggested_dt; -- GitLab