46 return arma::norm(vel, 2);
61 return (1.-por_m)*rho_s*sorp_mult*csec;
99 double tortuosity = pow(water_content, 7.0 / 3.0)/ (porosity * porosity);
108 if (fabs(v_norm) > 0) {
114 K = ((alphaL - alphaT) / v_norm) * arma::kron(velocity.t(), velocity);
124 K += alphaT*v_norm*arma::eye(3,3) + diff_m*(tortuosity*c_sec*water_content);
140 "Type of boundary condition.")
148 .
description(
"Dirichlet boundary condition (for each substance).")
154 .description(
"Flux in Neumann boundary condition.")
155 .units(
UnitSI().kg().m().s(-1).md() )
156 .input_default(
"0.0")
160 .name(
"bc_robin_sigma")
161 .description(
"Conductivity coefficient in Robin boundary condition.")
162 .units(
UnitSI().m(4).s(-1).md() )
163 .input_default(
"0.0")
168 .
description(
"Initial values for concentration of substances.")
172 .
description(
"Longitudinal dispersivity in the liquid (for each substance).")
178 .
description(
"Transverse dispersivity in the liquid (for each substance).")
184 .
description(
"Molecular diffusivity in the liquid (for each substance).")
189 .
name(
"rock_density")
195 .
name(
"sorption_coefficient")
215 .
description(
"Matrix coefficients computed by model in mass assemblation.")
220 .
description(
"Retardation coefficients computed by model in mass assemblation.")
224 .
description(
"Concentration sources output - density of substance source, only positive part is used..")
229 .
description(
"Concentration sources - Robin type, in_flux = sources_sigma * (sources_conc - mobile_conc).")
287 return Selection(
"Solute_AdvectionDiffusion_BC_Type",
"Types of boundary conditions for advection-diffusion solute transport model.")
289 "Default transport boundary condition.\n" 290 "On water inflow (($(q_w \\le 0)$)), total flux is given by the reference concentration 'bc_conc'. " 291 "On water outflow we prescribe zero diffusive flux, " 292 "i.e. the mass flows out only due to advection.")
294 "Dirichlet boundary condition (($ c = c_D $)).\n" 295 "The prescribed concentration (($c_D$)) is specified by the field 'bc_conc'.")
297 "Total mass flux boundary condition.\n" 298 "The prescribed total incoming flux can have the general form (($\\delta(f_N+\\sigma_R(c_R-c) )$)), " 299 "where the absolute flux (($f_N$)) is specified by the field 'bc_flux', " 300 "the transition parameter (($\\sigma_R$)) by 'bc_robin_sigma', " 301 "and the reference concentration (($c_R$)) by 'bc_conc'.")
303 "Diffusive flux boundary condition.\n" 304 "The prescribed incoming mass flux due to diffusion can have the general form (($\\delta(f_N+\\sigma_R(c_R-c) )$)), " 305 "where the absolute flux (($f_N$)) is specified by the field 'bc_flux', " 306 "the transition parameter (($\\sigma_R$)) by 'bc_robin_sigma', " 307 "and the reference concentration (($c_R$)) by 'bc_conc'.")
320 "Selection of output fields for Diffusive Solute Transport DG model.");
328 description +
" for solute transport.")
331 "Density of the solvent [ (($kg.m^{-3}$)) ].");
MultiField< 3, FieldValue< 3 >::Scalar > sources_conc
void set_balance_object(std::shared_ptr< Balance > balance) override
ConcentrationTransportModel(Mesh &mesh, const Input::Record &in_rec)
MultiField< 3, FieldValue< 3 >::Scalar > output_field
Field< 3, FieldValue< 3 >::Scalar > mass_matrix_coef
Field represents coefficients of mass matrix.
FieldCommon & input_selection(Input::Type::Selection element_selection)
auto disable_where(const MultiField< spacedim, typename FieldValue< spacedim >::Enum > &control_field, const vector< FieldEnum > &value_list) -> MultiField &
static constexpr Mask in_main_matrix
A field is part of main "stiffness matrix" of the equation.
MultiField< 3, FieldValue< 3 >::Scalar > sources_density_out
Concentration sources - density output.
unsigned int size() const
Number of subfields that compose the multi-field.
Field< 3, FieldValue< 3 >::VectorFixed > flow_flux
Flow flux, can be result of water flow model.
BCMultiField< 3, FieldValue< 3 >::Scalar > bc_robin_sigma
Transition coefficient in total/diffusive flux b.c.
Field< 3, FieldValue< 3 >::Scalar > water_content
Water content - result of unsaturated water flow model or porosity.
MultiField< 3, FieldValue< 3 >::Scalar > init_condition
Initial concentrations.
void init_from_input(const Input::Record &in_rec) override
Read necessary data from input record.
FieldCommon & flags_add(FieldFlag::Flags::Mask mask)
const Mesh * mesh() const
Returns pointer to mesh.
MultiField< 3, FieldValue< 3 >::Scalar > sources_sigma
Concentration sources - Robin type, in_flux = sources_sigma * (sources_conc - mobile_conc) ...
vector< unsigned int > subst_idx_
List of indices used to call balance methods for a set of quantities.
static constexpr const char * name()
MultiField< 3, FieldValue< 3 >::Scalar > sorption_coefficient
Coefficient of linear sorption.
static Input::Type::Abstract & get_input_type()
Common specification of the input record for secondary equations.
MultiField< 3, FieldValue< 3 >::TensorFixed > diff_m
Molecular diffusivity (for each substance).
Discontinuous Galerkin method for equation of transport with dispersion.
FieldCommon & units(const UnitSI &units)
Set basic units of the field.
void set(std::vector< typename Field< spacedim, Value >::FieldBasePtr > field_vec, double time, std::vector< std::string > region_set_names={"ALL"})
MultiField< 3, FieldValue< 3 >::Scalar > disp_l
Longitudal dispersivity (for each substance).
double solvent_density_
Density of liquid (a global constant).
BCMultiField< 3, FieldValue< 3 >::Scalar > bc_dirichlet_value
Prescribed concentration for Dirichlet/reference concentration for flux b.c.
virtual ModelEqData & eq_data()=0
Derived class should implement getter for ModelEqData instance.
Field< 3, FieldValue< 3 >::Scalar > rock_density
Rock matrix density.
void set(FieldBasePtr field, double time, std::vector< std::string > region_set_names={"ALL"})
MultiField< 3, FieldValue< 3 >::VectorFixed > advection_coef
Advection coefficients.
static constexpr Mask equation_result
Match result fields. These are never given by input or copy of input.
static constexpr Mask in_time_term
A field is part of time term of the equation.
MultiField< 3, FieldValue< 3 >::Scalar > sources_sigma_out
Concentration sources - sigma output.
FieldCommon & input_default(const string &input_default)
MultiField< 3, FieldValue< 3 >::Scalar > retardation_coef
Field represents retardation coefficients due to sorption.
BCMultiField< 3, FieldValue< 3 >::Scalar > bc_flux
Flux value in total/diffusive flux b.c.
std::shared_ptr< Balance > balance_
object for calculation and writing the mass balance to file.
static IT::Selection get_output_selection()
static constexpr Mask in_rhs
A field is part of the right hand side of the equation.
BCMultiField< 3, FieldValue< 3 >::Enum > bc_type
Type of boundary condition (see also BC_Type)
static const Input::Type::Selection & get_bc_type_selection()
std::shared_ptr< Balance > balance() const
Field< 3, FieldValue< 3 >::Scalar > porosity
Mobile porosity - usually saturated water content in the case of unsaturated flow model...
FieldCommon & description(const string &description)
Field< 3, FieldValue< 3 >::Scalar > v_norm
Velocity norm field.
MultiField< 3, FieldValue< 3 >::Scalar > sources_conc_out
Concentration sources - concentration output.
FieldCommon & name(const string &name)
MultiField< 3, FieldValue< 3 >::TensorFixed > diffusion_coef
Diffusion coefficients.
FieldCommon & flags(FieldFlag::Flags::Mask mask)
void init_balance(const Input::Record &in_rec)
Class for representation SI units of Fields.
static UnitSI & dimensionless()
Returns dimensionless unit.
MultiField< 3, FieldValue< 3 >::Scalar > disp_t
Transversal dispersivity (for each substance).
Field< 3, FieldValue< 3 >::Scalar > cross_section
Pointer to DarcyFlow field cross_section.
~ConcentrationTransportModel() override
MultiField< 3, FieldValue< 3 >::Scalar > sources_density
Concentration sources - density of substance source, only positive part is used.