HyperHDG
Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t > Class Template Reference

Local solver for the equation that governs the bending of an elastic Bernoulli beam. More...

#include <bernoulli_beams.hxx>

Collaboration diagram for LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >:
Collaboration graph
[legend]

Classes

struct  data_type
 Define type of (hyperedge related) data that is stored in HyDataContainer. More...
 
struct  error_def
 Define how errors are evaluated. More...
 
struct  node_element
 Define type of node elements, especially with respect to nodal shape functions. More...
 

Public Types

typedef lSol_float_t constructor_value_type
 Class is constructed using a single double indicating the penalty parameter. More...
 

Public Member Functions

 BernoulliBendingBeam (const constructor_value_type &tau=1.)
 Constructor for local solver. More...
 
template<class hyEdgeT , typename SmallMatInT , typename SmallMatOutT >
SmallMatOutT & trace_to_flux (const SmallMatInT &lambda_values_in, SmallMatOutT &lambda_values_out, hyEdgeT &hyper_edge, const lSol_float_t time=0.) const
 Evaluate local contribution to matrix–vector multiplication. More...
 
template<class hyEdgeT , typename SmallMatInT , typename SmallMatOutT >
SmallMatOutT & residual_flux (const SmallMatInT &lambda_values_in, SmallMatOutT &lambda_values_out, hyEdgeT &hyper_edge, const lSol_float_t time=0.) const
 Evaluate local contribution to residual. More...
 
template<class hyEdgeT >
std::array< lSol_float_t, 1U > errors (const std::array< std::array< lSol_float_t, n_glob_dofs_per_node()>, 2 *hyEdge_dimT > &lambda_values, hyEdgeT &hyper_edge, const lSol_float_t time=0.) const
 Local squared contribution to the L2 error. More...
 
template<typename abscissa_float_t , std::size_t sizeT, class input_array_t , class hyEdgeT >
std::array< std::array< lSol_float_t, Hypercube< hyEdge_dimT >::pow(sizeT)>, BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t >::system_dimension()> bulk_values (const std::array< abscissa_float_t, sizeT > &abscissas, const input_array_t &lambda_values, hyEdgeT &hyper_edge, const lSol_float_t time=0.) const
 Evaluate local local reconstruction at tensorial products of abscissas. More...
 

Static Public Member Functions

static constexpr unsigned int hyEdge_dim ()
 Return template parameter hyEdge_dimT. More...
 
static constexpr unsigned int n_glob_dofs_per_node ()
 Evaluate amount of global degrees of freedom per hypernode. More...
 
static constexpr unsigned int system_dimension ()
 Dimension of of the solution evaluated with respect to a hyperedge. More...
 
static constexpr unsigned int node_system_dimension ()
 Dimension of of the solution evaluated with respect to a hypernode. More...
 

Private Member Functions

 HAS_MEMBER_FUNCTION (trace_to_flux, has_trace_to_flux)
 Prepare struct to check for function to exist (cf. compile_time_tricks.hxx). More...
 
 HAS_MEMBER_FUNCTION (residual_flux, has_residual_flux)
 Prepare struct to check for function to exist (cf. compile_time_tricks.hxx). More...
 
 HAS_MEMBER_FUNCTION (errors, has_errors)
 Prepare struct to check for function to exist (cf. compile_time_tricks.hxx). More...
 
template<class hyEdgeT , typename SmallMatT >
std::array< std::array< double, bilaplacian_sol_t::n_glob_dofs_per_node()>, 2 *hyEdge_dimT > node_dof_to_edge_dof (const SmallMatT &lambda, hyEdgeT &hyper_edge, const unsigned int outer_index) const
 Do the preprocessing to transfer global to local dofs. More...
 
template<class hyEdgeT , typename SmallMatT >
SmallMatT & edge_dof_to_node_dof (const std::array< std::array< double, bilaplacian_sol_t::n_glob_dofs_per_node()>, 2 *hyEdge_dimT > &lambda, SmallMatT &lambda_values_out, hyEdgeT &hyper_edge, const unsigned int outer_index) const
 Do the postprocessing to transfer local to global dofs. More...
 

Private Attributes

const bilaplacian_sol_t bilaplacian_solver
 The bilaplacian solver that solves the locally defined PDE. More...
 

Detailed Description

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
class LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >

Local solver for the equation that governs the bending of an elastic Bernoulli beam.


Authors
Guido Kanschat, Heidelberg University, 2019–2020.
Andreas Rupp, Heidelberg University, 2019–2020.

Member Typedef Documentation

◆ constructor_value_type

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
typedef lSol_float_t LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::constructor_value_type

Class is constructed using a single double indicating the penalty parameter.


Constructor & Destructor Documentation

◆ BernoulliBendingBeam()

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::BernoulliBendingBeam ( const constructor_value_type tau = 1.)
inline

Constructor for local solver.


Parameters
tauPenalty parameter of HDG scheme.

Member Function Documentation

◆ bulk_values()

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
template<typename abscissa_float_t , std::size_t sizeT, class input_array_t , class hyEdgeT >
std::array<std::array<lSol_float_t, Hypercube<hyEdge_dimT>::pow(sizeT)>, BernoulliBendingBeam<hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t>:: system_dimension()> LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::bulk_values ( const std::array< abscissa_float_t, sizeT > &  abscissas,
const input_array_t &  lambda_values,
hyEdgeT &  hyper_edge,
const lSol_float_t  time = 0. 
) const
inline

Evaluate local local reconstruction at tensorial products of abscissas.


