45 return arma::norm(vel, 2);
60 return (1.-por_m)*rho_s*sorp_mult*csec;
98 double tortuosity = pow(water_content, 7.0 / 3.0)/ (porosity * porosity);
107 if (fabs(v_norm) > 0) {
113 K = ((alphaL - alphaT) / v_norm) * arma::kron(velocity.t(), velocity);
123 K += alphaT*v_norm*arma::eye(3,3) + diff_m*(tortuosity*c_sec*water_content);
139 "Type of boundary condition.")
147 .
description(
"Dirichlet boundary condition (for each substance).")
153 .description(
"Flux in Neumann boundary condition.")
154 .units(
UnitSI().kg().m().s(-1).md() )
155 .input_default(
"0.0")
159 .name(
"bc_robin_sigma")
160 .description(
"Conductivity coefficient in Robin boundary condition.")
161 .units(
UnitSI().m(4).s(-1).md() )
162 .input_default(
"0.0")
167 .
description(
"Initial values for concentration of substances.")
171 .
description(
"Longitudinal dispersivity in the liquid (for each substance).")
177 .
description(
"Transverse dispersivity in the liquid (for each substance).")
183 .
description(
"Molecular diffusivity in the liquid (for each substance).")
188 .
name(
"rock_density")
194 .
name(
"sorption_coefficient")
214 .
description(
"Matrix coefficients computed by model in mass assemblation.")
219 .
description(
"Retardation coefficients computed by model in mass assemblation.")
223 .
description(
"Concentration sources output - density of substance source, only positive part is used..")
228 .
description(
"Concentration sources - Robin type, in_flux = sources_sigma * (sources_conc - mobile_conc).")
253 sorption_coefficient.setup_components();
254 sources_conc.setup_components();
255 sources_density.setup_components();
256 sources_sigma.setup_components();
257 diff_m.setup_components();
258 disp_l.setup_components();
259 disp_t.setup_components();
264 retardation_coef.set(
272 for (
unsigned int sbi=0; sbi<sorption_coefficient.size(); sbi++)
274 advection_coef.set(ad_coef_ptr_vec, 0.0);
277 fn_conc_diff_coef(), diff_m, flow_flux, v_norm, disp_l, disp_t, water_content, porosity, cross_section
286 return Selection(
"Solute_AdvectionDiffusion_BC_Type",
"Types of boundary conditions for advection-diffusion solute transport model.")
288 "Default transport boundary condition.\n"
289 "On water inflow (($(q_w \\le 0)$)), total flux is given by the reference concentration 'bc_conc'. "
290 "On water outflow we prescribe zero diffusive flux, "
291 "i.e. the mass flows out only due to advection.")
293 "Dirichlet boundary condition (($ c = c_D $)).\n"
294 "The prescribed concentration (($c_D$)) is specified by the field 'bc_conc'.")
296 "Total mass flux boundary condition.\n"
297 "The prescribed total incoming flux can have the general form (($\\delta(f_N+\\sigma_R(c_R-c) )$)), "
298 "where the absolute flux (($f_N$)) is specified by the field 'bc_flux', "
299 "the transition parameter (($\\sigma_R$)) by 'bc_robin_sigma', "
300 "and the reference concentration (($c_R$)) by 'bc_conc'.")
301 .
add_value(bc_diffusive_flux,
"diffusive_flux",
302 "Diffusive flux boundary condition.\n"
303 "The prescribed incoming mass flux due to diffusion can have the general form (($\\delta(f_N+\\sigma_R(c_R-c) )$)), "
304 "where the absolute flux (($f_N$)) is specified by the field 'bc_flux', "
305 "the transition parameter (($\\sigma_R$)) by 'bc_robin_sigma', "
306 "and the reference concentration (($c_R$)) by 'bc_conc'.")
319 "Selection of output fields for Diffusive Solute Transport DG model.");
327 description +
" for solute transport.")
330 "Density of the solvent [ (($kg.m^{-3}$)) ].");
static Input::Type::Abstract & get_input_type()
Common specification of the input record for secondary equations.
static constexpr const char * name()
static IT::Selection get_output_selection()
vector< unsigned int > subst_idx_
List of indices used to call balance methods for a set of quantities.
Field< 3, FieldValue< 3 >::Scalar > rock_density
Rock matrix density.
MultiField< 3, FieldValue< 3 >::Scalar > sources_conc_out
Concentration sources - concentration output.
BCMultiField< 3, FieldValue< 3 >::Enum > bc_type
Type of boundary condition (see also BC_Type)
MultiField< 3, FieldValue< 3 >::Scalar > init_condition
Initial concentrations.
Field< 3, FieldValue< 3 >::Scalar > mass_matrix_coef
Field represents coefficients of mass matrix.
MultiField< 3, FieldValue< 3 >::Scalar > sorption_coefficient
Coefficient of linear sorption.
MultiField< 3, FieldValue< 3 >::Scalar > sources_sigma_out
Concentration sources - sigma output.
BCMultiField< 3, FieldValue< 3 >::Scalar > bc_flux
Flux value in total/diffusive flux b.c.
Field< 3, FieldValue< 3 >::Scalar > v_norm
Velocity norm field.
MultiField< 3, FieldValue< 3 >::TensorFixed > diff_m
Molecular diffusivity (for each substance).
BCMultiField< 3, FieldValue< 3 >::Scalar > bc_dirichlet_value
Prescribed concentration for Dirichlet/reference concentration for flux b.c.
MultiField< 3, FieldValue< 3 >::Scalar > output_field
MultiField< 3, FieldValue< 3 >::Scalar > retardation_coef
Field represents retardation coefficients due to sorption.
MultiField< 3, FieldValue< 3 >::Scalar > disp_t
Transversal dispersivity (for each substance).
MultiField< 3, FieldValue< 3 >::TensorFixed > diffusion_coef
Diffusion coefficients.
static const Input::Type::Selection & get_bc_type_selection()
MultiField< 3, FieldValue< 3 >::VectorFixed > advection_coef
Advection coefficients.
MultiField< 3, FieldValue< 3 >::Scalar > sources_density_out
Concentration sources - density output.
MultiField< 3, FieldValue< 3 >::Scalar > disp_l
Longitudal dispersivity (for each substance).
BCMultiField< 3, FieldValue< 3 >::Scalar > bc_robin_sigma
Transition coefficient in total/diffusive flux b.c.
virtual ModelEqData & eq_data()=0
Derived class should implement getter for ModelEqData instance.
void init_from_input(const Input::Record &in_rec) override
Read necessary data from input record.
void set_balance_object(std::shared_ptr< Balance > balance) override
void init_balance(const Input::Record &in_rec)
double solvent_density_
Density of liquid (a global constant).
ConcentrationTransportModel(Mesh &mesh, const Input::Record &in_rec)
~ConcentrationTransportModel() override
std::shared_ptr< Balance > balance() const
std::shared_ptr< Balance > balance_
object for calculation and writing the mass balance to file.
FieldCommon & input_selection(Input::Type::Selection element_selection)
FieldCommon & description(const string &description)
FieldCommon & flags_add(FieldFlag::Flags::Mask mask)
FieldCommon & flags(FieldFlag::Flags::Mask mask)
FieldCommon & name(const string &name)
FieldCommon & units(const UnitSI &units)
Set basic units of the field.
FieldCommon & input_default(const string &input_default)
static constexpr Mask in_time_term
A field is part of time term of the equation.
static constexpr Mask equation_result
Match result fields. These are never given by input or copy of input.
static constexpr Mask in_rhs
A field is part of the right hand side of the equation.
static constexpr Mask in_main_matrix
A field is part of main "stiffness matrix" of the equation.
auto disable_where(const MultiField< spacedim, typename FieldValue< spacedim >::Enum > &control_field, const vector< FieldEnum > &value_list) -> MultiField &
Class for representation SI units of Fields.
static UnitSI & dimensionless()
Returns dimensionless unit.
Discontinuous Galerkin method for equation of transport with dispersion.