Go to the documentation of this file.
49 return Record(
"DualPorosity",
50 "Dual porosity model in transport problems.\n"
51 "Provides computing the concentration of substances in mobile and immobile zone.\n"
55 "Containes region specific data necessary to construct dual porosity model.")
57 "Tolerance according to which the explicit Euler scheme is used or not."
58 "Set 0.0 to use analytic formula only (can be slower).")
63 EqFields().output_fields.make_output_type(
"DualPorosity",
""),
64 IT::Default(
"{ \"fields\": [ \"conc_immobile\" ] }"),
65 "Setting of the fields output.")
70 Input::register_class< DualPorosity, Mesh &, Input::Record >(
"DualPorosity") +
77 .
name(
"diffusion_rate_immobile")
78 .
description(
"Diffusion coefficient of non-equilibrium linear exchange between mobile and immobile zone.")
83 .
name(
"porosity_immobile")
90 .
name(
"init_conc_immobile")
91 .
description(
"Initial concentration of substances in the immobile zone.")
97 .
description(
"Concentration solution in the mobile phase.")
103 .
name(
"conc_immobile")
125 eq_data_ = std::make_shared<EqData>();
180 .concentration_fields(
eq_fields_->conc_mobile_fe)
181 .set_time_governor(*
time_);
189 .concentration_fields(
eq_fields_->conc_immobile_fe)
190 .set_time_governor(*
time_);
218 for (
unsigned int sbi = 0; sbi <
eq_data_->substances_.size(); sbi++)
221 eq_fields_->conc_immobile_fe[sbi] = create_field_fe< 3, FieldValue<3>::Scalar >(
eq_data_->dof_handler_);
231 ASSERT(
time_ !=
nullptr).error(
"Time governor has not been set yet.\n");
232 ASSERT_LT(0,
eq_data_->substances_.size()).error(
"No substances for rection term.\n");
250 std::stringstream ss;
EqFields()
Collect all fields.
FieldCommon & units(const UnitSI &units)
Set basic units of the field.
std::shared_ptr< OutputTime > output_stream_
Pointer to a transport output stream.
static const int registrar
Registrar of class to factory.
MultiField< 3, FieldValue< 3 >::Scalar > diffusion_rate_immobile
Mass transfer coefficients between mobile and immobile pores.
void initialize() override
Prepares the object to usage.
static UnitSI & dimensionless()
Returns dimensionless unit.
static Input::Type::Abstract & it_abstract_immobile_term()
ReactionTerm(Mesh &init_mesh, Input::Record in_rec)
std::shared_ptr< FieldSet > eq_fieldset_
std::shared_ptr< EqFields > eq_fields_
Equation fields - all fields are in this set.
Support classes for parallel programing.
#define ASSERT_PERMANENT_LT(a, b)
Definition of comparative assert macro (Less Than)
void set_input_list(Input::Array input_list, const TimeGovernor &tg)
void compute_reaction(const DHCellAccessor &dh_cell) override
Compute reaction on a single element.
void update_solution(void) override
#define FLOW123D_FORCE_LINK_IN_CHILD(x)
MultiField< 3, FieldValue< 3 >::Scalar > init_conc_immobile
Initial concentrations in the immobile zone.
FieldCommon & set_limits(double min, double max=std::numeric_limits< double >::max())
FieldCommon & flags(FieldFlag::Flags::Mask mask)
void make_reactions()
Resolves construction of following reactions.
void assemble(std::shared_ptr< DOFHandlerMultiDim > dh) override
General assemble methods.
#define ASSERT_LT(a, b)
Definition of comparative assert macro (Less Than) only for debug mode.
Sorption model in immobile zone in case dual porosity is considered.
Sorption model in mobile zone in case dual porosity is considered.
FieldSet input_field_set_
static constexpr Mask equation_result
Match result fields. These are never given by input or copy of input.
#define ASSERT_PERMANENT(expr)
Allow use shorter versions of macro names if these names is not used with external library.
const TimeStep & step(int index=-1) const
std::shared_ptr< ReactionTerm > reaction_mobile
Reaction running in mobile zone.
This file contains classes representing sorption model. Sorption model can be computed both in case t...
Field< 3, FieldValue< 3 >::Scalar > porosity_immobile
Immobile porosity field.
static bool print_message_table(ostream &stream, std::string equation_name)
Class for representation SI units of Fields.
Input::Record input_record_
~DualPorosity(void)
Destructor.
GenericAssembly< InitConditionAssemblyDp > * init_condition_assembly_
general assembly objects, hold assembly objects of appropriate dimension
Field< 3, FieldValue< 3 >::Scalar > porosity
Porosity field.
static constexpr Mask input_copy
std::shared_ptr< ReactionTerm > reaction_immobile
Reaction running in immobile zone.
FieldCommon & input_default(const string &input_default)
void output_data(void) override
Main output routine.
GenericAssembly< ReactionAssemblyDp > * reaction_assembly_
Class Dual_por_exchange implements the model of dual porosity.
void zero_time_step() override
Cell accessor allow iterate over DOF handler cells.
static const Input::Type::Record & get_input_type()
#define WarningOut()
Macro defining 'warning' record of log.
std::shared_ptr< EqData > eq_data_
Equation data.
static Input::Type::Abstract & it_abstract_term()
std::shared_ptr< EqFields > eq_fields_base_
Equation data - all fields needs in assembly class.
EquationOutput output_fields
Fields indended for output, i.e. all input fields plus those representing solution.
std::shared_ptr< EqData > eq_data_base_
Equation data - all data needs in assembly class.
void initialize_fields()
Initializes field sets.
FieldCommon & description(const string &description)
Class ReactionTerm is an abstract class representing reaction term in transport.
static Input::Type::Abstract & it_abstract_mobile_term()
#define START_TIMER(tag)
Starts a timer with specified tag.
#define END_TIMER(tag)
Ends a timer with specified tag.
MultiField< 3, FieldValue< 3 >::Scalar > conc_immobile
Calculated concentrations in the immobile zone.
FieldCommon & name(const string &name)