Template Parameters
absc_float_tFloating type for the abscissa values.
abscissas_sizeTSize of the array of array of abscissas.
input_array_tType of input array.
hyEdgeTThe geometry type / typename of the considered hyEdge's geometry.
Parameters
abscissasAbscissas of the supporting points.
lambda_valuesThe values of the skeletal variable's coefficients.
hyper_edgeThe geometry of the considered hyperedge (of typename GeomT).
timeTime.
Return values
func_valuesFunction values at tensorial points.

◆ edge_dof_to_node_dof()

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
template<class hyEdgeT , typename SmallMatT >
SmallMatT& LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::edge_dof_to_node_dof ( const std::array< std::array< double, bilaplacian_sol_t::n_glob_dofs_per_node()>, 2 *hyEdge_dimT > &  lambda,
SmallMatT &  lambda_values_out,
hyEdgeT &  hyper_edge,
const unsigned int  outer_index 
) const
inlineprivate

Do the postprocessing to transfer local to global dofs.


◆ errors()

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
template<class hyEdgeT >
std::array<lSol_float_t, 1U> LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::errors ( const std::array< std::array< lSol_float_t, n_glob_dofs_per_node()>, 2 *hyEdge_dimT > &  lambda_values,
hyEdgeT &  hyper_edge,
const lSol_float_t  time = 0. 
) const
inline

Local squared contribution to the L2 error.


Template Parameters
hyEdgeTThe geometry type / typename of the considered hyEdge's geometry.
Parameters
lambda_valuesThe values of the skeletal variable's coefficients.
hyper_edgeThe geometry of the considered hyperedge (of typename GeomT).
timeTime at which analytic functions are evaluated.
Return values
vec_bLocal part of vector b.

◆ HAS_MEMBER_FUNCTION() [1/3]

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::HAS_MEMBER_FUNCTION ( errors  ,
has_errors   
)
private

Prepare struct to check for function to exist (cf. compile_time_tricks.hxx).


◆ HAS_MEMBER_FUNCTION() [2/3]

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::HAS_MEMBER_FUNCTION ( residual_flux  ,
has_residual_flux   
)
private

Prepare struct to check for function to exist (cf. compile_time_tricks.hxx).


◆ HAS_MEMBER_FUNCTION() [3/3]

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::HAS_MEMBER_FUNCTION ( trace_to_flux  ,
has_trace_to_flux   
)
private

Prepare struct to check for function to exist (cf. compile_time_tricks.hxx).


◆ hyEdge_dim()

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
static constexpr unsigned int LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::hyEdge_dim ( )
inlinestaticconstexpr

Return template parameter hyEdge_dimT.


Return values
hyEdge_dimTDimension of hypergraph's hyperedges.

◆ n_glob_dofs_per_node()

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
static constexpr unsigned int LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::n_glob_dofs_per_node ( )
inlinestaticconstexpr

Evaluate amount of global degrees of freedom per hypernode.


This number must be equal to HyperNodeFactory::n_glob_dofs_per_node()() of the HyperNodeFactory cooperating with this object.

Return values
n_dofsNumber of global degrees of freedom per hypernode.

◆ node_dof_to_edge_dof()

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
template<class hyEdgeT , typename SmallMatT >
std::array<std::array<double, bilaplacian_sol_t::n_glob_dofs_per_node()>, 2 * hyEdge_dimT> LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::node_dof_to_edge_dof ( const SmallMatT &  lambda,
hyEdgeT &  hyper_edge,
const unsigned int  outer_index 
) const
inlineprivate

Do the preprocessing to transfer global to local dofs.


◆ node_system_dimension()

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
static constexpr unsigned int LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::node_system_dimension ( )
inlinestaticconstexpr

Dimension of of the solution evaluated with respect to a hypernode.


◆ residual_flux()

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
template<class hyEdgeT , typename SmallMatInT , typename SmallMatOutT >
SmallMatOutT& LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::residual_flux ( const SmallMatInT &  lambda_values_in,
SmallMatOutT &  lambda_values_out,
hyEdgeT &  hyper_edge,
const lSol_float_t  time = 0. 
) const
inline

Evaluate local contribution to residual.


◆ system_dimension()

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
static constexpr unsigned int LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::system_dimension ( )
inlinestaticconstexpr

Dimension of of the solution evaluated with respect to a hyperedge.


◆ trace_to_flux()

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
template<class hyEdgeT , typename SmallMatInT , typename SmallMatOutT >
SmallMatOutT& LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::trace_to_flux ( const SmallMatInT &  lambda_values_in,
SmallMatOutT &  lambda_values_out,
hyEdgeT &  hyper_edge,
const lSol_float_t  time = 0. 
) const
inline

Evaluate local contribution to matrix–vector multiplication.


Template Parameters
hyEdgeTThe geometry type / typename of the considered hyEdge's geometry.
SmallMatInTData type of lambda_values_in.
SmallMatOutTData type of lambda_values_out.
Parameters
lambda_values_inLocal part of vector x.
lambda_values_outLocal part that will be added to A * x.
hyper_edgeHyperEdge that is considered.
timeTime at which analytic functions are evaluated.
Return values
vecAxLocal part of vector A * x.

Member Data Documentation

◆ bilaplacian_solver

template<unsigned int hyEdge_dimT, unsigned int space_dim, unsigned int poly_deg, unsigned int quad_deg, typename lSol_float_t = double, typename bilaplacian_sol_t = BilaplacianUniform<hyEdge_dimT, poly_deg, quad_deg, lSol_float_t>>
const bilaplacian_sol_t LocalSolver::BernoulliBendingBeam< hyEdge_dimT, space_dim, poly_deg, quad_deg, lSol_float_t, bilaplacian_sol_t >::bilaplacian_solver
private

The bilaplacian solver that solves the locally defined PDE.



The documentation for this class was generated from the following file: