48 return Record(
"DualPorosity",
49 "Dual porosity model in transport problems.\n"
50 "Provides computing the concentration of substances in mobile and immobile zone.\n"
54 "Containes region specific data necessary to construct dual porosity model.")
56 "Tolerance according to which the explicit Euler scheme is used or not."
57 "Set 0.0 to use analytic formula only (can be slower).")
62 EqFields().output_fields.make_output_type(
"DualPorosity",
""),
63 IT::Default(
"{ \"fields\": [ \"conc_immobile\" ] }"),
64 "Setting of the fields output.")
69 Input::register_class< DualPorosity, Mesh &, Input::Record >(
"DualPorosity") +
76 .
name(
"diffusion_rate_immobile")
77 .
description(
"Diffusion coefficient of non-equilibrium linear exchange between mobile and immobile zone.")
82 .
name(
"porosity_immobile")
89 .
name(
"init_conc_immobile")
90 .
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;
#define ASSERT_PERMANENT_LT(a, b)
Definition of comparative assert macro (Less Than)
#define ASSERT_PERMANENT(expr)
Allow use shorter versions of macro names if these names is not used with external library.
#define ASSERT_LT(a, b)
Definition of comparative assert macro (Less Than) only for debug mode.
Cell accessor allow iterate over DOF handler cells.
EquationOutput output_fields
Fields indended for output, i.e. all input fields plus those representing solution.
MultiField< 3, FieldValue< 3 >::Scalar > conc_immobile
Calculated concentrations in the immobile zone.
EqFields()
Collect all fields.
MultiField< 3, FieldValue< 3 >::Scalar > init_conc_immobile
Initial concentrations in the immobile zone.
MultiField< 3, FieldValue< 3 >::Scalar > diffusion_rate_immobile
Mass transfer coefficients between mobile and immobile pores.
Field< 3, FieldValue< 3 >::Scalar > porosity_immobile
Immobile porosity field.
Field< 3, FieldValue< 3 >::Scalar > porosity
Porosity field.
GenericAssembly< InitConditionAssemblyDp > * init_condition_assembly_
general assembly objects, hold assembly objects of appropriate dimension
void update_solution(void) override
GenericAssembly< ReactionAssemblyDp > * reaction_assembly_
~DualPorosity(void)
Destructor.
std::shared_ptr< ReactionTerm > reaction_mobile
Reaction running in mobile zone.
void zero_time_step() override
static const Input::Type::Record & get_input_type()
void compute_reaction(const DHCellAccessor &dh_cell) override
Compute reaction on a single element.
void initialize_fields()
Initializes field sets.
std::shared_ptr< EqData > eq_data_
Equation data.
void initialize() override
Prepares the object to usage.
static const int registrar
Registrar of class to factory.
std::shared_ptr< EqFields > eq_fields_
Equation fields - all fields are in this set.
void output_data(void) override
Main output routine.
std::shared_ptr< ReactionTerm > reaction_immobile
Reaction running in immobile zone.
void make_reactions()
Resolves construction of following reactions.
FieldSet input_field_set_
Input::Record input_record_
std::shared_ptr< FieldSet > eq_fieldset_
static bool print_message_table(ostream &stream, std::string equation_name)
FieldCommon & description(const string &description)
FieldCommon & flags(FieldFlag::Flags::Mask mask)
FieldCommon & name(const string &name)
FieldCommon & set_limits(double min, double max=std::numeric_limits< double >::max())
FieldCommon & units(const UnitSI &units)
Set basic units of the field.
FieldCommon & input_default(const string &input_default)
static constexpr Mask input_copy
static constexpr Mask equation_result
Match result fields. These are never given by input or copy of input.
void set_input_list(Input::Array input_list, const TimeGovernor &tg)
void assemble(std::shared_ptr< DOFHandlerMultiDim > dh) override
General assemble methods.
std::shared_ptr< OutputTime > output_stream_
Pointer to a transport output stream.
static Input::Type::Abstract & it_abstract_immobile_term()
std::shared_ptr< EqFields > eq_fields_base_
Equation data - all fields needs in assembly class.
std::shared_ptr< EqData > eq_data_base_
Equation data - all data needs in assembly class.
static Input::Type::Abstract & it_abstract_term()
static Input::Type::Abstract & it_abstract_mobile_term()
ReactionTerm(Mesh &init_mesh, Input::Record in_rec)
Sorption model in immobile zone in case dual porosity is considered.
Sorption model in mobile zone in case dual porosity is considered.
const TimeStep & step(int index=-1) const
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.
#define FLOW123D_FORCE_LINK_IN_CHILD(x)
#define WarningOut()
Macro defining 'warning' 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.