Flow123d  master-130ae5c
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Static Private Member Functions | Static Private Attributes | Friends | List of all members
DarcyLMH Class Reference

Mixed-hybrid model of linear Darcy flow, possibly unsteady. More...

#include <darcy_flow_lmh.hh>

Inheritance diagram for DarcyLMH:
Inheritance graph
[legend]
Collaboration diagram for DarcyLMH:
Collaboration graph
[legend]

Classes

class  EqData
 
class  EqFields
 

Public Member Functions

 TYPEDEF_ERR_INFO (EI_Reason, string)
 
 DECLARE_EXCEPTION (ExcSolverDiverge,<< "Diverged nonlinear solver. Reason: "<< EI_Reason::val)
 
 DECLARE_INPUT_EXCEPTION (ExcMissingTimeGovernor,<< "Missing the key 'time', obligatory for the transient problems.")
 
 DarcyLMH (Mesh &mesh, const Input::Record in_rec, TimeGovernor *tm=nullptr)
 CREATE AND FILL GLOBAL MH MATRIX OF THE WATER MODEL. More...
 
void init_eq_data ()
 
void initialize () override
 
virtual void initialize_specific ()
 
void zero_time_step () override
 
void update_solution () override
 
void solve_time_step (bool output=true)
 Solve the problem without moving to next time and without output. More...
 
virtual void accept_time_step ()
 postprocess velocity field (add sources) More...
 
virtual void postprocess ()
 
virtual void output_data () override
 Write computed fields. More...
 
virtual double solved_time () override
 
EqFieldseq_fields ()
 
EqDataeq_data ()
 
void set_extra_storativity (const Field< 3, FieldValue< 3 >::Scalar > &extra_stor)
 Sets external storarivity field (coupling with other equation). More...
 
void set_extra_source (const Field< 3, FieldValue< 3 >::Scalar > &extra_src)
 Sets external source field (coupling with other equation). More...
 
virtual ~DarcyLMH () override
 
- Public Member Functions inherited from DarcyFlowInterface
 DECLARE_EXCEPTION (ExcBddcmlNotSupported,<< "Flow123d was not build with BDDCML support.\n")
 
 DECLARE_EXCEPTION (ExcUnknownSolver,<< "Unknown solver type. Internal error.\n")
 
 DarcyFlowInterface (Mesh &mesh, const Input::Record in_rec)
 
virtual ~DarcyFlowInterface ()
 
- Public Member Functions inherited from EquationBase
 EquationBase ()
 
 EquationBase (Mesh &mesh, const Input::Record in_rec)
 
virtual ~EquationBase ()
 
virtual void choose_next_time ()
 
virtual void set_time_upper_constraint (double dt, std::string message)
 
virtual void set_time_lower_constraint (double dt, std::string message)
 
TimeGovernortime ()
 
virtual void set_time_governor (TimeGovernor &time)
 
double planned_time ()
 
Meshmesh ()
 
std::shared_ptr< Balancebalance () const
 
TimeMark::Type mark_type ()
 
FieldSeteq_fieldset ()
 
std::shared_ptr< FieldSeteq_fieldset_ptr ()
 
void init_user_fields (Input::Array user_fields, FieldSet &output_fields)
 

Static Public Member Functions

static const Input::Type::Selectionget_mh_mortar_selection ()
 Selection for enum MortarMethod. More...
 
static const Input::Type::Recordtype_field_descriptor ()
 
static const Input::Type::Recordget_input_type ()
 
- Static Public Member Functions inherited from DarcyFlowInterface
static Input::Type::Abstractget_input_type ()
 
- Static Public Member Functions inherited from EquationBase
static Input::Type::Recordrecord_template ()
 Template Record with common keys for derived equations. More...
 
static Input::Type::Recorduser_fields_template (std::string equation_name)
 Template Record with common key user_fields for derived equations. More...
 

Protected Member Functions

virtual bool zero_time_term (bool time_global=false)
 
void solve_nonlinear ()
 Solve method common to zero_time_step and update solution. More...
 
void create_linear_system (Input::AbstractRecord rec)
 
void allocate_mh_matrix ()
 
virtual void assembly_linear_system ()
 
void print_matlab_matrix (string matlab_file)
 Print darcy flow matrix in matlab format into a file. More...
 
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) More...
 
LinSyslin_sys_schur ()
 Getter for the linear system of the 2. Schur complement. More...
 
virtual void initialize_asm ()
 Create and initialize assembly objects. More...
 
