52 return it::Abstract(
"Coupling_Base",
"The root record of description of particular the problem to solve.")
59 "Record with data for a general sequential coupling.\n")
63 "Short description of the solved problem.\n"
64 "Is displayed in the main log, and possibly in other text output files.")
66 "Computational mesh common to all equations.")
69 "Flow equation, provides the velocity field as a result.")
71 "Transport of soluted substances, depends on the velocity field from a Flow equation.")
73 "Heat transfer, depends on the velocity field from a Flow equation.")
84 using namespace Input;
92 process->eq_fieldset()[
"cross_section"]
93 .copy_from(
water->eq_fieldset()[
"cross_section"]);
104 FieldCommon *porosity = process->eq_fieldset().field(
"porosity");
105 process->eq_fieldset()[
"water_content"].
copy_from( *porosity );
108 process->initialize();
111 return std::make_shared<TransportNothing>(*
mesh);
122 using namespace Input;
132 in_record.
opt_val<
string>(
"description", description);
145 std::stringstream ss;
165 if (pdata.
process->time().is_end())
return;
176 auto& flux = pdata.
process->eq_fieldset()[
"flow_flux"];
177 flux.copy_from(
water->eq_fieldset()[
"flux"]);
178 flux.set_time_result_changed();
181 if (pdata.
process->time().tlevel() == 0) pdata.
process->zero_time_step();
183 pdata.
process->update_solution();
191 if (
water->solved_time() < requested_time) {
193 water->update_solution();
198 water->choose_next_time();
201 pdata.velocity_changed =
true;
223 const double theta=0.5;
227 water->zero_time_step();
229 process.velocity_changed =
true;
254 if(! pdata.process->time().is_end())
258 double water_dt=
water->time().estimate_dt();
267 if(! pdata.process->time().is_end()){
268 pdata.process->set_time_upper_constraint(water_dt,
"Flow time step");
269 pdata.velocity_time = theta * pdata.process->planned_time() + (1-theta) * pdata.process->solved_time();
282 if (!
water->time().is_end() ) {
295 for(
auto &pdata :
processes_) pdata.process.reset();
static Input::Type::Abstract & get_input_type()
Common specification of the input record for secondary equations.
static Mesh * mesh_factory(const Input::Record &input_mesh_rec)
static Input::Type::Abstract & get_input_type()
static Input::Type::Abstract & get_input_type()
static Input::Type::Record & record_template()
Template Record with common keys for derived equations.
Common abstract parent of all Field<...> classes.
static bool print_message_table(ostream &stream, std::string equation_name)
virtual FieldResult field_result(RegionSet region_set) const =0
Indicates special field states.
virtual void copy_from(const FieldCommon &other)=0
void advection_process_step(AdvectionData &pdata)
std::vector< AdvectionData > processes_
solute transport with chemistry through operator splitting
static const Input::Type::Record & get_input_type()
Mesh * mesh
mesh common to darcy flow and transport
AdvectionPtr make_advection_process(std::string process_key)
static const int registrar
HC_ExplicitSequential(Input::Record in_record)
void flow_step(double requested_time)
FieldCommon * water_content_saturated_
FieldCommon * water_content_p0_
std::shared_ptr< DarcyFlowInterface > water
steady or unsteady water flow simulator based on MH scheme
const RegionDB & region_db() const
unsigned int n_elements() const
static const Input::Type::Record & get_input_type()
static Profiler * instance(bool clear=false)
void set_task_info(string, int)
RegionSet get_region_set(const std::string &set_name) const
static const double inf_time
Infinity time used for steady case.
#define FLOW123D_FORCE_LINK_IN_PARENT(x)
Discontinuous Galerkin method for equation of transport with dispersion.
#define WarningOut()
Macro defining 'warning' record of log.
#define START_TIMER(tag)
Starts a timer with specified tag.