64 "Transport of soluted substances.")
70 return Record(
"Coupling_OperatorSplitting",
71 "Transport by convection and/or diffusion\n"
72 "coupled with reaction and adsorption model (ODE per element)\n"
73 " via operator splitting.")
78 "Settings for computing mass balance.")
80 "Output stream settings.\n Specify file format, precision etc.")
82 "Specification of transported substances.")
85 "Type of the numerical method for the transport equation.")
87 "Reaction model involved in transport.")
97 Input::register_class< TransportOperatorSplitting, Mesh &, const Input::Record>(
"Coupling_OperatorSplitting") +
108 *
this += porosity.name(
"porosity")
109 .description(
"Porosity of the mobile phase.")
110 .input_default(
"1.0")
112 .flags_add(in_main_matrix & in_rhs);
114 *
this += water_content.name(
"water_content")
115 .description(
"INTERNAL. Water content passed from unsaturated Darcy flow model.")
117 .flags_add(input_copy & in_time_term & in_main_matrix & in_rhs);
119 *
this += cross_section.name(
"cross_section")
121 .flags_add(in_time_term & in_main_matrix & in_rhs);
123 *
this += flow_flux.name(
"flow_flux")
125 .flags_add(in_time_term & in_main_matrix & in_rhs);
127 *
this += sources_density.name(
"sources_density")
128 .description(
"Density of concentration sources.")
129 .input_default(
"0.0")
130 .units(
UnitSI().kg().m(-3).s(-1) )
133 *
this += sources_sigma.name(
"sources_sigma")
134 .description(
"Concentration flux.")
135 .input_default(
"0.0")
137 .flags_add(in_main_matrix & in_rhs);
139 *
this += sources_conc.name(
"sources_conc")
140 .description(
"Concentration sources threshold.")
141 .input_default(
"0.0")
142 .units(
UnitSI().kg().m(-3) )
158 cfl_convection(numeric_limits<double>::max())
195 if ( reactions_it ) {
202 shared_ptr<DOFHandlerMultiDim> dof_handler = make_shared<DOFHandlerMultiDim>(*
mesh_);
203 shared_ptr<DiscreteSpace> ds = make_shared<EqualOrderDiscreteSpace>(
mesh_, fe);
204 dof_handler->distribute_dofs(ds);
207 .concentration_fields(
convection->get_p0_interpolation())
208 .output_stream(stream)
287 if (steps == 1 || cfl_changed)
289 convection->time().set_upper_constraint(
cfl_convection,
"Time step constrained by transport CFL condition (including both flow and sources).");
305 for (
unsigned int sbi=0; sbi<
convection->n_substances(); sbi++)
310 source[sbi] -= region_mass[ri];
332 for (
unsigned int sbi=0; sbi<
convection->n_substances(); sbi++)
337 source[sbi] += region_mass[ri];
340 balance_->add_cumulative_source(sbi, source[sbi]);
347 LogOut().fmt(
"CONVECTION: steps: {}\n", steps);
static Input::Type::Abstract & get_input_type()
Common specification of the input record for secondary equations.
static const Input::Type::Record & get_input_type()
Main balance input record type.
static Input::Type::Abstract & get_input_type()
Common specification of the input record for secondary equations.
Class representing dual porosity model in transport.
static Input::Type::Record & record_template()
Template Record with common keys for derived equations.
std::shared_ptr< FieldSet > eq_fieldset_
std::shared_ptr< Balance > balance_
object for calculation and writing the mass balance to file.
static constexpr Mask input_copy
static string subfields_address()
const RegionDB & region_db() const
static const Input::Type::Record & get_input_type()
The specification of output stream.
static std::shared_ptr< OutputTime > create_output_stream(const std::string &equation_name, const Input::Record &in_rec, const std::shared_ptr< TimeUnitConversion > &time_unit_conv)
This method delete all object instances of class OutputTime stored in output_streams vector.
static Input::Type::Abstract & it_abstract_term()
unsigned int bulk_size() const
Simple sorption model without dual porosity.
static const Input::Type::Record & get_input_type()
Input type for a substance.
Basic time management functionality for unsteady (and steady) solvers (class Equation).
void view(const char *name="") const
void next_time()
Proceed to the next time according to current estimated time step.
static const Type none_type
Mark Type with all bits unset.
void zero_time_step() override
void output_data() override
Write computed fields.
void update_solution() override
virtual ~TransportOperatorSplitting()
Destructor.
void initialize() override
double cfl_convection
Time restriction due to transport.
static const int registrar
Registrar of class to factory.
static const Input::Type::Record & get_input_type()
Declare input record type for the equation TransportOperatorSplittiong.
std::shared_ptr< ConcentrationTransportBase > convection
TransportOperatorSplitting(Mesh &init_mesh, const Input::Record in_rec)
Constructor.
std::shared_ptr< ReactionTerm > reaction
Class for representation SI units of Fields.
static UnitSI & dimensionless()
Returns dimensionless unit.
Support classes for parallel programing.
Class Dual_por_exchange implements the model of dual porosity.
Abstract base class for equation clasess.
Definitions of basic Lagrangean finite elements with polynomial shape functions.
#define FLOW123D_FORCE_LINK_IN_PARENT(x)
#define FLOW123D_FORCE_LINK_IN_CHILD(x)
#define LogOut()
Macro defining 'log' record of log.
Class ReactionTerm is an abstract class representing reaction term in transport.
This file contains classes representing sorption model. Sorption model can be computed both in case t...
#define END_TIMER(tag)
Ends a timer with specified tag.
#define START_TIMER(tag)
Starts a timer with specified tag.
Basic time management class.