Go to the documentation of this file.
28 #include "petscviewer.h"
29 #include "petscerror.h"
85 .
add_value(
MortarP1,
"P1",
"Mortar space: P1 on intersections, using non-conforming pressures.")
95 "Boundary piezometric head for BC types: dirichlet, robin, and river." )
97 "Boundary switch piezometric head for BC types: seepage, river." )
99 "Initial condition for the pressure given as the piezometric head." )
101 return field_descriptor;
107 "Linear solver for MH problem.")
109 "Residual tolerance.")
111 "Minimum number of iterations (linear solutions) to use.\nThis is usefull if the convergence criteria "
112 "does not characterize your goal well enough so it converges prematurely, possibly even without a single linear solution."
113 "If greater then 'max_it' the value is set to 'max_it'.")
115 "Maximum number of iterations (linear solutions) of the non-linear solver.")
117 "If a stagnation of the nonlinear solver is detected the solver stops. "
118 "A divergence is reported by default, forcing the end of the simulation. By setting this flag to 'true', the solver "
119 "ends with convergence success on stagnation, but it reports warning about it.")
129 "Vector of the gravity force. Dimensionless.")
131 "Input data for Darcy flow model.")
133 "Non-linear solver for MH problem.")
135 "Output stream settings.\n Specify file format, precision etc.")
138 IT::Default(
"{ \"fields\": [ \"pressure_p0\", \"velocity_p0\" ] }"),
139 "Specification of output fields and output times.")
141 "Output settings specific to Darcy flow model.\n"
142 "Includes raw output and some experimental functionality.")
144 "Settings for computing mass balance.")
146 "Method for coupling Darcy flow between dimensions on incompatible meshes. [Experimental]" )
152 Input::register_class< DarcyLMH, Mesh &, const Input::Record >(equation_name()) +
162 .
description(
"Pressure solution - P0 interpolation.");
167 .
description(
"Pressure solution - Crouzeix-Raviart interpolation.");
172 .
description(
"Piezo head solution - P0 interpolation.");
177 .
description(
"Velocity solution - P0 interpolation.");
185 .
description(
"Anisotropy of the conductivity tensor.")
190 .
description(
"Complement dimension parameter (cross section for 1D, thickness for 2D).")
201 .
description(
"Transition coefficient between dimensions.")
219 .description(
"Prescribed pressure value on the boundary. Used for all values of ``bc_type`` except ``none`` and ``seepage``. "
220 "See documentation of ``bc_type`` for exact meaning of ``bc_pressure`` in individual boundary condition types.")
221 .input_default(
"0.0")
227 .description(
"Incoming water boundary flux. Used for bc_types : ``total_flux``, ``seepage``, ``river``.")
228 .input_default(
"0.0")
229 .units(
UnitSI().m().s(-1) );
233 .name(
"bc_robin_sigma")
234 .description(
"Conductivity coefficient in the ``total_flux`` or the ``river`` boundary condition type.")
235 .input_default(
"0.0")
240 .name(
"bc_switch_pressure")
241 .description(
"Critical switch pressure for ``seepage`` and ``river`` boundary conditions.")
242 .input_default(
"0.0")
248 .
description(
"Initial condition for pressure in time dependent problems.")
253 .
description(
"Storativity (in time dependent problems).")
258 .
description(
"Storativity added from upstream equation.")
264 .
description(
"Water source density added from upstream equation.")
305 "Homogeneous Neumann boundary condition\n(zero normal flux over the boundary).")
307 "Dirichlet boundary condition. "
308 "Specify the pressure head through the ``bc_pressure`` field "
309 "or the piezometric head through the ``bc_piezo_head`` field.")
310 .
add_value(total_flux,
"total_flux",
"Flux boundary condition (combines Neumann and Robin type). "
311 "Water inflow equal to (($ \\delta_d(q_d^N + \\sigma_d (h_d^R - h_d) )$)). "
312 "Specify the water inflow by the ``bc_flux`` field, the transition coefficient by ``bc_robin_sigma`` "
313 "and the reference pressure head or piezometric head through ``bc_pressure`` or ``bc_piezo_head`` respectively.")
315 "Seepage face boundary condition. Pressure and inflow bounded from above. Boundary with potential seepage flow "
316 "is described by the pair of inequalities: "
317 "(($h_d \\le h_d^D$)) and (($ -\\boldsymbol q_d\\cdot\\boldsymbol n \\le \\delta q_d^N$)), where the equality holds in at least one of them. "
318 "Caution: setting (($q_d^N$)) strictly negative "
319 "may lead to an ill posed problem since a positive outflow is enforced. "
320 "Parameters (($h_d^D$)) and (($q_d^N$)) are given by the fields ``bc_switch_pressure`` (or ``bc_switch_piezo_head``) and ``bc_flux`` respectively."
323 "River boundary condition. For the water level above the bedrock, (($H_d > H_d^S$)), the Robin boundary condition is used with the inflow given by: "
324 "(( $ \\delta_d(q_d^N + \\sigma_d(H_d^D - H_d) )$)). For the water level under the bedrock, constant infiltration is used: "
325 "(( $ \\delta_d(q_d^N + \\sigma_d(H_d^D - H_d^S) )$)). Parameters: ``bc_pressure``, ``bc_switch_pressure``, "
326 " ``bc_sigma``, ``bc_flux``."
341 auto size = dh_p_->get_local_to_global_map().size();
342 save_local_system_.resize(
size);
343 bc_fluxes_reconstruted.resize(
size);
344 loc_system_.resize(
size);
345 postprocess_solution_.resize(
size);
351 std::fill(save_local_system_.begin(), save_local_system_.end(),
false);
352 std::fill(bc_fluxes_reconstruted.begin(), bc_fluxes_reconstruted.end(),
false);
393 MessageOut() <<
"Duplicate key 'time', time in flow equation is already initialized from parent class!";
433 return next_t * (1 - 2*std::numeric_limits<double>::epsilon());
454 gravity_array.copy_to(gvec);
460 auto field_algo=std::make_shared<FieldConstant<3, FieldValue<3>::VectorFixed>>();
461 field_algo->set_value(gvalue);
462 eq_fields_->gravity_field.set(field_algo, 0.0);
482 MessageOut() <<
"Missing the key 'time', obligatory for the transient problems." << endl;
493 std::shared_ptr< FiniteElement<1> > fe1_rt = std::make_shared<FE_RT0_disc<1>>();
494 std::shared_ptr< FiniteElement<2> > fe2_rt = std::make_shared<FE_RT0_disc<2>>();
495 std::shared_ptr< FiniteElement<3> > fe3_rt = std::make_shared<FE_RT0_disc<3>>();
496 std::shared_ptr< FiniteElement<0> > fe0_disc = std::make_shared<FE_P_disc<0>>(0);
497 std::shared_ptr< FiniteElement<1> > fe1_disc = std::make_shared<FE_P_disc<1>>(0);
498 std::shared_ptr< FiniteElement<2> > fe2_disc = std::make_shared<FE_P_disc<2>>(0);
499 std::shared_ptr< FiniteElement<3> > fe3_disc = std::make_shared<FE_P_disc<3>>(0);
500 std::shared_ptr< FiniteElement<0> > fe0_cr = std::make_shared<FE_CR<0>>();
501 std::shared_ptr< FiniteElement<1> > fe1_cr = std::make_shared<FE_CR<1>>();
502 std::shared_ptr< FiniteElement<2> > fe2_cr = std::make_shared<FE_CR<2>>();
503 std::shared_ptr< FiniteElement<3> > fe3_cr = std::make_shared<FE_CR<3>>();
505 FESystem<0> fe0_sys( {fe0_disc, fe0_disc, fe0_cr} );
511 std::shared_ptr<DiscreteSpace> ds = std::make_shared<EqualOrderDiscreteSpace>(
mesh_, fe_sys);
512 eq_data_->dh_ = std::make_shared<DOFHandlerMultiDim>(*
mesh_);
522 uint rt_component = 0;
524 auto ele_flux_ptr = create_field_fe<3, FieldValue<3>::VectorFixed>(
eq_data_->dh_, &
eq_data_->full_solution, rt_component);
529 uint p_ele_component = 1;
530 auto ele_pressure_ptr = create_field_fe<3, FieldValue<3>::Scalar>(
eq_data_->dh_, &
eq_data_->full_solution, p_ele_component);
531 eq_fields_->field_ele_pressure.set(ele_pressure_ptr, 0.0);
533 uint p_edge_component = 2;
534 auto edge_pressure_ptr = create_field_fe<3, FieldValue<3>::Scalar>(
eq_data_->dh_, &
eq_data_->full_solution, p_edge_component);
535 eq_fields_->field_edge_pressure.set(edge_pressure_ptr, 0.0);
544 uint p_element_component = 1;
545 eq_data_->dh_p_ = std::make_shared<SubDOFHandlerMultiDim>(
eq_data_->dh_,p_element_component);
549 uint p_edge_component = 2;
550 eq_data_->dh_cr_ = std::make_shared<SubDOFHandlerMultiDim>(
eq_data_->dh_,p_edge_component);
555 std::shared_ptr<DiscreteSpace> ds_cr_disc = std::make_shared<EqualOrderDiscreteSpace>(
mesh_, fe_cr_disc);
556 eq_data_->dh_cr_disc_ = std::make_shared<DOFHandlerMultiDim>(*
mesh_);
557 eq_data_->dh_cr_disc_->distribute_dofs(ds_cr_disc);
568 eq_data_->p_edge_solution_previous_time =
eq_data_->dh_cr_->create_vector();
577 .val<Input::AbstractRecord>(
"linear_solver");
655 eq_data_->p_edge_solution.zero_entries();
657 if (
eq_data_->use_steady_assembly_) {
658 MessageOut() <<
"Flow zero time step - steady case\n";
662 MessageOut() <<
"Flow zero time step - unsteady case\n";
672 START_TIMER(
"DarcyFlowMH::reconstruct_solution_from_schur");
674 END_TIMER(
"DarcyFlowMH::reconstruct_solution_from_schur");
693 eq_data_->full_solution.local_to_ghost_begin();
694 eq_data_->full_solution.local_to_ghost_end();
702 bool jump_time =
eq_fields_->storativity.is_jump_time();
703 if (! zero_time_term_from_left) {
704 MessageOut() <<
"Flow time step - unsteady case\n";
709 eq_data_->use_steady_assembly_ =
false;
715 WarningOut() <<
"Output of solution discontinuous in time not supported yet.\n";
724 if (! zero_time_term_from_left && ! jump_time && output)
731 if (zero_time_term_from_right) {
732 MessageOut() <<
"Flow time step - steady case\n";
734 eq_data_->use_steady_assembly_ =
true;
739 }
else if (! zero_time_term_from_left && jump_time) {
740 WarningOut() <<
"Discontinuous time term not supported yet.\n";
751 return (
eq_fields_->storativity.input_list_size() == 0);
764 MessageOut().fmt(
"[nonlinear solver] norm of initial residual: {}\n", residual_norm);
767 int is_linear_common;
772 this->
max_n_it_ = nl_solver_rec.
val<
unsigned int>(
"max_it");
773 this->
min_n_it_ = nl_solver_rec.
val<
unsigned int>(
"min_it");
774 if (this->min_n_it_ > this->max_n_it_) this->min_n_it_ = this->
max_n_it_;
776 if (! is_linear_common) {
782 while (
eq_data_->nonlinear_iteration_ < this->min_n_it_ ||
783 (residual_norm > this->tolerance_ &&
eq_data_->nonlinear_iteration_ < this->max_n_it_ )) {
785 convergence_history.push_back(residual_norm);
789 if (convergence_history.size() >= 5 &&
790 convergence_history[ convergence_history.size() - 1]/convergence_history[ convergence_history.size() - 2] > 0.9 &&
791 convergence_history[ convergence_history.size() - 1]/convergence_history[ convergence_history.size() - 5] > 0.8) {
794 WarningOut().fmt(
"Accept solution on stagnation. Its: {} Residual: {}\n",
eq_data_->nonlinear_iteration_, residual_norm);
797 THROW(ExcSolverDiverge() << EI_Reason(
"Stagnation."));
801 if (! is_linear_common){
803 eq_data_->p_edge_solution_previous.local_to_ghost_begin();
804 eq_data_->p_edge_solution_previous.local_to_ghost_end();
808 MessageOut().fmt(
"[schur solver] lin. it: {}, reason: {}, residual: {}\n",
814 if (is_linear_common){
817 MessageOut().fmt(
"[nonlinear solver] lin. it: {}, reason: {}, residual: {}\n",
824 VecAXPBY(
eq_data_->p_edge_solution.petsc_vec(), (1-alpha), alpha,
eq_data_->p_edge_solution_previous.petsc_vec());
831 MessageOut().fmt(
"[nonlinear solver] it: {} lin. it: {}, reason: {}, residual: {}\n",
836 START_TIMER(
"DarcyFlowMH::reconstruct_solution_from_schur");
838 END_TIMER(
"DarcyFlowMH::reconstruct_solution_from_schur");
843 if (
eq_data_->nonlinear_iteration_ < 3) mult = 1.6;
844 if (
eq_data_->nonlinear_iteration_ > 7) mult = 0.7;
854 eq_data_->p_edge_solution_previous_time.copy_from(
eq_data_->p_edge_solution);
855 eq_data_->p_edge_solution_previous_time.local_to_ghost_begin();
856 eq_data_->p_edge_solution_previous_time.local_to_ghost_end();
921 double zeros[100000];
922 for(
int i=0; i<100000; i++) zeros[i] = 0.0;
925 tmp_rows.reserve(200);
928 dofs.reserve(
eq_data_->dh_cr_->max_elem_dofs());
929 dofs_ngh.reserve(
eq_data_->dh_cr_->max_elem_dofs());
935 const uint ndofs = dh_cell.n_dofs();
936 dofs.resize(dh_cell.n_dofs());
937 dh_cell.get_dof_indices(dofs);
939 int* dofs_ptr = dofs.
data();
946 for (
DHCellSide neighb_side : dh_cell.neighb_sides() ) {
954 const uint ndofs_ngh = dh_neighb_cell.
n_dofs();
955 dofs_ngh.resize(ndofs_ngh);
959 tmp_rows.push_back(dofs_ngh[neighb_side.side().side_idx()]);
1119 eq_data_->lin_sys_schur = std::make_shared<LinSys_PETSC>( &(*
eq_data_->dh_cr_->distr()) );
1192 eq_data_->full_solution.zero_entries();
1193 eq_data_->p_edge_solution.zero_entries();
1197 THROW( ExcUnknownSolver() );
1232 START_TIMER(
"DarcyFlowMH::assembly_linear_system");
1235 eq_data_->p_edge_solution.local_to_ghost_begin();
1236 eq_data_->p_edge_solution.local_to_ghost_end();
1258 START_TIMER(
"DarcyLMH::assembly_steady_mh_matrix");
1260 END_TIMER(
"DarcyLMH::assembly_steady_mh_matrix");
1273 std::string output_file;
1276 double d_max = std::numeric_limits<double>::max();
1277 double h1 = d_max, h2 = d_max, h3 = d_max;
1278 double he2 = d_max, he3 = d_max;
1281 case 1: h1 = std::min(h1,ele.measure());
break;
1282 case 2: h2 = std::min(h2,ele.measure());
break;
1283 case 3: h3 = std::min(h3,ele.measure());
break;
1286 for (
unsigned int j=0; j<ele->n_sides(); j++) {
1288 case 2: he2 = std::min(he2, ele.side(j)->measure());
break;
1289 case 3: he3 = std::min(he3, ele.side(j)->measure());
break;
1293 if(h1 == d_max) h1 = 0;
1294 if(h2 == d_max) h2 = 0;
1295 if(h3 == d_max) h3 = 0;
1296 if(he2 == d_max) he2 = 0;
1297 if(he3 == d_max) he3 = 0;
1300 file = fopen(output_file.c_str(),
"a");
1302 fprintf(file,
"nB = %d;\n",
eq_data_->dh_->mesh()->get_el_ds()->size());
1304 fprintf(file,
"h1 = %e;\nh2 = %e;\nh3 = %e;\n", h1, h2, h3);
1305 fprintf(file,
"he2 = %e;\nhe3 = %e;\n", he2, he3);
1311 PetscViewerASCIIOpen(PETSC_COMM_WORLD, output_file.c_str(), &viewer);
1312 PetscViewerSetFormat(viewer, PETSC_VIEWER_ASCII_MATLAB);
1313 MatView( *
const_cast<Mat*
>(
lin_sys_schur().get_matrix()), viewer);
1314 VecView( *
const_cast<Vec*
>(
lin_sys_schur().get_rhs()), viewer);
1315 VecView( *
const_cast<Vec*
>(&(
lin_sys_schur().get_solution())), viewer);
1316 VecView( *
const_cast<Vec*
>(&(
eq_data_->full_solution.petsc_vec())), viewer);
1513 if(
time_ !=
nullptr)
1532 void dofs_range(
unsigned int n_dofs,
unsigned int &min,
unsigned int &max,
unsigned int component) {
1536 }
else if (component==1) {
1547 ASSERT_LT(component, 3).error(
"Invalid component!");
1548 unsigned int i, n_dofs, min, max;
1552 n_dofs = dh_cell.get_dof_indices(dof_indices);
1554 for (i=min; i<max; ++i) dof_vec.push_back(dof_indices[i]);
FieldCommon & units(const UnitSI &units)
Set basic units of the field.
unsigned int n_neighs_vb() const
Return number of neighbours.
static Input::Type::Record & user_fields_template(std::string equation_name)
Template Record with common key user_fields for derived equations.
BCField< 3, FieldValue< 3 >::Scalar > bc_flux
Field< 3, FieldValue< 3 >::Scalar > conductivity
void print_matlab_matrix(string matlab_file)
Print darcy flow matrix in matlab format into a file.
virtual bool zero_time_term(bool time_global=false)
void output()
Calculate values for output.
void reset()
Reset data members.
static UnitSI & dimensionless()
Returns dimensionless unit.
DarcyFlowMHOutput * output_object
Basic time management class.
std::shared_ptr< FieldSet > eq_fieldset_
const RegionDB & region_db() const
virtual void accept_time_step()
postprocess velocity field (add sources)
void set_symmetric(bool flag=true)
void create_linear_system(Input::AbstractRecord rec)
unsigned int n_sides() const
Support classes for parallel programing.
friend class DarcyFlowMHOutput
unsigned int get_dof_indices(std::vector< LongIdx > &indices) const
Fill vector of the global indices of dofs associated to the cell.
int set_upper_constraint(double upper, std::string message)
Sets upper constraint for the next time step estimating.
EqFields()
Creation of all fields.
FMT_FUNC int fprintf(std::ostream &os, CStringRef format, ArgList args)
Dedicated class for storing path to input and output files.
Wrappers for linear systems based on MPIAIJ and MATIS format.
virtual PetscErrorCode rhs_zero_entries()
#define FLOW123D_FORCE_LINK_IN_CHILD(x)
unsigned int n_edges() const
virtual PetscErrorCode mat_zero_entries()
#define THROW(whole_exception_expr)
Wrapper for throw. Saves the throwing point.
FieldCommon & set_limits(double min, double max=std::numeric_limits< double >::max())
Functors of FieldModels used in Darcy flow module.
FieldCommon & flags(FieldFlag::Flags::Mask mask)
void solve_time_step(bool output=true)
Solve the problem without moving to next time and without output.
void update_solution() override
virtual SolveInfo solve()=0
static const Input::Type::Record & get_input_type()
Solver based on the original PETSc solver using MPIAIJ matrix and succesive Schur complement construc...
virtual void initialize_asm()
Create and initialize assembly objects.
Lumped mixed-hybrid model of linear Darcy flow, possibly unsteady.
virtual void postprocess()
virtual void assembly_linear_system()
Range< ElementAccessor< 3 > > elements_range() const
Returns range of mesh elements.
void set_positive_definite(bool flag=true)
GenericAssemblyBase * mh_matrix_assembly_
virtual void assemble(std::shared_ptr< DOFHandlerMultiDim > dh)=0
void assemble(std::shared_ptr< DOFHandlerMultiDim > dh) override
General assemble methods.
Field< 3, FieldValue< 3 >::Scalar > cross_section
#define ASSERT_LT(a, b)
Definition of comparative assert macro (Less Than) only for debug mode.
BCField< 3, FieldValue< 3 >::Scalar > bc_switch_pressure
void set_matrix_changed()
Definitions of basic Lagrangean finite elements with polynomial shape functions.
static const Input::Type::Record & type_field_descriptor()
void zero_time_step() override
virtual void start_allocation()
static const Input::Type::Instance & get_input_type(FieldSet &eq_data, const std::string &equation_name)
bool is_end() const
Returns true if the actual time is greater than or equal to the end time.
Side accessor allows to iterate over sides of DOF handler cell.
BCField< 3, FieldValue< 3 >::Scalar > bc_robin_sigma
BCMesh * bc_mesh() const override
Implement MeshBase::bc_mesh(), getter of boundary mesh.
virtual double compute_residual()=0
BCField< 3, FieldValue< 3 >::VectorFixed > bc_gravity
Holds gravity vector acceptable in FieldModel.
BCField< 3, FieldValue< 3 >::Scalar > bc_switch_piezo_head
virtual void set_tolerances(double r_tol, double a_tol, unsigned int max_it)=0
void set_default_fieldset()
static constexpr Mask equation_result
Match result fields. These are never given by input or copy of input.
BCField< 3, FieldValue< 3 >::Scalar > bc_piezo_head
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.
void solve_nonlinear()
Solve method common to zero_time_step and update solution.
Assembly explicit Schur complement for the given linear system. Provides method for resolution of the...
std::shared_ptr< Balance > balance_
static const int registrar
Registrar of class to factory.
Basic time management functionality for unsteady (and steady) solvers (class Equation).
const TimeStep & step(int index=-1) const
static const Input::Type::Selection & get_bc_type_selection()
Return a Selection corresponding to enum BC_Type.
virtual double solved_time() override
Field< 3, FieldValue< 3 >::Scalar > init_piezo_head
Same as previous but used in boundary fields.
Field< 3, FieldValue< 3 >::TensorFixed > anisotropy
Field< 3, FieldValue< 3 >::VectorFixed > flux
Class for representation SI units of Fields.
#define ASSERT_EQ(a, b)
Definition of comparative assert macro (EQual) only for debug mode.
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)
BCField< 3, FieldValue< 3 >::Scalar > bc_pressure
static const Input::Type::Instance & get_input_type_specific()
static std::string equation_name()
unsigned int n_dofs() const
Return number of dofs on given cell.
virtual void initialize_specific()
MortarMethod
Type of experimental Mortar-like method for non-compatible 1d-2d interaction.
static Input::Type::Abstract & get_input_type()
virtual void start_add_assembly()
std::shared_ptr< EqData > eq_data_
double estimate_dt() const
Estimate choice of next time step according to actual setting of constraints.
void view(const char *name="") const
static constexpr Mask input_copy
virtual ~DarcyLMH() override
void initialize() override
Field< 3, FieldValue< 3 >::Scalar > field_ele_pressure
Externally added water source.
std::vector< int > get_component_indices_vec(unsigned int component) const
Get vector of all DOF indices of given component (0..side, 1..element, 2..edge)
void init()
Initialize vectors, ...
Field< 3, FieldValue< 3 >::Scalar > extra_source
Externally added storativity.
LinSys & lin_sys_schur()
Getter for the linear system of the 2. Schur complement.
virtual void set_from_input(const Input::Record in_rec)
FieldCommon & input_default(const string &input_default)
Field< 3, FieldValue< 3 >::VectorFixed > field_ele_velocity
Field< 3, FieldValue< 3 >::Scalar > sigma
static const Input::Type::Record & get_input_type()
The specification of output stream.
Cell accessor allow iterate over DOF handler cells.
virtual void finish_assembly()=0
static const Input::Type::Selection & get_mh_mortar_selection()
Selection for enum MortarMethod.
#define MPI_Allreduce(sendbuf, recvbuf, count, datatype, op, comm)
#define WarningOut()
Macro defining 'warning' record of log.
Field< 3, FieldValue< 3 >::Scalar > field_ele_piezo_head
void allocate_mh_matrix()
static Input::Type::Record & record_template()
Template Record with common keys for derived equations.
void set_solution(Vec sol_vec)
Field< 3, FieldValue< 3 >::Scalar > init_pressure
GenericAssemblyBase * reconstruct_schur_assembly_
Field< 3, FieldValue< 3 >::Scalar > water_source_density
static Input::Type::Abstract & get_input_type()
GenericAssembly< ReadInitCondAssemblyLMH > * read_init_cond_assembly_
general assembly objects, hold assembly objects of appropriate dimension
Field< 3, FieldValue< 3 >::VectorFixed > gravity_field
unsigned int n_elements() const
Field< 3, FieldValue< 3 >::Scalar > field_edge_pressure
FieldCommon & input_selection(Input::Type::Selection element_selection)
FieldCommon & description(const string &description)
Field< 3, FieldValue< 3 >::Scalar > storativity
virtual void read_init_cond_asm()
Call assemble of read_init_cond_assembly_.
void dofs_range(unsigned int n_dofs, unsigned int &min, unsigned int &max, unsigned int component)
Helper method fills range (min and max) of given component.
BCField< 3, FieldValue< 3 >::Enum > bc_type
MixedMeshIntersections & mixed_intersections()
auto disable_where(const Field< spacedim, typename FieldValue< spacedim >::Enum > &control_field, const vector< FieldEnum > &value_list) -> Field &
void next_time()
Proceed to the next time according to current estimated time step.
std::shared_ptr< EqFields > eq_fields_
Field< 3, FieldValue< 3 >::Scalar > extra_storativity
virtual void output_data() override
Write computed fields.
#define START_TIMER(tag)
Starts a timer with specified tag.
Compound finite element on dim dimensional simplex.
DarcyLMH(Mesh &mesh, const Input::Record in_rec, TimeGovernor *tm=nullptr)
CREATE AND FILL GLOBAL MH MATRIX OF THE WATER MODEL.
static const Input::Type::Record & get_input_type()
static const Input::Type::Record & get_input_type()
Main balance input record type.
#define END_TIMER(tag)
Ends a timer with specified tag.
FieldCommon & name(const string &name)
Implementation of range helper class.
#define MessageOut()
Macro defining 'message' record of log.
virtual void mat_set_values(int nrow, int *rows, int ncol, int *cols, double *vals)=0
Classes with algorithms for computation of intersections of meshes.