virtual void read_init_cond_asm ()
 Call assemble of read_init_cond_assembly_. More...
 

Protected Attributes

std::shared_ptr< Balancebalance_
 
DarcyFlowMHOutputoutput_object
 
int size
 
bool data_changed_
 
double tolerance_
 
unsigned int min_n_it_
 
unsigned int max_n_it_
 
std::shared_ptr< EqFieldseq_fields_
 
std::shared_ptr< EqDataeq_data_
 
GenericAssembly< ReadInitCondAssemblyLMH > * read_init_cond_assembly_
 general assembly objects, hold assembly objects of appropriate dimension More...
 
GenericAssemblyBasemh_matrix_assembly_
 
GenericAssemblyBasereconstruct_schur_assembly_
 
- Protected Attributes inherited from EquationBase
bool equation_empty_
 flag is true if only default constructor was called More...
 
Meshmesh_
 
TimeGovernortime_
 
Input::Record input_record_
 
std::shared_ptr< FieldSeteq_fieldset_
 
std::shared_ptr< Balancebalance_
 object for calculation and writing the mass balance to file. More...
 

Static Private Member Functions

static std::string equation_name ()
 

Static Private Attributes

static const int registrar
 Registrar of class to factory. More...
 

Friends

class DarcyFlowMHOutput
 

Additional Inherited Members

- Public Types inherited from DarcyFlowInterface
enum  MortarMethod { NoMortar = 0 , MortarP0 = 1 , MortarP1 = 2 }
 Type of experimental Mortar-like method for non-compatible 1d-2d interaction. More...
 
typedef DarcyFlowInterface FactoryBaseType
 Typedef for usage of Input::Factory in child classes. More...
 

Detailed Description

Mixed-hybrid model of linear Darcy flow, possibly unsteady.

Abstract class for various implementations of Darcy flow. In future there should be one further level of abstraction for general time dependent problem.

maybe TODO: split compute_one_step to : 1) prepare_next_timestep 2) actualize_solution - this is for iterative nonlinear solvers

Mixed-hybrid of steady Darcy flow with sources and variable density.

solve equations:

\[ q= -{\mathbf{K}} \nabla h -{\mathbf{K}} R \nabla z \]

\[ \mathrm{div} q = f \]

where

The time key is optional, when not specified the equation is forced to steady regime. Using Steady TimeGovernor which have no dt constraints.

TODO: Make solution regular field (need FeSeystem and parallel DofHandler for edge pressures), then remove get_solution_vector from Equation interface. Model for transition coefficients due to Martin, Jaffre, Roberts (see manual for full reference)

TODO:

Definition at line 132 of file darcy_flow_lmh.hh.

Constructor & Destructor Documentation

◆ DarcyLMH()

DarcyLMH::DarcyLMH ( Mesh mesh_in,
const Input::Record  in_rec,
TimeGovernor tm = nullptr 
)

CREATE AND FILL GLOBAL MH MATRIX OF THE WATER MODEL.

Parameters {Solver,NSchurs} number of performed Schur complements (0,1,2) for water flow MH-system

Definition at line 390 of file darcy_flow_lmh.cc.

◆ ~DarcyLMH()

DarcyLMH::~DarcyLMH ( )
overridevirtual

Definition at line 1530 of file darcy_flow_lmh.cc.

Member Function Documentation

◆ accept_time_step()

void DarcyLMH::accept_time_step ( )
virtual

postprocess velocity field (add sources)

Reimplemented in RichardsLMH.

Definition at line 871 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ allocate_mh_matrix()

void DarcyLMH::allocate_mh_matrix ( )
protected

Read initial condition into solution vector. Must be called after create_linear_system.

For the LMH scheme we have to be able to save edge pressures in order to restart simulation or use results of one simulation as initial condition for other one. In some circumstances, the intial condition must be processed. It is called at the end of read_initial_condition(). This is used in Richards equation due the update of water content. Allocates linear system matrix for MH. TODO:

  • use general preallocation methods in DofHandler

Definition at line 935 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ assembly_linear_system()

void DarcyLMH::assembly_linear_system ( )
protectedvirtual

Assembles linear system matrix for MH. Element by element assembly is done using dim-template assembly class. Assembles only steady part of the equation. TODO:

  • include time term - DONE
  • add support for Robin type sources
  • support for nonlinear solvers - assembly either residual vector, matrix, or both (using FADBAD++) Assembly or update whole linear system.

Reimplemented in RichardsLMH.

Definition at line 1251 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ create_linear_system()

void DarcyLMH::create_linear_system ( Input::AbstractRecord  rec)
protected

Create and preallocate MH linear system (including matrix, rhs and solution vectors)

Definition at line 1110 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ DECLARE_EXCEPTION()

DarcyLMH::DECLARE_EXCEPTION ( ExcSolverDiverge  ,
<< "Diverged nonlinear solver. Reason: "<< EI_Reason::val   
)

◆ DECLARE_INPUT_EXCEPTION()

DarcyLMH::DECLARE_INPUT_EXCEPTION ( ExcMissingTimeGovernor  ,
<< "Missing the key 'time ,
obligatory for the transient problems."   
)

◆ eq_data()

EqData& DarcyLMH::eq_data ( )
inline

Definition at line 313 of file darcy_flow_lmh.hh.

◆ eq_fields()

EqFields& DarcyLMH::eq_fields ( )
inline

Definition at line 312 of file darcy_flow_lmh.hh.

Here is the caller graph for this function:

◆ equation_name()

static std::string DarcyLMH::equation_name ( )
inlinestaticprivate

Definition at line 437 of file darcy_flow_lmh.hh.

Here is the caller graph for this function:

◆ get_component_indices_vec()

std::vector< int > DarcyLMH::get_component_indices_vec ( unsigned int  component) const
protected

Get vector of all DOF indices of given component (0..side, 1..element, 2..edge)

Definition at line 1566 of file darcy_flow_lmh.cc.

◆ get_input_type()

const it::Record & DarcyLMH::get_input_type ( )
static

Definition at line 104 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ get_mh_mortar_selection()

const it::Selection & DarcyLMH::get_mh_mortar_selection ( )
static

Selection for enum MortarMethod.

Definition at line 81 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ init_eq_data()

void DarcyLMH::init_eq_data ( )

Definition at line 463 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ initialize()

void DarcyLMH::initialize ( )
overridevirtual

This method should initialize fields of the equation. All members (e.g. number of components) that are necessary for the field initialization must be set between construction and call of initialize. After this method the upper level coupling may set sharing of some fields between equations.

Reimplemented from EquationBase.

Definition at line 507 of file darcy_flow_lmh.cc.

◆ initialize_asm()

void DarcyLMH::initialize_asm ( )
protectedvirtual

Create and initialize assembly objects.

Reimplemented in RichardsLMH.

Definition at line 1580 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ initialize_specific()

void DarcyLMH::initialize_specific ( )
virtual

Reimplemented in RichardsLMH.

Definition at line 616 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ lin_sys_schur()

LinSys& DarcyLMH::lin_sys_schur ( )
inlineprotected

Getter for the linear system of the 2. Schur complement.

Definition at line 399 of file darcy_flow_lmh.hh.

Here is the caller graph for this function:

◆ output_data()

void DarcyLMH::output_data ( void  )
overridevirtual

Write computed fields.

Reimplemented from EquationBase.

Definition at line 879 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ postprocess()

void DarcyLMH::postprocess ( )
virtual

Definition at line 1223 of file darcy_flow_lmh.cc.

◆ print_matlab_matrix()

void DarcyLMH::print_matlab_matrix ( string  matlab_file)
protected

Print darcy flow matrix in matlab format into a file.

Return a norm of residual vector. TODO: Introduce Equation::compute_residual() updating residual field, standard part of EqData.

Definition at line 1291 of file darcy_flow_lmh.cc.

◆ read_init_cond_asm()

void DarcyLMH::read_init_cond_asm ( )
protectedvirtual

Call assemble of read_init_cond_assembly_.

Reimplemented in RichardsLMH.

Definition at line 1587 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ set_extra_source()

void DarcyLMH::set_extra_source ( const Field< 3, FieldValue< 3 >::Scalar > &  extra_src)
inline

Sets external source field (coupling with other equation).

Definition at line 320 of file darcy_flow_lmh.hh.

◆ set_extra_storativity()

void DarcyLMH::set_extra_storativity ( const Field< 3, FieldValue< 3 >::Scalar > &  extra_stor)
inline

Sets external storarivity field (coupling with other equation).

Definition at line 316 of file darcy_flow_lmh.hh.

◆ solve_nonlinear()

void DarcyLMH::solve_nonlinear ( )
protected

Solve method common to zero_time_step and update solution.

Definition at line 777 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ solve_time_step()

