33 #ifndef DARCY_FLOW_MH_HH 34 #define DARCY_FLOW_MH_HH 64 template<
unsigned int dim,
unsigned int spacedim>
class FE_RT0;
65 template<
unsigned int degree,
unsigned int dim,
unsigned int spacedim>
class FE_P_disc;
66 template<
unsigned int dim,
unsigned int spacedim>
class MappingP1;
67 template<
unsigned int dim,
unsigned int spacedim>
class FEValues;
68 template<
unsigned int dim,
unsigned int spacedim>
class FESideValues;
69 template<
unsigned int dim>
class QGauss;
145 <<
"Diverged nonlinear solver. Reason: " << EI_Reason::val
148 <<
"Missing the key 'time', obligatory for the transient problems.");
231 get_solution_vector(array, size);
241 mh_dh.set_solution(time_->last_t(), array, solution_precision());
246 void initialize()
override;
247 virtual void initialize_specific();
248 void zero_time_step()
override;
249 void update_solution()
override;
251 void get_solution_vector(
double * &vec,
unsigned int &vec_size)
override;
252 void get_parallel_solution_vector(Vec &
vector)
override;
255 virtual void prepare_new_time_step();
256 virtual void postprocess();
257 virtual void output_data()
override;
269 virtual bool zero_time_term(
bool time_global=
false);
272 void solve_nonlinear();
273 void make_serial_scatter();
274 void modify_system();
275 virtual void setup_time_term();
295 virtual void read_initial_condition();
316 void assembly_mh_matrix( MultidimAssembler ma);
320 virtual void assembly_source_term();
325 virtual void assembly_linear_system();
327 void set_mesh_data_for_bddc(
LinSys_BDDC * bddc_ls);
333 virtual double solution_precision()
const;
399 master_list_(darcy.mesh_->master_elements),
400 intersections_(darcy.mesh_->intersections),
404 arma::mat master_map(1,2), slave_map(1,3);
405 master_map.fill(1.0 / 2);
406 slave_map.fill(1.0 / 3);
408 tensor_average[0].push_back( trans( master_map ) * master_map );
409 tensor_average[0].push_back( trans( master_map ) * slave_map );
410 tensor_average[1].push_back( trans( slave_map ) * master_map );
411 tensor_average[1].push_back( trans( slave_map ) * slave_map );
414 void assembly(
LinSys &ls);
415 void pressure_diff(
int i_ele,
417 unsigned int &ele_type,
419 arma::vec &dirichlet);
443 intersections_(darcy.mesh_->intersections),
451 void assembly(
LinSys &ls);
492 static const int registrar;
498 #endif //DARCY_FLOW_MH_HH Abstract base class for equation clasess.
Container for various descendants of FieldCommonBase.
Field< 3, FieldValue< 3 >::Scalar > init_pressure
Solver based on the original PETSc solver using MPIAIJ matrix and succesive Schur complement construc...
std::vector< unsigned int > dirichlet_edge
vector< vector< arma::mat > > tensor_average
Row matrices to compute element pressure as average of boundary pressures.
Class template representing a field with values dependent on: point, element, and region...
#define DECLARE_EXCEPTION(ExcName, Format)
Macro for simple definition of exceptions.
static const int registrar
Registrar of class to factory.
Field< 3, FieldValue< 3 >::Scalar > sigma
std::vector< char > bc_switch_dirichlet
Idicator of dirichlet or neumann type of switch boundary conditions.
vector< IsecList >::const_iterator ml_it_
P1_CouplingAssembler(const DarcyMH &darcy)
vector< double > dirichlet
P0_CouplingAssembler(const DarcyMH &darcy)
bool solution_changed_for_scatter
std::shared_ptr< EqData > data_
void mat_count_off_proc_values(Mat m, Vec v)
class to manage local indices on sub-domain to global indices on domain
MortarMethod mortar_method_
vector< unsigned int > IsecList
Symmetric Gauss-Legendre quadrature formulae on simplices.
unsigned int nonlinear_iteration_
BCField< 3, FieldValue< 3 >::Scalar > bc_flux
Discontinuous Lagrangean finite element on dim dimensional simplex.
std::shared_ptr< arma::mat > local_matrix
BCField< 3, FieldValue< 3 >::Scalar > bc_pressure
Field< 3, FieldValue< 3 >::Scalar > water_source_density
BCField< 3, FieldValue< 3 >::Scalar > bc_switch_pressure
Field< 3, FieldValue< 3 >::Scalar > storativity
std::shared_ptr< Balance > balance_
Virtual class for construction and partitioning of a distributed sparse graph.
Raviart-Thomas element of order 0.
const vector< IsecList > & master_list_
bool use_steady_assembly_
#define TYPEDEF_ERR_INFO(EI_Type, Type)
Macro to simplify declaration of error_info types.
Affine mapping between reference and actual cell.
Mixed-hybrid model of linear Darcy flow, possibly unsteady.
const vector< Intersection > & intersections_
const vector< Intersection > & intersections_
#define DECLARE_INPUT_EXCEPTION(ExcName, Format)
Macro for simple definition of input exceptions.
double delta_0
measure of master element, should be sum of intersection measures
MortarMethod
Type of experimental Mortar-like method for non-compatible 1d-2d interaction.
std::shared_ptr< Balance > balance
Vector classes to support both Iterator, index and Id access and creating co-located vectors...
Field< 3, FieldValue< 3 >::TensorFixed > anisotropy
unsigned int water_balance_idx_
index of water balance within the Balance object.
Abstract linear system class.
Calculates finite element data on the actual cell.
std::vector< std::shared_ptr< AssemblyBase > > MultidimAssembler
Field< 3, FieldValue< 3 >::Scalar > cross_section
BCField< 3, FieldValue< 3 >::Enum > bc_type
DarcyFlowMHOutput * output_object
Field< 3, FieldValue< 3 >::Scalar > conductivity
BCField< 3, FieldValue< 3 >::Scalar > bc_robin_sigma
Solver based on Multilevel BDDC - using corresponding class of OpenFTL package.
const MH_DofHandler & get_mh_dofhandler() override
Calculates finite element data on a side.
Mixed-hybrid of steady Darcy flow with sources and variable density.