19 #ifndef HM_ITERATIVE_HH_
20 #define HM_ITERATIVE_HH_
47 <<
"Nonlinear solver did not converge. Reason: " << EI_Reason::val
52 "Record with data for iterative coupling.\n")
54 "Maximal count of HM iterations." )
56 "Minimal count of HM iterations." )
58 "Absolute tolerance for difference in HM iteration." )
60 "Relative tolerance for difference in HM iteration." )
67 min_it_ = in_record.
val<
unsigned int>(
"min_it");
68 max_it_ = in_record.
val<
unsigned int>(
"max_it");
77 double abs_error = std::numeric_limits<double>::max();
78 double rel_error = std::numeric_limits<double>::max();
Mixed-hybrid model of linear Darcy flow, possibly unsteady.
Common abstract parent of all Field<...> classes.
Container for various descendants of FieldCommonBase.
const Mesh * mesh() const
Returns pointer to mesh.
Class template representing a field with values dependent on: point, element, and region.
double p_dif2
Squared norm of pressure difference in two subsequent iterations.
std::shared_ptr< DarcyLMH > flow_
steady or unsteady water flow simulator based on MH scheme
std::shared_ptr< Elasticity > mechanics_
solute transport with chemistry through operator splitting
double p_norm2
Squared pressure norm in the last iteration.
std::shared_ptr< FieldFE< 3, FieldValue< 3 >::Scalar > > old_iter_pressure_ptr_
Field< 3, FieldValue< 3 >::Scalar > flow_source
Field< 3, FieldValue< 3 >::Scalar > density
Density of fluid.
Field< 3, FieldValue< 3 >::Scalar > old_pressure
Field< 3, FieldValue< 3 >::Scalar > old_iter_pressure
Field< 3, FieldValue< 3 >::Scalar > beta
Field< 3, FieldValue< 3 >::Scalar > ref_pressure_potential
Potential of reference (prescribed) pressure from flow b.c. TODO: Swith to BCField when possible.
std::shared_ptr< FieldFE< 3, FieldValue< 3 >::Scalar > > ref_potential_ptr_
FieldFE for pressure_potential field.
Field< 3, FieldValue< 3 >::Scalar > alpha
Biot coefficient.
Field< 3, FieldValue< 3 >::Scalar > old_div_u
std::shared_ptr< FieldFE< 3, FieldValue< 3 >::Scalar > > old_div_u_ptr_
void initialize(Mesh &mesh, HM_Iterative::EqData &eq_data, const TimeGovernor *time_, double beta_)
Field< 3, FieldValue< 3 >::Scalar > pressure_potential
Potential -alpha*pressure whose gradient is passed to mechanics as additional load.
Field< 3, FieldValue< 3 >::Scalar > gravity
Standard gravity.
Class for solution of fully coupled flow and mechanics using fixed-stress iterative splitting.
void solve_iteration() override
Solve equations and update data (fields).
GenericAssembly< FlowPotentialAssemblyHM > * flow_potential_assembly_
GenericAssembly< ResidualAssemblyHM > * residual_assembly_
void initialize() override
static const Input::Type::Record & get_input_type()
Define input record.
static const int registrar
void update_after_iteration() override
Save data (e.g. solution fields) for the next iteration.
std::shared_ptr< EqData > eq_data_
void update_solution() override
void compute_iteration_error(double &abs_error, double &rel_error) override
Compute absolute and relative error in the solution.
void zero_time_step() override
void update_flow_fields()
HM_Iterative(Mesh &mesh, Input::Record in_record)
void update_after_converged() override
Save data after iterations have finished.
std::shared_ptr< EqFields > eq_fields_
unsigned int it
Iteration index.
double r_tol_
Relative tolerance for difference between two succeeding iterations.
virtual void solve_iteration()=0
Solve equations and update data (fields).
double a_tol_
Absolute tolerance for difference between two succeeding iterations.
DECLARE_EXCEPTION(ExcSolverDiverge,<< "Nonlinear solver did not converge. Reason: "<< EI_Reason::val)
unsigned int min_it_
Minimal number of iterations to perform.
virtual void compute_iteration_error(double &abs_error, double &rel_error)=0
Compute absolute and relative error in the solution.
unsigned int max_it_
Maximal number of iterations.
virtual void update_after_iteration()=0
Save data (e.g. solution fields) for the next iteration.
IterativeCoupling(Input::Record in_record)
TYPEDEF_ERR_INFO(EI_Reason, string)
static const Input::Type::Record & record_template()
virtual void update_after_converged()=0
Save data after iterations have finished.
Basic time management functionality for unsteady (and steady) solvers (class Equation).
FEM for linear elasticity.
Abstract base class for equation clasess.
#define END_TIMER(tag)
Ends a timer with specified tag.
#define START_TIMER(tag)
Starts a timer with specified tag.