Flow123d
JS_before_hm-2210-gb57a0a528
|
Go to the documentation of this file.
24 #include "petscviewer.h"
25 #include "petscerror.h"
47 It is a fraction of water volume to the whole volume.)");
51 .
description(
"Computed isotropic scalar conductivity by the soil model.");
54 .
description(R
"(Saturated water content (($ \theta_s $)).
55 Relative volume of water in a reference volume of a saturated porous media.)")
60 .
description(R
"(Residual water content (($ \theta_r $)).
61 Relative volume of water in a reference volume of an ideally dry porous media.)")
66 .
description(R
"(The van Genuchten pressure head scaling parameter (($ \alpha $)).
67 It is related to the inverse of the air entry pressure, i.e. the pressure
68 where the relative water content starts to decrease below 1.)")
73 .
description(
"The van Genuchten exponent parameter (($ n $)).")
94 auto soil_rec =
it::Record(
"SoilModel",
"Soil model settings.")
97 "Selection of the globally applied soil model. In future we replace this key by a field for selection of the model."
98 "That will allow usage of different soil model in a single simulation.")
100 "Fraction of the water content where we cut and rescale the curve.")
105 return it::Record(
"Flow_Richards_LMH",
"Lumped Mixed-Hybrid solver for unsteady unsaturated Darcy flow.")
109 "Input data for Darcy flow model.")
111 IT::Default(
"{ \"fields\": [ \"pressure_p0\", \"velocity_p0\" ] }"),
112 "Specification of output fields and output times.")
114 "Soil model settings.")
120 Input::register_class< RichardsLMH, Mesh &, const Input::Record >(
"Flow_Richards_LMH") +
141 double fraction= model_rec.val<
double>(
"cut_fraction");
143 eq_data_->soil_model_ = std::make_shared<SoilModel_VanGenuchten>(fraction);
145 eq_data_->soil_model_ = std::make_shared<SoilModel_Irmay>(fraction);
150 eq_data_->water_content_previous_time =
eq_data_->dh_cr_disc_->create_vector();
157 eq_fields_->water_content_ptr = create_field_fe< 3, FieldValue<3>::Scalar >(
eq_data_->dh_cr_disc_);
160 eq_fields_->conductivity_ptr = create_field_fe< 3, FieldValue<3>::Scalar >(
eq_data_->dh_p_);
174 eq_data_->multidim_assembler[dh_cell.elm().dim()-1]->update_water_content(dh_cell);
181 eq_data_->p_edge_solution_previous_time.copy_from(
eq_data_->p_edge_solution);
183 eq_data_->water_content_previous_time.copy_from(water_content_vec);
185 eq_data_->p_edge_solution_previous_time.local_to_ghost_begin();
186 eq_data_->p_edge_solution_previous_time.local_to_ghost_end();
191 return (
eq_fields_->storativity.input_list_size() == 0)
192 && (
eq_fields_->water_content_saturated.input_list_size() == 0);
207 eq_data_->p_edge_solution.local_to_ghost_begin();
208 eq_data_->p_edge_solution.local_to_ghost_end();
FieldCommon & units(const UnitSI &units)
Set basic units of the field.
void accept_time_step() override
postprocess velocity field (add sources)
Field< 3, FieldValue< 3 >::Scalar > conductivity_richards
Field< 3, FieldValue< 3 >::Scalar > water_content
Field< 3, FieldValue< 3 >::Scalar > genuchten_p_head_scale
static UnitSI & dimensionless()
Returns dimensionless unit.
Basic time management class.
const RegionDB & region_db() const
std::shared_ptr< EqData > eq_data_
virtual PetscErrorCode rhs_zero_entries()
void initial_condition_postprocess() override
#define FLOW123D_FORCE_LINK_IN_CHILD(x)
bool zero_time_term(bool time_global=false) override
virtual PetscErrorCode mat_zero_entries()
Field< 3, FieldValue< 3 >::Scalar > water_content_residual
FieldCommon & flags(FieldFlag::Flags::Mask mask)
Field< 3, FieldValue< 3 >::Scalar > genuchten_n_exponent
static const Input::Type::Record & get_input_type()
void set_matrix_changed()
static const Input::Type::Record & type_field_descriptor()
std::shared_ptr< EqFields > eq_fields_
static const Input::Type::Instance & get_input_type(FieldSet &eq_data, const std::string &equation_name)
void assembly_mh_matrix(MultidimAssembly &assembler)
static constexpr Mask equation_result
Match result fields. These are never given by input or copy of input.
Output class for darcy_flow_mh model.
#define ASSERT_PERMANENT(expr)
Allow use shorter versions of macro names if these names is not used with external library.
Assembly explicit Schur complement for the given linear system. Provides method for resolution of the...
Basic time management functionality for unsteady (and steady) solvers (class Equation).
Class for representation SI units of Fields.
Input::Record input_record_
RegionSet get_region_set(const std::string &set_name) const
static const std::string field_descriptor_record_description(const string &record_name)
static Input::Type::Abstract & get_input_type()
virtual void start_add_assembly()
std::shared_ptr< EqData > eq_data_
LinSys & lin_sys_schur()
Getter for the linear system of the 2. Schur complement.
FieldCommon & input_default(const string &input_default)
static const Input::Type::Record & get_input_type()
Cell accessor allow iterate over DOF handler cells.
virtual void finish_assembly()=0
Global macros to enhance readability and debugging, general constants.
static const int registrar
Registrar of class to factory.
Mixed-hybrid model of linear Darcy flow, possibly unsteady.
RichardsLMH(Mesh &mesh, const Input::Record in_rec, TimeGovernor *tm=nullptr)
FieldCommon & description(const string &description)
void assembly_linear_system() override
#define ASSERT_PTR(ptr)
Definition of assert macro checking non-null pointer (PTR) only for debug mode.
std::shared_ptr< EqFields > eq_fields_
#define START_TIMER(tag)
Starts a timer with specified tag.
Field< 3, FieldValue< 3 >::Scalar > water_content_saturated
void initialize_specific() override
FieldCommon & name(const string &name)