19 #ifndef TRANSPORT_DG_HH_ 20 #define TRANSPORT_DG_HH_ 32 template<
unsigned int dim,
unsigned int spacedim>
class FEValuesBase;
33 template<
unsigned int dim,
unsigned int spacedim>
class FiniteElement;
34 template<
unsigned int dim,
unsigned int spacedim>
class Mapping;
50 template<
unsigned int dim>
53 template<
unsigned int dim>
56 template<
unsigned int dim>
59 template<
unsigned int dim>
128 template<
class Model>
133 class EqData :
public Model::ModelEqData {
177 void zero_time_step()
override;
185 void update_solution()
override;
197 void initialize()
override;
199 void calculate_cumulative_balance();
201 void calculate_instant_balance();
204 {
return ls[sbi]->get_solution(); }
207 {
return solution_elem_; }
209 void calculate_concentration_matrix();
211 void update_after_reactions(
bool solution_changed);
213 void get_par_info(
int * &el_4_loc,
Distribution * &el_ds);
224 inline typename Model::ModelEqData &
data() {
return data_; }
226 void output_vector_gather();
236 void assemble_mass_matrix();
241 template<
unsigned int dim>
242 void assemble_mass_matrix();
251 void assemble_stiffness_matrix();
256 template<
unsigned int dim>
257 void assemble_volume_integrals();
269 template<
unsigned int dim>
275 template<
unsigned int dim>
276 void assemble_fluxes_boundary();
281 template<
unsigned int dim>
282 void assemble_fluxes_element_element();
287 template<
unsigned int dim>
288 void assemble_fluxes_element_side();
296 void set_boundary_conditions();
302 template<
unsigned int dim>
303 void set_boundary_conditions();
313 template<
unsigned int dim>
328 double Dm,
double alphaL,
double alphaT,
double porosity,
348 void set_DG_parameters_edge(
const Edge &edg,
360 double &transport_flux);
375 void set_DG_parameters_boundary(
const SideIter side,
387 void set_initial_condition();
393 template<
unsigned int dim>
394 void prepare_initial_condition();
Input::Record input_rec
Record with input specification.
FiniteElement< dim, 3 > * fe()
vector< double > mm_coef
Mass matrix coefficients.
DOFHandlerMultiDim * dh_
Object for distribution of dofs.
Transport with dispersion implemented using discontinuous Galerkin method.
Field< 3, FieldValue< 3 >::Integer > region_id
FiniteElement< 2, 3 > * fe_rt2_
Wrappers for linear systems based on MPIAIJ and MATIS format.
Class template representing a field with values dependent on: point, element, and region...
FiniteElement< 2, 3 > * fe2_
int dg_variant
DG variant ((non-)symmetric/incomplete.
FiniteElement< 3, 3 > * fe3_
Mapping< 0, 3 > * map0_
Auxiliary mappings of reference elements.
vector< vector< arma::vec3 > > ad_coef
Advection coefficients.
vector< vector< vector< arma::mat33 > > > dif_coef_edg
Diffusion coefficients on edges.
const Vec & get_solution(unsigned int sbi)
MultiField< 3, FieldValue< 3 >::Scalar > dg_penalty
Penalty enforcing inter-element continuity of solution (for each substance).
Base class for quadrature rules on simplices in arbitrary dimensions.
vector< vector< vector< arma::vec3 > > > ad_coef_edg
Advection coefficients on edges.
double ** get_concentration_matrix()
MultiField< 3, FieldValue< 3 >::Scalar > fracture_sigma
Transition parameter for diffusive transfer on fractures (for each substance).
vector< vector< arma::mat33 > > dif_coef
Diffusion coefficients.
FEObjects * feo
Finite element objects.
static const int registrar
Registrar of class to factory.
FiniteElement< 1, 3 > * fe_rt1_
Finite elements for the water velocity field.
Abstract class for the mapping between reference and actual cell.
FiniteElement< 1, 3 > * fe1_
Finite elements for the solution of the advection-diffusion equation.
Mat mass_matrix
The mass matrix.
Provides the numbering of the finite element degrees of freedom on the computational mesh...
Mat * stiffness_matrix
The stiffness matrix.
bool evaluate_time_constraint(double &time_constraint)
FiniteElement< dim, 3 > * fe_rt()
unsigned int dg_order
Polynomial order of finite elements.
The class for outputting data during time.
Vec * rhs
Vector of right hand side.
DOFHandlerMultiDim * dh()
LinSys * ls_dt
Linear algebra system for the time derivative (actually it is used only for handling the matrix struc...
double ** solution_elem_
Element averages of solution (the array is passed to reactions in operator splitting).
Model::ModelEqData & data()
FiniteElement< 3, 3 > * fe_rt3_
EqData data_
Field data for model parameters.
bool allocation_done
Indicates whether matrices have been preallocated.
std::vector< std::vector< double > > gamma
Penalty parameters.
Vec * mass_vec
Mass from previous time instant (necessary when coefficients of mass matrix change in time)...
Abstract linear system class.
vector< Vec > output_vec
Array for storing the output solution data.
Class for representation of a vector of fields of the same physical quantity.
Abstract class for the description of a general finite element on a reference simplex in dim dimensio...
Base class for FEValues and FESideValues.
Mapping< dim, 3 > * mapping()
LinSys ** ls
Linear algebra system for the transport equation.
Quadrature< 0 > * q0_
Quadratures used in assembling methods.
FEObjects(Mesh *mesh_, unsigned int fe_order)