33 #ifndef DARCY_FLOW_MH_HH 34 #define DARCY_FLOW_MH_HH 63 template<
unsigned int dim,
unsigned int spacedim>
class FE_RT0;
64 template<
unsigned int degree,
unsigned int dim,
unsigned int spacedim>
class FE_P_disc;
65 template<
unsigned int dim,
unsigned int spacedim>
class MappingP1;
66 template<
unsigned int dim,
unsigned int spacedim>
class FEValues;
67 template<
unsigned int dim,
unsigned int spacedim>
class FESideValues;
68 template<
unsigned int dim>
class QGauss;
126 <<
"Diverged nonlinear solver. Reason: " << EI_Reason::val
246 virtual void assembly_local_matrix(arma::mat &local_matrix,
250 virtual void assembly_local_vb(
double *local_vb,
259 template<
unsigned int dim>
265 void assembly_local_matrix(arma::mat &local_matrix,
267 void assembly_local_vb(
double *local_vb,
436 master_list_(darcy.
mesh_->master_elements),
437 intersections_(darcy.
mesh_->intersections),
441 arma::mat master_map(1,2), slave_map(1,3);
442 master_map.fill(1.0 / 2);
443 slave_map.fill(1.0 / 3);
445 tensor_average[0].push_back( trans( master_map ) * master_map );
446 tensor_average[0].push_back( trans( master_map ) * slave_map );
447 tensor_average[1].push_back( trans( slave_map ) * master_map );
448 tensor_average[1].push_back( trans( slave_map ) * slave_map );
451 void assembly(
LinSys &ls);
452 void pressure_diff(
int i_ele,
454 unsigned int &ele_type,
480 intersections_(darcy.
mesh_->intersections),
488 void assembly(
LinSys &ls);
529 static const int registrar;
535 #endif //DARCY_FLOW_MH_HH
Abstract base class for equation clasess.
Container for various descendants of FieldCommonBase.
BCField< 3, FieldValue< 3 >::Scalar > bc_robin_sigma
Field< 3, FieldValue< 3 >::Scalar > water_source_density
static const int registrar
Registrar of class to factory.
FEValues< dim, 3 > fe_values_
P1_CouplingAssembler(const DarcyFlowMH_Steady &darcy)
Solver based on the original PETSc solver using MPIAIJ matrix and succesive Schur complement construc...
void prepare_parallel_bddc()
Initialize global_row_4_sub_row.
void get_parallel_solution_vector(Vec &vector) override
vector< vector< arma::mat > > tensor_average
Row matrices to compute element pressure as average of boundary pressures.
Field< 3, FieldValue< 3 >::Scalar > cross_section
bool solution_changed_for_scatter
static const Input::Type::Selection & get_bc_type_selection()
Return a Selection corresponding to enum BC_Type.
Class template representing a field with values dependent on: point, element, and region...
Field< 3, FieldValue< 3 >::TensorFixed > anisotropy
virtual void modify_system()
const DarcyFlowMH_Steady & darcy_
void zero_time_step() override
FE_P_disc< 0, dim, 3 > fe_p_disc_
virtual void read_initial_condition()
boost::shared_ptr< Distribution > rows_ds
vector< IsecList >::const_iterator ml_it_
vector< double > dirichlet
unsigned int water_balance_idx_
index of water balance within the Balance object.
void solve_nonlinear()
Solve method common to zero_time_step and update solution.
void mat_count_off_proc_values(Mat m, Vec v)
class to manage local indices on sub-domain to global indices on domain
static const Input::Type::Record & get_input_type()
vector< unsigned int > IsecList
Symmetric Gauss-Legendre quadrature formulae on simplices.
BCField< 3, FieldValue< 3 >::Scalar > bc_pressure
bool use_steady_assembly_
const DarcyFlowMH_Steady & darcy_
Field< 3, FieldValue< 3 >::Scalar > sigma
MortarMethod mortar_method_
Discontinuous Lagrangean finite element on dim dimensional simplex.
virtual void assembly_source_term()
Source term is implemented differently in LMH version.
P0_CouplingAssembler(const DarcyFlowMH_Steady &darcy)
Virtual class for construction and partitioning of a distributed sparse graph.
BCField< 3, FieldValue< 3 >::Enum > bc_type
Raviart-Thomas element of order 0.
void assembly_linear_system()
MortarMethod
Type of experimental Mortar-like method for non-compatible 1d-2d interaction.
TYPEDEF_ERR_INFO(EI_Reason, string)
const vector< IsecList > & master_list_
unsigned int nonlinear_iteration_
FESideValues< dim, 3 > fe_side_values_
Affine mapping between reference and actual cell.
virtual double solution_precision() const
DarcyFlowMH_Steady(Mesh &mesh, const Input::Record in_rec)
CREATE AND FILL GLOBAL MH MATRIX OF THE WATER MODEL.
const vector< Intersection > & intersections_
void create_linear_system(Input::AbstractRecord rec)
QGauss< dim-1 > side_quad_
const vector< Intersection > & intersections_
std::vector< char > bc_switch_dirichlet
Idicator of dirichlet or neumann type of switch boundary conditions.
std::vector< AssemblyBase * > assembly_
Field< 3, FieldValue< 3 >::Scalar > conductivity
double delta_0
measure of master element, should be sum of intersection measures
FEValues< dim, 3 > velocity_interpolation_fv_
virtual void postprocess()
postprocess velocity field (add sources)
boost::shared_ptr< LocalToGlobalMap > global_row_4_sub_row
Necessary only for BDDC solver.
boost::shared_ptr< Balance > balance_
object for calculation and writing the water balance to file.
EqData()
Creation of all fields.
void assembly_steady_mh_matrix()
Vector classes to support both Iterator, index and Id access and creating co-located vectors...
static const Input::Type::Selection & get_mh_mortar_selection()
Selection for enum MortarMethod.
Abstract linear system class.
Mixed-hybrid model of linear Darcy flow, possibly unsteady.
Calculates finite element data on the actual cell.
void make_row_numberings()
void set_mesh_data_for_bddc(LinSys_BDDC *bddc_ls)
virtual void setup_time_term()
const MH_DofHandler & get_mh_dofhandler()
void update_solution() override
virtual void output_data() override
Write computed fields.
void set_solution(double time, double *solution, double precision)
QGauss< dim > velocity_interpolation_quad_
DarcyFlowMHOutput * output_object
DECLARE_EXCEPTION(ExcSolverDiverge,<< "Diverged nonlinear solver. Reason: "<< EI_Reason::val)
Field< 3, FieldValue< 3 >::Scalar > storativity
BCField< 3, FieldValue< 3 >::Scalar > bc_flux
BCField< 3, FieldValue< 3 >::Scalar > bc_switch_pressure
void make_serial_scatter()
Solver based on Multilevel BDDC - using corresponding class of OpenFTL package.
Field< 3, FieldValue< 3 >::Scalar > init_pressure
Calculates finite element data on a side.
void get_solution_vector(double *&vec, unsigned int &vec_size) override