18 #ifndef ASSEMBLY_DG_HH_
19 #define ASSEMBLY_DG_HH_
35 template <
unsigned int dim,
class Model>
42 static constexpr
const char *
name() {
return "MassAssemblyDG"; }
84 ASSERT_EQ(cell.
dim(), dim).error(
"Dimension of element mismatch!");
91 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); ++sbi)
94 for (
unsigned int i=0; i<
ndofs_; i++)
96 for (
unsigned int j=0; j<
ndofs_; j++)
100 for (
auto p : this->
bulk_points(element_patch_idx) )
109 for (
unsigned int i=0; i<
ndofs_; i++)
114 for (
auto p : this->
bulk_points(element_patch_idx) )
143 shared_ptr<FiniteElement<dim>>
fe_;
160 template <
template<
IntDim...>
class DimAssembly>
169 double h_max = 0, h_min = numeric_limits<double>::infinity();
170 for (
unsigned int i=0; i<e->
n_nodes(); i++)
171 for (
unsigned int j=i+1; j<e->
n_nodes(); j++)
173 double dist = arma::norm(*e.
node(i) - *e.
node(j));
174 h_max = max(h_max, dist);
175 h_min = min(h_min, dist);
194 delta += dot(diff_coef(p)*nv, nv);
197 return n == 0 ? 0 : (delta/n);
212 const double &diff_delta,
228 template <
class Po
intType>
231 double side_flux = 0;
244 template <
unsigned int dim,
class Model>
251 static constexpr
const char *
name() {
return "StiffnessAssemblyDG"; }
269 for (
auto a :
averages)
if (a !=
nullptr)
delete[] a;
270 for (
auto a :
waverages)
if (a !=
nullptr)
delete[] a;
271 for (
auto a :
jumps)
if (a !=
nullptr)
delete[] a;
316 for (
unsigned int s=0; s<2; s++)
327 ASSERT_EQ(cell.
dim(), dim).error(
"Dimension of element mismatch!");
328 if (!cell.
is_own())
return;
337 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
339 for (
unsigned int i=0; i<
ndofs_; i++)
340 for (
unsigned int j=0; j<
ndofs_; j++)
344 for (
auto p : this->
bulk_points(element_patch_idx) )
346 for (
unsigned int i=0; i<
ndofs_; i++)
351 for (
unsigned int j=0; j<
ndofs_; j++)
366 ASSERT_EQ(cell_side.
dim(), dim).error(
"Dimension of element mismatch!");
377 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
382 double transport_flux = side_flux/side.
measure();
388 unsigned int bc_type =
eq_fields_->bc_type[sbi](p_bdr);
396 transport_flux += gamma_l;
403 double flux_times_JxW;
420 for (
unsigned int i=0; i<
ndofs_; i++)
422 for (
unsigned int j=0; j<
ndofs_; j++)
444 ASSERT_EQ(edge_side_range.
begin()->element().dim(), dim).error(
"Dimension of element mismatch!");
447 double gamma_l, omega[2], transport_flux, delta[2], delta_sum;
448 double aniso1, aniso2;
449 double local_alpha=0.0;
453 auto dh_edge_cell =
eq_data_->
dh_->cell_accessor_from_element( edge_side.elem_idx() );
461 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
464 double pflux = 0, nflux = 0;
470 pflux += fluxes[sid];
472 nflux += fluxes[sid];
483 for (
unsigned int i=0; i<
fe_->n_dofs(); i++)
492 for(
DHCellSide edge_side1 : edge_side_range )
495 for(
DHCellSide edge_side2 : edge_side_range )
498 if (s2<=s1)
continue;
499 ASSERT(edge_side1.is_valid()).error(
"Invalid side of edge.");
505 if (fluxes[s2] > 0 && fluxes[s1] < 0)
506 transport_flux = fluxes[s1]*fabs(fluxes[s2]/pflux);
507 else if (fluxes[s2] < 0 && fluxes[s1] > 0)
508 transport_flux = fluxes[s1]*fabs(fluxes[s2]/nflux);
512 gamma_l = 0.5*fabs(transport_flux);
518 auto p2 = p1.point_on(edge_side2);
519 delta[0] += dot(
eq_fields_->diffusion_coef[sbi](p1)*normal_vector,normal_vector);
520 delta[1] += dot(
eq_fields_->diffusion_coef[sbi](p2)*normal_vector,normal_vector);
526 delta_sum = delta[0] + delta[1];
529 if (fabs(delta_sum) > 0)
531 omega[0] = delta[1]/delta_sum;
532 omega[1] = delta[0]/delta_sum;
533 double h = edge_side1.diameter();
536 gamma_l += local_alpha/h*aniso1*aniso2*(delta[0]*delta[1]/delta_sum);
539 for (
int i=0; i<2; i++) omega[i] = 0;
542 int sd[2];
bool is_side_own[2];
543 sd[0] = s1; is_side_own[0] = edge_side1.cell().is_own();
544 sd[1] = s2; is_side_own[1] = edge_side2.cell().is_own();
550 auto p2 = p1.point_on(edge_side2);
551 for (
unsigned int i=0; i<
fe_->n_dofs(); i++)
553 for (
int n=0; n<2; n++)
563 for (
int n=0; n<2; n++)
565 if (!is_side_own[n])
continue;
567 for (
int m=0; m<2; m++)
607 if (dim == 1)
return;
608 ASSERT_EQ(cell_lower_dim.
dim(), dim-1).error(
"Dimension of element mismatch!");
612 double comm_flux[2][2];
613 unsigned int n_dofs[2];
616 for(
unsigned int i=0; i<n_indices; ++i) {
620 n_dofs[0] =
fv_sb_[0]->n_dofs();
624 for(
unsigned int i=0; i<n_indices; ++i) {
628 n_dofs[1] =
fv_sb_[1]->n_dofs();
631 bool own_element_id[2];
632 own_element_id[0] = cell_lower_dim.
is_own();
633 own_element_id[1] = cell_higher_dim.
is_own();
636 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
638 for (
unsigned int i=0; i<n_dofs[0]+n_dofs[1]; i++)
639 for (
unsigned int j=0; j<n_dofs[0]+n_dofs[1]; j++)
646 auto p_low = p_high.lower_dim(cell_lower_dim);
659 comm_flux[0][0] = (sigma-min(0.,transport_flux))*
fv_sb_[0]->JxW(k);
660 comm_flux[0][1] = -(sigma-min(0.,transport_flux))*
fv_sb_[0]->JxW(k);
661 comm_flux[1][0] = -(sigma+max(0.,transport_flux))*
fv_sb_[0]->JxW(k);
662 comm_flux[1][1] = (sigma+max(0.,transport_flux))*
fv_sb_[0]->JxW(k);
664 for (
int n=0; n<2; n++)
666 if (!own_element_id[n])
continue;
668 for (
unsigned int i=0; i<n_dofs[n]; i++)
669 for (
int m=0; m<2; m++)
670 for (
unsigned int j=0; j<n_dofs[m]; j++)
671 local_matrix_[(i+n*n_dofs[0])*(n_dofs[0]+n_dofs[1]) + m*n_dofs[0] + j] +=
682 shared_ptr<FiniteElement<dim>>
fe_;
709 template <
template<
IntDim...>
class DimAssembly>
718 template <
unsigned int dim,
class Model>
725 static constexpr
const char *
name() {
return "SourcesAssemblyDG"; }
759 ASSERT_EQ(cell.
dim(), dim).error(
"Dimension of element mismatch!");
769 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
776 for (
auto p : this->
bulk_points(element_patch_idx) )
780 for (
unsigned int i=0; i<
ndofs_; i++)
786 for (
unsigned int i=0; i<
ndofs_; i++)
789 for (
auto p : this->
bulk_points(element_patch_idx) )
817 shared_ptr<FiniteElement<dim>>
fe_;
834 template <
template<
IntDim...>
class DimAssembly>
843 template <
unsigned int dim,
class Model>
850 static constexpr
const char *
name() {
return "BdrConditionAssemblyDG"; }
896 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
903 double transport_flux = side_flux/cell_side.
measure();
907 unsigned int bc_type =
eq_fields_->bc_type[sbi](p_bdr);
913 auto p_bdr = p.point_bdr(bc_elm);
915 for (
unsigned int i=0; i<
ndofs_; i++)
919 for (
unsigned int i=0; i<
ndofs_; i++)
925 double transport_flux = side_flux/cell_side.
measure();
935 auto p_bdr = p.point_bdr(bc_elm);
938 for (
unsigned int i=0; i<
ndofs_; i++)
946 for (
unsigned int i=0; i<
ndofs_; i++)
955 for (
unsigned int i=0; i<
ndofs_; i++)
963 auto p_bdr = p.point_bdr(bc_elm);
966 for (
unsigned int i=0; i<
ndofs_; i++)
971 for (
unsigned int i=0; i<
ndofs_; i++)
975 auto p_bdr = p.point_bdr(bc_elm);
988 auto p_bdr = p.point_bdr(bc_elm);
991 for (
unsigned int i=0; i<
ndofs_; i++)
996 for (
unsigned int i=0; i<
ndofs_; i++)
1000 auto p_bdr = p.point_bdr(bc_elm);
1013 for (
unsigned int i=0; i<
ndofs_; i++)
1040 shared_ptr<FiniteElement<dim>>
fe_;
1057 template <
template<
IntDim...>
class DimAssembly>
1066 template <
unsigned int dim,
class Model>
1073 static constexpr
const char *
name() {
return "InitProjectionAssemblyDG"; }
1104 ASSERT_EQ(cell.
dim(), dim).error(
"Dimension of element mismatch!");
1111 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
1113 for (
unsigned int i=0; i<
ndofs_; i++)
1116 for (
unsigned int j=0; j<
ndofs_; j++)
1121 for (
auto p : this->
bulk_points(element_patch_idx) )
1125 for (
unsigned int i=0; i<
ndofs_; i++)
1127 for (
unsigned int j=0; j<
ndofs_; j++)
1140 shared_ptr<FiniteElement<dim>>
fe_;
1156 template <
template<
IntDim...>
class DimAssembly>
1165 template <
unsigned int dim,
class Model>
1172 static constexpr
const char *
name() {
return "InitConditionAssemblyDG"; }
1181 for(
unsigned int i = 0; i<RefElement<dim>::n_nodes; i++)
1200 ASSERT_EQ(cell.
dim(), dim).error(
"Dimension of element mismatch!");
1204 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
1207 for (
auto p : this->
bulk_points(element_patch_idx) )
1209 double val =
eq_fields_->init_condition[sbi](p);
1226 template <
template<
IntDim...>
class DimAssembly>
double elem_anisotropy(ElementAccessor< 3 > e)
double DG_penalty_boundary(Side side, const double &diff_delta, const double flux, const double alpha)
Computes the penalty parameter of the DG method on a given boundary edge.
double diffusion_delta(Field< 3, FieldValue< 3 >::TensorFixed > &diff_coef, Range< BoundaryPoint > pts, const arma::vec3 &nv)
Computes average normal diffusivity over a set of points.
double advective_flux(Field< 3, FieldValue< 3 >::VectorFixed > &advection_coef, Range< PointType > pts, FEValues< 3 > &fv)
Computes advective flux.
#define ASSERT_EQ(a, b)
Definition of comparative assert macro (EQual) only for debug mode.
Range< BulkPoint > bulk_points(unsigned int element_patch_idx) const
Return BulkPoint range of appropriate dimension.
Range< EdgePoint > edge_points(const DHCellSide &cell_side) const
Return EdgePoint range of appropriate dimension.
Quadrature * quad_
Quadrature used in assembling methods.
std::string print_update_flags(UpdateFlags u) const
Print update flags to string format.
Quadrature * quad_low_
Quadrature used in assembling methods (dim-1).
Range< CouplingPoint > coupling_points(const DHCellSide &cell_side) const
Return CouplingPoint range of appropriate dimension.
int active_integrals_
Holds mask of active integrals.
Range< BoundaryPoint > boundary_points(const DHCellSide &cell_side) const
Return BoundaryPoint range of appropriate dimension.
ElementCacheMap * element_cache_map_
ElementCacheMap shared with GenericAssembly object.
static constexpr const char * name()
FieldSet used_fields_
Sub field set contains fields used in calculation.
vector< PetscScalar > local_flux_balance_vector_
Auxiliary vector for set_boundary_conditions method.
void boundary_side_integral(DHCellSide cell_side)
Implements AssemblyBase::boundary_side_integral.
FEValues< 3 > fe_values_side_
FEValues of object (of P disc finite element type)
TransportDG< Model >::EqData EqData
TransportDG< Model >::EqFields EqFields
void begin() override
Implements AssemblyBase::begin.
~BdrConditionAssemblyDG()
Destructor.
PetscScalar local_flux_balance_rhs_
Auxiliary variable for set_boundary_conditions method.
shared_ptr< FiniteElement< dim > > fe_
Finite element for the solution of the advection-diffusion equation.
void initialize(ElementCacheMap *element_cache_map)
Initialize auxiliary vectors and other data members.
vector< LongIdx > dof_indices_
Vector of global DOF indices.
EqFields * eq_fields_
Data objects shared with TransportDG.
void end() override
Implements AssemblyBase::end.
vector< PetscScalar > local_rhs_
Auxiliary vector for set_sources method.
unsigned int ndofs_
Number of dofs.
BdrConditionAssemblyDG(EqFields *eq_fields, EqData *eq_data)
Constructor.
ElementAccessor< 3 > element_accessor()
Auxiliary data class holds number of elements in cache and allow to set this value explicitly (e....
Cell accessor allow iterate over DOF handler cells.
const ElementAccessor< 3 > elm() const
Return ElementAccessor to element of loc_ele_idx_.
bool is_own() const
Return true if accessor represents own element (false for ghost element)
LocDofVec get_loc_dof_indices() const
Returns the local indices of dofs associated to the cell on the local process.
unsigned int get_dof_indices(std::vector< LongIdx > &indices) const
Fill vector of the global indices of dofs associated to the cell.
unsigned int dim() const
Return dimension of element appropriate to cell.
Side accessor allows to iterate over sides of DOF handler cell.
Side side() const
Return Side of given cell and side_idx.
const DHCellAccessor & cell() const
Return DHCellAccessor appropriate to the side.
unsigned int dim() const
Return dimension of element appropriate to the side.
ElementAccessor< 3 > element() const
NodeAccessor< 3 > node(unsigned int ni) const
unsigned int idx() const
We need this method after replacing Region by RegionIdx, and movinf RegionDB instance into particular...
Directing class of FieldValueCache.
unsigned int n_nodes() const
void initialize(Quadrature &_quadrature, FiniteElement< DIM > &_fe, UpdateFlags _flags)
Initialize structures and calculates cell-independent data.
double JxW(const unsigned int point_no)
Return the product of Jacobian determinant and the quadrature weight at given quadrature point.
double shape_value(const unsigned int function_no, const unsigned int point_no) const
Return the value of the function_no-th shape function at the point_no-th quadrature point.
void reinit(const ElementAccessor< spacedim > &cell)
Update cell-dependent data (gradients, Jacobians etc.)
arma::vec::fixed< spacedim > normal_vector(unsigned int point_no)
Returns the normal vector to a side at given quadrature point.
arma::vec::fixed< spacedim > shape_grad(const unsigned int function_no, const unsigned int point_no) const
Return the gradient of the function_no-th shape function at the point_no-th quadrature point.
Discontinuous Lagrangean finite element on dim dimensional simplex.
Container for various descendants of FieldCommonBase.
Class template representing a field with values dependent on: point, element, and region.
Abstract class for the description of a general finite element on a reference simplex in dim dimensio...
Generic class of assemblation.
FieldSet used_fields_
Sub field set contains fields used in calculation.
void cell_integral(DHCellAccessor cell, unsigned int element_patch_idx)
Assemble integral over element.
static constexpr const char * name()
~InitConditionAssemblyDG()
Destructor.
void initialize(ElementCacheMap *element_cache_map)
Initialize auxiliary vectors and other data members.
InitConditionAssemblyDG(EqFields *eq_fields, EqData *eq_data)
Constructor.
EqFields * eq_fields_
Data objects shared with TransportDG.
TransportDG< Model >::EqData EqData
TransportDG< Model >::EqFields EqFields
EqFields * eq_fields_
Data objects shared with TransportDG.
vector< PetscScalar > local_rhs_
Auxiliary vector for set_sources method.
vector< LongIdx > dof_indices_
Vector of global DOF indices.
TransportDG< Model >::EqData EqData
FieldSet used_fields_
Sub field set contains fields used in calculation.
unsigned int ndofs_
Number of dofs.
shared_ptr< FiniteElement< dim > > fe_
Finite element for the solution of the advection-diffusion equation.
void cell_integral(DHCellAccessor cell, unsigned int element_patch_idx)
Assemble integral over element.
FEValues< 3 > fe_values_
FEValues of object (of P disc finite element type)
static constexpr const char * name()
vector< PetscScalar > local_matrix_
Auxiliary vector for assemble methods.
InitProjectionAssemblyDG(EqFields *eq_fields, EqData *eq_data)
Constructor.
~InitProjectionAssemblyDG()
Destructor.
TransportDG< Model >::EqFields EqFields
void initialize(ElementCacheMap *element_cache_map)
Initialize auxiliary vectors and other data members.
virtual void rhs_set_values(int nrow, int *rows, double *vals)=0
virtual void mat_set_values(int nrow, int *rows, int ncol, int *cols, double *vals)=0
void set_values(int nrow, int *rows, int ncol, int *cols, PetscScalar *mat_vals, PetscScalar *rhs_vals)
Set values in the system matrix and values in the right-hand side vector on corresponding rows.
static constexpr double almost_zero
vector< LongIdx > dof_indices_
Vector of global DOF indices.
vector< PetscScalar > local_mass_balance_vector_
Same as previous.
PatchFEValues< 3 > fe_values_
FEValues of object (of P disc finite element type)
TransportDG< Model >::EqFields EqFields
void patch_reinit(PatchElementsList patch_elements) override
Reinit PatchFEValues objects (all computed elements in one step).
FieldSet used_fields_
Sub field set contains fields used in calculation.
vector< PetscScalar > local_matrix_
Auxiliary vector for assemble methods.
void end() override
Implements AssemblyBase::end.
~MassAssemblyDG()
Destructor.
shared_ptr< FiniteElement< dim > > fe_
Finite element for the solution of the advection-diffusion equation.
void begin() override
Implements AssemblyBase::begin.
static constexpr const char * name()
void initialize(ElementCacheMap *element_cache_map)
Initialize auxiliary vectors and other data members.
unsigned int ndofs_
Number of dofs.
void cell_integral(DHCellAccessor cell, unsigned int element_patch_idx)
Assemble integral over element.
TransportDG< Model >::EqData EqData
EqFields * eq_fields_
Data objects shared with TransportDG.
vector< PetscScalar > local_retardation_balance_vector_
Auxiliary vector for assemble mass matrix.
MassAssemblyDG(EqFields *eq_fields, EqData *eq_data)
Constructor.
void reinit(PatchElementsList patch_elements)
Reinit data.
double shape_value(const unsigned int function_no, const unsigned int point_no) const
Return the value of the function_no-th shape function at the point_no-th quadrature point.
void get_cell(const unsigned int patch_cell_idx)
Set element that is selected for processing. Element is given by index on patch.
double JxW(const unsigned int point_no)
Return the product of Jacobian determinant and the quadrature weight at given quadrature point.
Base class for quadrature rules on simplices in arbitrary dimensions.
unsigned int size() const
Returns number of quadrature points.
Armor::Array< double >::ArrayMatSet set(uint i)
double weight(unsigned int i) const
Returns the ith weight.
IterConvert< ObjectIn, ObjectOut > begin()
Iterator to begin item of range.
static LocalPoint node_coords(unsigned int nid)
unsigned int bulk_idx() const
Returns index of the region in the bulk set.
double measure() const
Calculate metrics of the side.
ElementAccessor< 3 > element() const
Returns iterator to the element of the side.
double diameter() const
Calculate the side diameter.
vector< PetscScalar > local_rhs_
Auxiliary vector for set_sources method.
TransportDG< Model >::EqData EqData
TransportDG< Model >::EqFields EqFields
void cell_integral(DHCellAccessor cell, unsigned int element_patch_idx)
Assemble integral over element.
~SourcesAssemblyDG()
Destructor.
shared_ptr< FiniteElement< dim > > fe_
Finite element for the solution of the advection-diffusion equation.
vector< PetscScalar > local_source_balance_vector_
Auxiliary vector for set_sources method.
void end() override
Implements AssemblyBase::end.
FEValues< 3 > fe_values_
FEValues of object (of P disc finite element type)
static constexpr const char * name()
EqFields * eq_fields_
Data objects shared with TransportDG.
vector< PetscScalar > local_source_balance_rhs_
Auxiliary vector for set_sources method.
void initialize(ElementCacheMap *element_cache_map)
Initialize auxiliary vectors and other data members.
FieldSet used_fields_
Sub field set contains fields used in calculation.
unsigned int ndofs_
Number of dofs.
vector< LongIdx > dof_indices_
Vector of global DOF indices.
void begin() override
Implements AssemblyBase::begin.
SourcesAssemblyDG(EqFields *eq_fields, EqData *eq_data)
Constructor.
TransportDG< Model >::EqData EqData
void edge_integral(RangeConvert< DHEdgeSide, DHCellSide > edge_side_range)
Assembles the fluxes between sides of elements of the same dimension.
StiffnessAssemblyDG(EqFields *eq_fields, EqData *eq_data)
Constructor.
FieldSet used_fields_
Sub field set contains fields used in calculation.
unsigned int ndofs_
Number of dofs.
vector< vector< LongIdx > > side_dof_indices_
Vector of vectors of side DOF indices.
shared_ptr< FiniteElement< dim-1 > > fe_low_
Finite element for the solution of the advection-diffusion equation (dim-1).
shared_ptr< FiniteElement< dim > > fe_
Finite element for the solution of the advection-diffusion equation.
void boundary_side_integral(DHCellSide cell_side)
Assembles the fluxes on the boundary.
vector< double * > jumps
Auxiliary storage for jumps of shape functions.
vector< double * > waverages
Auxiliary storage for weighted averages of shape functions.
vector< FEValues< 3 > * > fv_sb_
Auxiliary vector, holds FEValues objects for assemble element-side.
void dimjoin_intergral(DHCellAccessor cell_lower_dim, DHCellSide neighb_side)
Assembles the fluxes between elements of different dimensions.
void initialize(ElementCacheMap *element_cache_map)
Initialize auxiliary vectors and other data members.
vector< LongIdx > side_dof_indices_vb_
Vector of side DOF indices (assemble element-side fluxex)
FEValues< 3 > fe_values_side_
FEValues of object (of P disc finite element type)
vector< FEValues< 3 > > fe_values_vec_
Vector of FEValues of object (of P disc finite element types)
void cell_integral(DHCellAccessor cell, unsigned int element_patch_idx)
Assembles the cell (volume) integral into the stiffness matrix.
TransportDG< Model >::EqFields EqFields
vector< double * > averages
Auxiliary storage for averages of shape functions.
vector< PetscScalar > local_matrix_
Auxiliary vector for assemble methods.
~StiffnessAssemblyDG()
Destructor.
static constexpr const char * name()
vector< LongIdx > dof_indices_
Vector of global DOF indices.
FEValues< 3 > fe_values_vb_
FEValues of dim-1 object (of P disc finite element type)
FEValues< 3 > fe_values_
FEValues of object (of P disc finite element type)
EqFields * eq_fields_
Data objects shared with TransportDG.
unsigned int qsize_lower_dim_
Size of quadrature of dim-1.
const TimeStep & step(int index=-1) const
unsigned int index() const
std::shared_ptr< DOFHandlerMultiDim > dh_
Object for distribution of dofs.
std::vector< VectorMPI > output_vec
Vector of solution data.
LinSys ** ls_dt
Linear algebra system for the time derivative (actually it is used only for handling the matrix struc...
int dg_variant
DG variant ((non-)symmetric/incomplete.
std::shared_ptr< Balance > balance_
unsigned int dg_order
Polynomial order of finite elements.
LinSys ** ls
Linear algebra system for the transport equation.
std::vector< Vec > ret_vec
Auxiliary vectors for calculation of sources in balance due to retardation (e.g. sorption).
unsigned int max_edg_sides
Maximal number of edge sides (evaluate from dim 1,2,3)
MultiField< 3, FieldValue< 3 >::Scalar > dg_penalty
Penalty enforcing inter-element continuity of solution (for each substance).
MultiField< 3, FieldValue< 3 >::Scalar > fracture_sigma
Transition parameter for diffusive transfer on fractures (for each substance).
Definitions of basic Lagrangean finite elements with polynomial shape functions.
Class FEValues calculates finite element data on the actual cells such as shape function values,...
#define DebugOut()
Macro defining 'debug' record of log.
unsigned int IntDim
A dimension index type.
Definitions of particular quadrature rules on simplices.
Discontinuous Galerkin method for equation of transport with dispersion.
UpdateFlags
Enum type UpdateFlags indicates which quantities are to be recomputed on each finite element cell.
@ update_values
Shape function values.
@ update_normal_vectors
Normal vectors.
@ update_JxW_values
Transformed quadrature weights.
@ update_side_JxW_values
Transformed quadrature weight for cell sides.
@ update_gradients
Shape function gradients.
@ update_quadrature_points
Transformed quadrature points.