Flow123d  release_2.2.0-36-g163dc99
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Static Private Attributes | Friends | List of all members
DarcyMH Class Reference

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

#include <darcy_flow_mh.hh>

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

Classes

class  EqData
 

Public Types

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

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.")
 
 DarcyMH (Mesh &mesh, const Input::Record in_rec)
 CREATE AND FILL GLOBAL MH MATRIX OF THE WATER MODEL. More...
 
const MH_DofHandlerget_mh_dofhandler () override
 
void init_eq_data ()
 
void initialize () override
 
virtual void initialize_specific ()
 
void zero_time_step () override
 
void update_solution () override
 
void get_solution_vector (double *&vec, unsigned int &vec_size) override
 
void get_parallel_solution_vector (Vec &vector) override
 
virtual void prepare_new_time_step ()
 postprocess velocity field (add sources) More...
 
virtual void postprocess ()
 
virtual void output_data () override
 Write computed fields. More...
 
virtual ~DarcyMH () override
 
- Public Member Functions inherited from DarcyFlowInterface
 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 ()
 
double solved_time ()
 
Meshmesh ()
 
TimeMark::Type mark_type ()
 
FieldSetdata ()
 

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 ()
 

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 make_serial_scatter ()
 
void modify_system ()
 
virtual void setup_time_term ()
 
void create_linear_system (Input::AbstractRecord rec)
 Initialize global_row_4_sub_row. More...
 
virtual void read_initial_condition ()
 
void assembly_mh_matrix (MultidimAssembler ma)
 
virtual void assembly_source_term ()
 Source term is implemented differently in LMH version. More...
 
virtual void assembly_linear_system ()
 
void set_mesh_data_for_bddc (LinSys_BDDC *bddc_ls)
 
virtual double solution_precision () const
 

Protected Attributes

bool solution_changed_for_scatter
 
MH_DofHandler mh_dh
 
MortarMethod mortar_method_
 
std::shared_ptr< Balancebalance_
 
unsigned int water_balance_idx_
 index of water balance within the Balance object. More...
 
DarcyFlowMHOutputoutput_object
 
int size
 
int n_schur_compls
 
double * solution
 
int is_linear_
 
bool use_steady_assembly_
 
bool data_changed_
 
double tolerance_
 
unsigned int min_n_it_
 
unsigned int max_n_it_
 
unsigned int nonlinear_iteration_
 
LinSysschur0
 
std::vector< char > bc_switch_dirichlet
 Idicator of dirichlet or neumann type of switch boundary conditions. More...
 
Vec sol_vec
 
VecScatter par_to_all
 
Vec steady_diagonal
 
Vec steady_rhs
 
Vec new_diagonal
 
Vec previous_solution
 
std::shared_ptr< EqDatadata_
 
- Protected Attributes inherited from EquationBase
bool equation_empty_
 flag is true if only default constructor was called More...
 
Meshmesh_
 
TimeGovernortime_
 
Input::Record input_record_
 
FieldSeteq_data_
 
std::shared_ptr< Balancebalance_
 object for calculation and writing the mass balance to file. More...
 

Static Private Attributes

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

Friends

class DarcyFlowMHOutput
 
class P0_CouplingAssembler
 
class P1_CouplingAssembler
 

Detailed Description

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 140 of file darcy_flow_mh.hh.

Member Typedef Documentation

Definition at line 150 of file darcy_flow_mh.hh.

Member Enumeration Documentation

Type of experimental Mortar-like method for non-compatible 1d-2d interaction.

Enumerator
NoMortar 
MortarP0 
MortarP1 

Definition at line 211 of file darcy_flow_mh.hh.

Constructor & Destructor Documentation

DarcyMH::DarcyMH ( Mesh mesh_in,
const Input::Record  in_rec 
)

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 253 of file darcy_flow_mh.cc.

DarcyMH::~DarcyMH ( )
overridevirtual

Definition at line 1520 of file darcy_flow_mh.cc.

Member Function Documentation

void DarcyMH::assembly_linear_system ( )
protectedvirtual

Assembly or update whole linear system.

Reimplemented in RichardsLMH.

Definition at line 1308 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

void DarcyMH::assembly_mh_matrix ( MultidimAssembler  ma)
protected

Part of per element assembly that is specific for MH and LMH respectively.

This implemnets MH case:

  • compute conductivity scaling
  • assembly source term
  • no time term, managed by diagonal extraction etc. Abstract assembly method used for both assembly and preallocation. Assembly only steady part of the equation. TODO:
  • use general preallocation methods in DofHandler
  • include time term
  • add support for Robin type sources
  • support for nonlinear solvers - assembly either residual vector, matrix, or both (using FADBAD++)

Definition at line 653 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

void DarcyMH::assembly_source_term ( )
protectedvirtual

Source term is implemented differently in LMH version.

Reimplemented in RichardsLMH.

Definition at line 951 of file darcy_flow_mh.cc.

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

Initialize global_row_4_sub_row.

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

Definition at line 1209 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

DarcyMH::DECLARE_EXCEPTION ( ExcSolverDiverge  ,
<< "Diverged nonlinear solver. Reason: "<< EI_Reason::val   
)
DarcyMH::DECLARE_INPUT_EXCEPTION ( ExcMissingTimeGovernor  ,
<< "Missing the key 'time ,
obligatory for the transient problems."   
)
const it::Record & DarcyMH::get_input_type ( )
static

Definition at line 131 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

const MH_DofHandler& DarcyMH::get_mh_dofhandler ( )
inlineoverridevirtual

Implements DarcyFlowInterface.

Definition at line 228 of file darcy_flow_mh.hh.

Here is the caller graph for this function:

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

Selection for enum MortarMethod.

Definition at line 78 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

void DarcyMH::get_parallel_solution_vector ( Vec &  vector)
overridevirtual

Child class have to implement getter for parallel solution vector. DEPRECATED

Reimplemented from EquationBase.

Definition at line 634 of file darcy_flow_mh.cc.

void DarcyMH::get_solution_vector ( double *&  vector,
unsigned int &  size 
)
overridevirtual

Child class have to implement getter for sequential solution vector. DEPRECATED

Reimplemented from EquationBase.

Definition at line 617 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

void DarcyMH::init_eq_data ( )

Definition at line 294 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

void DarcyMH::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 335 of file darcy_flow_mh.cc.

void DarcyMH::initialize_specific ( )
virtual

Reimplemented in RichardsLMH.

Definition at line 380 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

void DarcyMH::make_serial_scatter ( )
protected

Definition at line 1543 of file darcy_flow_mh.cc.

void DarcyMH::modify_system ( )
protected

Definition at line 1675 of file darcy_flow_mh.cc.

void DarcyMH::output_data ( void  )
overridevirtual

Write computed fields.

Reimplemented from EquationBase.

Definition at line 597 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

void DarcyMH::postprocess ( )
virtual

Reimplemented in RichardsLMH.

Definition at line 572 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

void DarcyMH::prepare_new_time_step ( )
virtual

postprocess velocity field (add sources)

Reimplemented in RichardsLMH.

Definition at line 567 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

void DarcyMH::read_initial_condition ( )
protectedvirtual

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.

Reimplemented in RichardsLMH.

Definition at line 1621 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

void DarcyMH::set_mesh_data_for_bddc ( LinSys_BDDC bddc_ls)
protected

type for storage of global to local map

Definition at line 1363 of file darcy_flow_mh.cc.

void DarcyMH::setup_time_term ( )
protectedvirtual

Reimplemented in RichardsLMH.

Definition at line 1638 of file darcy_flow_mh.cc.

double DarcyMH::solution_precision ( ) const
protectedvirtual

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

Definition at line 610 of file darcy_flow_mh.cc.

void DarcyMH::solve_nonlinear ( )
protected

Solve method common to zero_time_step and update solution.

Definition at line 478 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

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

Definition at line 116 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

DarcyMH::TYPEDEF_ERR_INFO ( EI_Reason  ,
string   
)
void DarcyMH::update_solution ( void  )
overridevirtual

Calculation of the next time step and its output.

Reimplemented from EquationBase.

Definition at line 418 of file darcy_flow_mh.cc.

void DarcyMH::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 383 of file darcy_flow_mh.cc.

bool DarcyMH::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 469 of file darcy_flow_mh.cc.

Here is the caller graph for this function:

Friends And Related Function Documentation

friend class DarcyFlowMHOutput
friend

Definition at line 385 of file darcy_flow_mh.hh.

friend class P0_CouplingAssembler
friend

Definition at line 386 of file darcy_flow_mh.hh.

friend class P1_CouplingAssembler
friend

Definition at line 387 of file darcy_flow_mh.hh.

Member Data Documentation

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

Definition at line 341 of file darcy_flow_mh.hh.

std::vector<char> DarcyMH::bc_switch_dirichlet
protected

Idicator of dirichlet or neumann type of switch boundary conditions.

Definition at line 371 of file darcy_flow_mh.hh.

std::shared_ptr<EqData> DarcyMH::data_
protected

Definition at line 383 of file darcy_flow_mh.hh.

bool DarcyMH::data_changed_
protected

Definition at line 355 of file darcy_flow_mh.hh.

int DarcyMH::is_linear_
protected

Definition at line 350 of file darcy_flow_mh.hh.

unsigned int DarcyMH::max_n_it_
protected

Definition at line 360 of file darcy_flow_mh.hh.

MH_DofHandler DarcyMH::mh_dh
protected

Definition at line 337 of file darcy_flow_mh.hh.

unsigned int DarcyMH::min_n_it_
protected

Definition at line 359 of file darcy_flow_mh.hh.

MortarMethod DarcyMH::mortar_method_
protected

Definition at line 339 of file darcy_flow_mh.hh.

int DarcyMH::n_schur_compls
protected

Definition at line 348 of file darcy_flow_mh.hh.

Vec DarcyMH::new_diagonal
protected

Definition at line 380 of file darcy_flow_mh.hh.

unsigned int DarcyMH::nonlinear_iteration_
protected

Definition at line 361 of file darcy_flow_mh.hh.

DarcyFlowMHOutput* DarcyMH::output_object
protected

Definition at line 345 of file darcy_flow_mh.hh.

VecScatter DarcyMH::par_to_all
protected

Definition at line 376 of file darcy_flow_mh.hh.

Vec DarcyMH::previous_solution
protected

Definition at line 381 of file darcy_flow_mh.hh.

const int DarcyMH::registrar
staticprivate
Initial value:
=
Input::register_class< DarcyMH, Mesh &, const Input::Record >("Flow_Darcy_MH") +

Registrar of class to factory.

Definition at line 391 of file darcy_flow_mh.hh.

LinSys* DarcyMH::schur0
protected

Definition at line 364 of file darcy_flow_mh.hh.

int DarcyMH::size
protected

Definition at line 347 of file darcy_flow_mh.hh.

Vec DarcyMH::sol_vec
protected

Definition at line 375 of file darcy_flow_mh.hh.

double* DarcyMH::solution
protected

Definition at line 349 of file darcy_flow_mh.hh.

bool DarcyMH::solution_changed_for_scatter
protected

Definition at line 335 of file darcy_flow_mh.hh.

Vec DarcyMH::steady_diagonal
protected

Definition at line 378 of file darcy_flow_mh.hh.

Vec DarcyMH::steady_rhs
protected

Definition at line 379 of file darcy_flow_mh.hh.

double DarcyMH::tolerance_
protected

Definition at line 358 of file darcy_flow_mh.hh.

bool DarcyMH::use_steady_assembly_
protected

Definition at line 354 of file darcy_flow_mh.hh.

unsigned int DarcyMH::water_balance_idx_
protected

index of water balance within the Balance object.

Definition at line 343 of file darcy_flow_mh.hh.


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