void DarcyLMH::solve_time_step ( bool  output = true)

Solve the problem without moving to next time and without output.

Definition at line 716 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ solved_time()

double DarcyLMH::solved_time ( )
overridevirtual

Time until which the actual solution is valid. By default, it returns the actual time of the time governor. However, it can be overriden by a specific equation. E.g. it differs in Darcy flow in the steady case.

Reimplemented from EquationBase.

Definition at line 440 of file darcy_flow_lmh.cc.

◆ type_field_descriptor()

const it::Record & DarcyLMH::type_field_descriptor ( )
static

Definition at line 89 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

◆ TYPEDEF_ERR_INFO()

DarcyLMH::TYPEDEF_ERR_INFO ( EI_Reason  ,
string   
)

◆ update_solution()

void DarcyLMH::update_solution ( void  )
overridevirtual

Calculation of the next time step and its output.

Reimplemented from EquationBase.

Definition at line 702 of file darcy_flow_lmh.cc.

◆ zero_time_step()

void DarcyLMH::zero_time_step ( )
overridevirtual

Initialization of the solution in the zero time.

There may be fields that can not be initialized in the initialize method as they are provided by the coupling. Fields coming from coupling has to be set after the initialize method and before zero_time_step.

Reimplemented from EquationBase.

Definition at line 659 of file darcy_flow_lmh.cc.

◆ zero_time_term()

bool DarcyLMH::zero_time_term ( bool  time_global = false)
protectedvirtual

Returns true is the fields involved in the time term have values that makes the time term zero. For time_global==true, it returns true if there are no field descriptors in the input list, so the fields )of the time ter) have their default values for whole simulation. If time_global==false (default), only the actual values are considered.

Reimplemented in RichardsLMH.

Definition at line 768 of file darcy_flow_lmh.cc.

Here is the caller graph for this function:

Friends And Related Function Documentation

◆ DarcyFlowMHOutput

friend class DarcyFlowMHOutput
friend

Definition at line 425 of file darcy_flow_lmh.hh.

Member Data Documentation

◆ balance_

std::shared_ptr<Balance> DarcyLMH::balance_
protected

Definition at line 408 of file darcy_flow_lmh.hh.

◆ data_changed_

bool DarcyLMH::data_changed_
protected

Definition at line 414 of file darcy_flow_lmh.hh.

◆ eq_data_

std::shared_ptr<EqData> DarcyLMH::eq_data_
protected

Definition at line 422 of file darcy_flow_lmh.hh.

◆ eq_fields_

std::shared_ptr<EqFields> DarcyLMH::eq_fields_
protected

Definition at line 421 of file darcy_flow_lmh.hh.

◆ max_n_it_

unsigned int DarcyLMH::max_n_it_
protected

Definition at line 419 of file darcy_flow_lmh.hh.

◆ mh_matrix_assembly_

GenericAssemblyBase* DarcyLMH::mh_matrix_assembly_
protected

Definition at line 431 of file darcy_flow_lmh.hh.

◆ min_n_it_

unsigned int DarcyLMH::min_n_it_
protected

Definition at line 418 of file darcy_flow_lmh.hh.

◆ output_object

DarcyFlowMHOutput* DarcyLMH::output_object
protected

Definition at line 410 of file darcy_flow_lmh.hh.

◆ read_init_cond_assembly_

GenericAssembly< ReadInitCondAssemblyLMH >* DarcyLMH::read_init_cond_assembly_
protected

general assembly objects, hold assembly objects of appropriate dimension

Definition at line 430 of file darcy_flow_lmh.hh.

◆ reconstruct_schur_assembly_

GenericAssemblyBase* DarcyLMH::reconstruct_schur_assembly_
protected

Definition at line 432 of file darcy_flow_lmh.hh.

◆ registrar

const int DarcyLMH::registrar
staticprivate
Initial value:
=
Input::register_class< DarcyLMH, Mesh &, const Input::Record >(equation_name()) +
static std::string equation_name()
static const Input::Type::Record & get_input_type()
unsigned int size() const
Returns number of keys in the Record.
Definition: type_record.hh:602

Registrar of class to factory.

Definition at line 435 of file darcy_flow_lmh.hh.

◆ size

int DarcyLMH::size
protected

Definition at line 412 of file darcy_flow_lmh.hh.

◆ tolerance_

double DarcyLMH::tolerance_
protected

Definition at line 417 of file darcy_flow_lmh.hh.


The documentation for this class was generated from the following files: