|
| DiffusionUniform (const constructor_value_type &tau=1.) |
| Constructor for local solver. More...
|
|
template<typename SmallMatInT , typename SmallMatOutT > |
SmallMatOutT & | trace_to_flux (const SmallMatInT &lambda_values_in, SmallMatOutT &lambda_values_out, const lSol_float_t UNUSED(time)=0.) const |
| Evaluate local contribution to matrix–vector multiplication. More...
|
|
template<typename SmallMatInT , typename SmallMatOutT > |
SmallMatOutT & | residual_flux (const SmallMatInT &lambda_values_in, SmallMatOutT &lambda_values_out, const lSol_float_t UNUSED(time)=0.) const |
| Evaluate local contribution to matrix–vector residual. More...
|
|
template<typename SmallMatT > |
std::array< lSol_float_t, 1U > | errors (const SmallMatT &UNUSED(lambda_values), const lSol_float_t UNUSED(time)=0.) const |
| Evaluate local squared L2 error. More...
|
|
template<typename abscissa_float_t , std::size_t abscissas_sizeT, class input_array_t > |
std::array< std::array< lSol_float_t, Hypercube< hyEdge_dimT >::pow(abscissas_sizeT)>, system_dim > | bulk_values (const std::array< abscissa_float_t, abscissas_sizeT > &abscissas, const input_array_t &lambda_values, const lSol_float_t UNUSED(time)=0.) const |
| Evaluate local reconstruction at tensorial products of abscissas. More...
|
|
template<unsigned int hyEdge_dimT, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double>
class LocalSolver::DiffusionUniform< hyEdge_dimT, poly_deg, quad_deg, lSol_float_t >
Local solver for Poisson's equation on uniform hypergraph.
This class contains the local solver for Poisson's equation, i.e.,
\[ - \Delta u = 0 \quad \text{ in } \Omega, \qquad u = u_\text D \quad \text{ on } \partial \Omega \]
in a spatial domain \(\Omega \subset \mathbb R^d\). Here, \(d\) is the spatial dimension space_dim
, \(\Omega\) is a regular graph (hyEdge_dimT
= 1), or hypergraph whose hyperedges are surfaces (hyEdge_dimT
= 2), or volumes (hyEdge_dimT
= 3), or higher dimensional analogues. For this class, all hyperedges are supposed to be uniform (i.e. equal to the unit hypercube). Thus, no geometrical information is needed by this class.
- Template Parameters
-
hyEdge_dimT | Dimension of a hyperedge, i.e., 1 is for PDEs defined on graphs, 2 is for PDEs defined on surfaces, and 3 is for PDEs defined on volumes. |
poly_deg | The polynomial degree of test and trial functions. |
quad_deg | The order of the quadrature rule. |
lSol_float_t | The floating point type calculations are executed in. Defaults to double. |
- Authors
- Guido Kanschat, Heidelberg University, 2019–2020.
-
Andreas Rupp, Heidelberg University, 2019–2020.
template<unsigned int hyEdge_dimT, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double>
Assemble local matrix for the local solver.
The local solver neither depends on the geometry, nor on global functions. Thus, its local matrix is the same for all hyperedges and can be assembled once in the constructor. This is done in this function.
The function is static, since it is used in the constructor's initializer list.
- Parameters
-
tau | Penalty parameter for HDG. |
- Return values
-
loc_mat | Matrix of the local solver. |
template<unsigned int hyEdge_dimT, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double>
template<typename SmallMatT >
Assemble local right hand for the local solver.
The right hand side needs the values of the global degrees of freedom. Thus, it needs to be constructed individually for every hyperedge.
- Template Parameters
-
SmallMatT | The data type of the lambda values. |
- Parameters
-
lambda_values | Global degrees of freedom associated to the hyperedge. |
- Return values
-
loc_rhs | Local right hand side of the locasl solver. |
template<unsigned int hyEdge_dimT, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double>
template<typename abscissa_float_t , std::size_t abscissas_sizeT, class input_array_t >
std::array<std::array<lSol_float_t, Hypercube<hyEdge_dimT>::pow(abscissas_sizeT)>, system_dim> LocalSolver::DiffusionUniform< hyEdge_dimT, poly_deg, quad_deg, lSol_float_t >::bulk_values |
( |
const std::array< abscissa_float_t, abscissas_sizeT > & |
abscissas, |
|
|
const input_array_t & |
lambda_values, |
|
|
const lSol_float_t |
UNUSEDtime = 0. |
|
) |
| const |
Evaluate local reconstruction at tensorial products of abscissas.
- Template Parameters
-
absc_float_t | Floating type for the abscissa values. |
abscissas_sizeT | Size of the array of array of abscissas. |
input_array_t | Type of input array. |
- Parameters
-
abscissas | Abscissas of the supporting points. |
lambda_values | The values of the skeletal variable's coefficients. |
time | Time — this parameter is redundant for this local solver. |
- Return values
-
function_values | Function values at quadrature points. |
template<unsigned int hyEdge_dimT, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double>
template<typename SmallMatInT , typename SmallMatOutT >
SmallMatOutT& LocalSolver::DiffusionUniform< hyEdge_dimT, poly_deg, quad_deg, lSol_float_t >::residual_flux |
( |
const SmallMatInT & |
lambda_values_in, |
|
|
SmallMatOutT & |
lambda_values_out, |
|
|
const lSol_float_t |
UNUSEDtime = 0. |
|
) |
| const |
|
inline |
Evaluate local contribution to matrix–vector residual.
- Template Parameters
-
SmallMatInT | Data type of lambda_values_in . |
SmallMatOutT | Data type of lambda_values_out |
- Parameters
-
lambda_values_in | Local part of vector x. |
lambda_values_out | Local part that will be added to A * x. |
time | Time — this parameter is redundant for this local solver. |
- Return values
-
vecAx | Local part of vector A * x. |
template<unsigned int hyEdge_dimT, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double>
template<typename SmallMatInT , typename SmallMatOutT >
SmallMatOutT& LocalSolver::DiffusionUniform< hyEdge_dimT, poly_deg, quad_deg, lSol_float_t >::trace_to_flux |
( |
const SmallMatInT & |
lambda_values_in, |
|
|
SmallMatOutT & |
lambda_values_out, |
|
|
const lSol_float_t |
UNUSEDtime = 0. |
|
) |
| const |
|
inline |
Evaluate local contribution to matrix–vector multiplication.
Execute matrix–vector multiplication y = A * x, where x represents the vector containing the skeletal variable (adjacent to one hyperedge), and A is the condensed matrix arising from the HDG discretization. This function does this multiplication (locally) for one hyperedge. The hyperedge is no parameter, since all hyperedges are assumed to have the same properties.
- Template Parameters
-
SmallMatInT | Data type of lambda_values_in . |
SmallMatOutT | Data type of lambda_values_out |
- Parameters
-
lambda_values_in | Local part of vector x. |
lambda_values_out | Local part that will be added to A * x. |
time | Time — this parameter is redundant for this local solver. |
- Return values
-
vecAx | Local part of vector A * x. |