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"; }
76 ASSERT_EQ(cell.
dim(), dim).error(
"Dimension of element mismatch!");
84 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); ++sbi)
87 for (
unsigned int i=0; i<
ndofs_; i++)
89 for (
unsigned int j=0; j<
ndofs_; j++)
93 for (
auto p : this->
bulk_points(element_patch_idx) )
102 for (
unsigned int i=0; i<
ndofs_; i++)
107 for (
auto p : this->
bulk_points(element_patch_idx) )
136 shared_ptr<FiniteElement<dim>>
fe_;
153 template <
template<
IntDim...>
class DimAssembly>
162 double h_max = 0, h_min = numeric_limits<double>::infinity();
163 for (
unsigned int i=0; i<e->
n_nodes(); i++)
164 for (
unsigned int j=i+1; j<e->
n_nodes(); j++)
166 double dist = arma::norm(*e.
node(i) - *e.
node(j));
167 h_max = max(h_max, dist);
168 h_min = min(h_min, dist);
187 delta += dot(diff_coef(p)*nv, nv);
190 return n == 0 ? 0 : (delta/n);
205 const double &diff_delta,
221 template <
class Po
intType>
224 double side_flux = 0;
237 template <
unsigned int dim,
class Model>
244 static constexpr
const char *
name() {
return "StiffnessAssemblyDG"; }
262 for (
auto a :
averages)
if (a !=
nullptr)
delete[] a;
263 for (
auto a :
waverages)
if (a !=
nullptr)
delete[] a;
264 for (
auto a :
jumps)
if (a !=
nullptr)
delete[] a;
309 for (
unsigned int s=0; s<2; s++)
320 ASSERT_EQ(cell.
dim(), dim).error(
"Dimension of element mismatch!");
321 if (!cell.
is_own())
return;
330 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
332 for (
unsigned int i=0; i<
ndofs_; i++)
333 for (
unsigned int j=0; j<
ndofs_; j++)
337 for (
auto p : this->
bulk_points(element_patch_idx) )
339 for (
unsigned int i=0; i<
ndofs_; i++)
344 for (
unsigned int j=0; j<
ndofs_; j++)
359 ASSERT_EQ(cell_side.
dim(), dim).error(
"Dimension of element mismatch!");
370 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
375 double transport_flux = side_flux/side.
measure();
381 unsigned int bc_type =
eq_fields_->bc_type[sbi](p_bdr);
389 transport_flux += gamma_l;
396 double flux_times_JxW;
413 for (
unsigned int i=0; i<
ndofs_; i++)
415 for (
unsigned int j=0; j<
ndofs_; j++)
437 ASSERT_EQ(edge_side_range.
begin()->element().dim(), dim).error(
"Dimension of element mismatch!");
440 double gamma_l, omega[2], transport_flux, delta[2], delta_sum;
441 double aniso1, aniso2;
442 double local_alpha=0.0;
446 auto dh_edge_cell =
eq_data_->
dh_->cell_accessor_from_element( edge_side.elem_idx() );
454 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
457 double pflux = 0, nflux = 0;
463 pflux += fluxes[sid];
465 nflux += fluxes[sid];
476 for (
unsigned int i=0; i<
fe_->n_dofs(); i++)
485 for(
DHCellSide edge_side1 : edge_side_range )
488 for(
DHCellSide edge_side2 : edge_side_range )
491 if (s2<=s1)
continue;
492 ASSERT(edge_side1.is_valid()).error(
"Invalid side of edge.");
498 if (fluxes[s2] > 0 && fluxes[s1] < 0)
499 transport_flux = fluxes[s1]*fabs(fluxes[s2]/pflux);
500 else if (fluxes[s2] < 0 && fluxes[s1] > 0)
501 transport_flux = fluxes[s1]*fabs(fluxes[s2]/nflux);
505 gamma_l = 0.5*fabs(transport_flux);
511 auto p2 = p1.point_on(edge_side2);
512 delta[0] += dot(
eq_fields_->diffusion_coef[sbi](p1)*normal_vector,normal_vector);
513 delta[1] += dot(
eq_fields_->diffusion_coef[sbi](p2)*normal_vector,normal_vector);
519 delta_sum = delta[0] + delta[1];
522 if (fabs(delta_sum) > 0)
524 omega[0] = delta[1]/delta_sum;
525 omega[1] = delta[0]/delta_sum;
526 double h = edge_side1.diameter();
529 gamma_l += local_alpha/h*aniso1*aniso2*(delta[0]*delta[1]/delta_sum);
532 for (
int i=0; i<2; i++) omega[i] = 0;
535 int sd[2];
bool is_side_own[2];
536 sd[0] = s1; is_side_own[0] = edge_side1.cell().is_own();
537 sd[1] = s2; is_side_own[1] = edge_side2.cell().is_own();
543 auto p2 = p1.point_on(edge_side2);
544 for (
unsigned int i=0; i<
fe_->n_dofs(); i++)
546 for (
int n=0; n<2; n++)
556 for (
int n=0; n<2; n++)
558 if (!is_side_own[n])
continue;
560 for (
int m=0; m<2; m++)
600 if (dim == 1)
return;
601 ASSERT_EQ(cell_lower_dim.
dim(), dim-1).error(
"Dimension of element mismatch!");
605 double comm_flux[2][2];
606 unsigned int n_dofs[2];
609 for(
unsigned int i=0; i<n_indices; ++i) {
613 n_dofs[0] =
fv_sb_[0]->n_dofs();
617 for(
unsigned int i=0; i<n_indices; ++i) {
621 n_dofs[1] =
fv_sb_[1]->n_dofs();
624 bool own_element_id[2];
625 own_element_id[0] = cell_lower_dim.
is_own();
626 own_element_id[1] = cell_higher_dim.
is_own();
629 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
631 for (
unsigned int i=0; i<n_dofs[0]+n_dofs[1]; i++)
632 for (
unsigned int j=0; j<n_dofs[0]+n_dofs[1]; j++)
639 auto p_low = p_high.lower_dim(cell_lower_dim);
652 comm_flux[0][0] = (sigma-min(0.,transport_flux))*
fv_sb_[0]->JxW(k);
653 comm_flux[0][1] = -(sigma-min(0.,transport_flux))*
fv_sb_[0]->JxW(k);
654 comm_flux[1][0] = -(sigma+max(0.,transport_flux))*
fv_sb_[0]->JxW(k);
655 comm_flux[1][1] = (sigma+max(0.,transport_flux))*
fv_sb_[0]->JxW(k);
657 for (
int n=0; n<2; n++)
659 if (!own_element_id[n])
continue;
661 for (
unsigned int i=0; i<n_dofs[n]; i++)
662 for (
int m=0; m<2; m++)
663 for (
unsigned int j=0; j<n_dofs[m]; j++)
664 local_matrix_[(i+n*n_dofs[0])*(n_dofs[0]+n_dofs[1]) + m*n_dofs[0] + j] +=
675 shared_ptr<FiniteElement<dim>>
fe_;
702 template <
template<
IntDim...>
class DimAssembly>
711 template <
unsigned int dim,
class Model>
718 static constexpr
const char *
name() {
return "SourcesAssemblyDG"; }
752 ASSERT_EQ(cell.
dim(), dim).error(
"Dimension of element mismatch!");
762 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
769 for (
auto p : this->
bulk_points(element_patch_idx) )
773 for (
unsigned int i=0; i<
ndofs_; i++)
779 for (
unsigned int i=0; i<
ndofs_; i++)
782 for (
auto p : this->
bulk_points(element_patch_idx) )
810 shared_ptr<FiniteElement<dim>>
fe_;
827 template <
template<
IntDim...>
class DimAssembly>
836 template <
unsigned int dim,
class Model>
843 static constexpr
const char *
name() {
return "BdrConditionAssemblyDG"; }
889 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
896 double transport_flux = side_flux/cell_side.
measure();
900 unsigned int bc_type =
eq_fields_->bc_type[sbi](p_bdr);
906 auto p_bdr = p.point_bdr(bc_elm);
908 for (
unsigned int i=0; i<
ndofs_; i++)
912 for (
unsigned int i=0; i<
ndofs_; i++)
918 double transport_flux = side_flux/cell_side.
measure();
928 auto p_bdr = p.point_bdr(bc_elm);
931 for (
unsigned int i=0; i<
ndofs_; i++)
939 for (
unsigned int i=0; i<
ndofs_; i++)
948 for (
unsigned int i=0; i<
ndofs_; i++)
956 auto p_bdr = p.point_bdr(bc_elm);
959 for (
unsigned int i=0; i<
ndofs_; i++)
964 for (
unsigned int i=0; i<
ndofs_; i++)
968 auto p_bdr = p.point_bdr(bc_elm);
981 auto p_bdr = p.point_bdr(bc_elm);
984 for (
unsigned int i=0; i<
ndofs_; i++)
989 for (
unsigned int i=0; i<
ndofs_; i++)
993 auto p_bdr = p.point_bdr(bc_elm);
1006 for (
unsigned int i=0; i<
ndofs_; i++)
1033 shared_ptr<FiniteElement<dim>>
fe_;
1050 template <
template<
IntDim...>
class DimAssembly>
1059 template <
unsigned int dim,
class Model>
1066 static constexpr
const char *
name() {
return "InitProjectionAssemblyDG"; }
1097 ASSERT_EQ(cell.
dim(), dim).error(
"Dimension of element mismatch!");
1104 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
1106 for (
unsigned int i=0; i<
ndofs_; i++)
1109 for (
unsigned int j=0; j<
ndofs_; j++)
1114 for (
auto p : this->
bulk_points(element_patch_idx) )
1118 for (
unsigned int i=0; i<
ndofs_; i++)
1120 for (
unsigned int j=0; j<
ndofs_; j++)
1133 shared_ptr<FiniteElement<dim>>
fe_;
1149 template <
template<
IntDim...>
class DimAssembly>
1158 template <
unsigned int dim,
class Model>
1165 static constexpr
const char *
name() {
return "InitConditionAssemblyDG"; }
1174 for(
unsigned int i = 0; i<RefElement<dim>::n_nodes; i++)
1193 ASSERT_EQ(cell.
dim(), dim).error(
"Dimension of element mismatch!");
1197 for (
unsigned int sbi=0; sbi<
eq_data_->n_substances(); sbi++)
1200 for (
auto p : this->
bulk_points(element_patch_idx) )
1202 double val =
eq_fields_->init_condition[sbi](p);
1219 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()
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
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 initialize(Quadrature &_quadrature, FiniteElement< DIM > &_fe, UpdateFlags _flags)
Initialize structures and calculates cell-independent data.
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.
TransportDG< Model >::EqFields EqFields
FieldSet used_fields_
Sub field set contains fields used in calculation.
FEValues< 3 > fe_values_
FEValues of object (of P disc finite element type)
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.
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.