Data Structures | Functions

viennafem::detail Namespace Reference

Contains implementation details of ViennaFEM not intended to be used by the library user directly. More...

Data Structures

class  cell_quan_interface
 The runtime interface for cell quantities. More...
class  cell_quan_constant
 Implementation of a function which is piecewise constant on each cell. Function values are retrieved from ViennaData. More...
class  cell_quan_expr
 Implementation of a function which is specified as an expression given in local coordinates on each cell. Expressions are retrieved from ViennaData. More...
class  cell_quan_wrapper
 A type erasure class which enables to store cell_quan_constants and cell_quan_exprs with different template arguments in a single array. More...
struct  cell_updater
 A helper functor for updating the cell_quan tokens in a ViennaMath expression. More...
struct  pde_assembler_internal
 The worker class which assembles the system of linear equations ('FEM assembly core'). More...
struct  extract_domain
 If EntityType is a ViennaGrid segment, returns the domain. If EntityType is already the domain, no changes. More...
struct  extract_domain< viennagrid::segment_t< ConfigType > >
 Specialization of the domain extraction for a ViennaGrid segment. More...
struct  equation_wrapper
 A simple wrapper class which abstracts a matrix and a vector into a linear equation. More...
struct  jacobian_adder
 Multiplies a given expression with the Jacobian cell-quantity. If the expression is given by an integral, the integrand is multiplied with the Jacobian. More...
struct  weak_form_checker
 A helper class which scans whether a ViennaMath equation is in a weak form already. More...
struct  weak_form_creator
 Transforms a strong formulation of an equation to a weak form, assuming homogeneous Neumann boundary conditions. More...

Functions

template<typename ExpressionType >
std::vector< ExpressionType > make_full_function (ExpressionType const &func, std::size_t length, std::size_t index)
 Generates a vector-valued basis function out of a scalar valued basis function.
template<typename CellTag , typename EquationType , typename PDESystemType >
std::vector< std::vector
< EquationType > > 
make_local_weak_form (EquationType const &transformed_weak_form, PDESystemType const &pde_system)
 Generates the local weak form by transforming the global weak form accordingly.
template<typename T >
bool is_uniform_basis (T const &)
 Helper function which returns whether a basis is uniform over the whole domain.
template<typename EquationArray , typename InterfaceType >
void write_strong_form (EquationArray const &pdes, latex_logger< InterfaceType > &log)
 Implementation for writing the strong form to LaTeX.
template<typename EquationArray , typename InterfaceType >
void write_weak_form (EquationArray const &weak_form, latex_logger< InterfaceType > &log)
 Implementation for writing the weak form to LaTeX.
template<typename EquationArray , typename InterfaceType >
void write_coordinated_weak_form (EquationArray const &weak_form, latex_logger< InterfaceType > &log)
 Implementation for writing the coordinated weak form to LaTeX.
template<typename EquationArray , typename InterfaceType >
void write_transformed_weak_form (EquationArray const &weak_form, latex_logger< InterfaceType > &log)
 Implementation for writing the transformed weak form to LaTeX.
template<typename EquationArray , typename InterfaceType >
void write_test_and_trial_space (EquationArray const &test_space, EquationArray const &trial_space, latex_logger< InterfaceType > &log)
 Implementation for writing the test and trial spaces to LaTeX.
template<typename InterfaceType >
void write_linear_solver_stats (latex_logger< InterfaceType > &log)
 Implementation for writing linear solver statistics to LaTeX.
template<typename ReferenceCellType , typename BasisTag >
viennamath::numerical_quadrature make_quadrature_rule_impl (BasisTag)
template<>
viennamath::numerical_quadrature make_quadrature_rule_impl< viennafem::unit_interval > (lagrange_tag< 1 >)
template<>
viennamath::numerical_quadrature make_quadrature_rule_impl< viennafem::unit_interval > (lagrange_tag< 2 >)
template<>
viennamath::numerical_quadrature make_quadrature_rule_impl< viennafem::unit_interval > (lagrange_tag< 3 >)
template<>
viennamath::numerical_quadrature make_quadrature_rule_impl< viennafem::unit_square > (lagrange_tag< 1 >)
template<>
viennamath::numerical_quadrature make_quadrature_rule_impl< viennafem::unit_square > (lagrange_tag< 2 >)
template<>
viennamath::numerical_quadrature make_quadrature_rule_impl< viennafem::unit_triangle > (lagrange_tag< 1 >)
template<>
viennamath::numerical_quadrature make_quadrature_rule_impl< viennafem::unit_triangle > (lagrange_tag< 2 >)
template<>
viennamath::numerical_quadrature make_quadrature_rule_impl< viennafem::unit_cube > (lagrange_tag< 1 >)
template<>
viennamath::numerical_quadrature make_quadrature_rule_impl< viennafem::unit_cube > (lagrange_tag< 2 >)
template<>
viennamath::numerical_quadrature make_quadrature_rule_impl< viennafem::unit_tetrahedron > (lagrange_tag< 1 >)
template<>
viennamath::numerical_quadrature make_quadrature_rule_impl< viennafem::unit_tetrahedron > (lagrange_tag< 2 >)
template<typename CellType , typename InterfaceType >
void wrap_jacobian (viennafem::cell_quan< CellType, InterfaceType > &det_dF_dt, viennafem::unit_interval)
 Wraps the cell quantity for the Jacobian on each cell depending on the reference element used. This is the overload for the unit interval.
template<typename CellType , typename InterfaceType >
void wrap_jacobian (viennafem::cell_quan< CellType, InterfaceType > &det_dF_dt, viennafem::unit_triangle)
 Wraps the cell quantity for the Jacobian on each cell depending on the reference element used. This is the overload for the unit triangle.
template<typename CellType , typename InterfaceType >
void wrap_jacobian (viennafem::cell_quan< CellType, InterfaceType > &det_dF_dt, viennafem::unit_tetrahedron)
 Wraps the cell quantity for the Jacobian on each cell depending on the reference element used. This is the overload for the unit tetrahedron.
template<typename CellType , typename InterfaceType >
void wrap_jacobian (viennafem::cell_quan< CellType, InterfaceType > &det_dF_dt, viennafem::unit_square)
 Wraps the cell quantity for the Jacobian on each cell depending on the reference element used. This is the overload for the unit square.
template<typename CellType , typename InterfaceType >
void wrap_jacobian (viennafem::cell_quan< CellType, InterfaceType > &det_dF_dt, viennafem::unit_cube)
 Wraps the cell quantity for the Jacobian on each cell depending on the reference element used. This is the overload for the unit cube.
template<long i, long j, typename CellType , typename InterfaceType >
void wrap_dt_dx (viennafem::cell_quan< CellType, InterfaceType > &dt_dx, viennafem::unit_interval)
 Wraps the cell quantity for the partial derivatives of the reference mapping on each cell depending on the reference element used. This is the overload for the unit interval.
template<long i, long j, typename CellType , typename InterfaceType >
void wrap_dt_dx (viennafem::cell_quan< CellType, InterfaceType > &dt_dx, viennafem::unit_triangle)
 Wraps the cell quantity for the partial derivatives of the reference mapping on each cell depending on the reference element used. This is the overload for the unit triangle.
template<long i, long j, typename CellType , typename InterfaceType >
void wrap_dt_dx (viennafem::cell_quan< CellType, InterfaceType > &dt_dx, viennafem::unit_tetrahedron)
 Wraps the cell quantity for the partial derivatives of the reference mapping on each cell depending on the reference element used. This is the overload for the unit tetrahedron.
template<long i, long j, typename CellType , typename InterfaceType >
void wrap_dt_dx (viennafem::cell_quan< CellType, InterfaceType > &dt_dx, viennafem::unit_square)
 Wraps the cell quantity for the partial derivatives of the reference mapping on each cell depending on the reference element used. This is the overload for the unit square.
template<long i, long j, typename CellType , typename InterfaceType >
void wrap_dt_dx (viennafem::cell_quan< CellType, InterfaceType > &dt_dx, viennafem::unit_cube)
 Wraps the cell quantity for the partial derivatives of the reference mapping on each cell depending on the reference element used. This is the overload for the unit cube.
template<typename CellType , typename EquationType , typename PDESystemType , typename ReferenceCellTag >
EquationType transform_to_reference_cell_1d (EquationType const &weak_form, PDESystemType const &pde_system, ReferenceCellTag)
 Transforms a weak formulation given in physical space to the reference cell. Also transforms derivatives where appropriate. Implementation for the 1d-case.
template<typename CellType , typename EquationType , typename PDESystemType , typename ReferenceCellTag >
EquationType transform_to_reference_cell_2d (EquationType const &weak_form, PDESystemType const &pde_system, ReferenceCellTag)
 Transforms a weak formulation given in physical space to the reference cell. Also transforms derivatives where appropriate. Implementation for the 2d-case.
template<typename CellType , typename EquationType , typename PDESystemType , typename ReferenceCellTag >
EquationType transform_to_reference_cell_3d (EquationType const &weak_form, PDESystemType const &pde_system, ReferenceCellTag)
 Transforms a weak formulation given in physical space to the reference cell. Also transforms derivatives where appropriate. Implementation for the 3d-case.

Detailed Description

Contains implementation details of ViennaFEM not intended to be used by the library user directly.


Function Documentation

bool viennafem::detail::is_uniform_basis ( T const &   ) 

Helper function which returns whether a basis is uniform over the whole domain.

std::vector<ExpressionType> viennafem::detail::make_full_function ( ExpressionType const &  func,
std::size_t  length,
std::size_t  index 
)

Generates a vector-valued basis function out of a scalar valued basis function.

A basis function phi is mapped to e.g. (0, phi, 0). Note that scalar-valued basis functions are vector-valued basis functions with only one vector entry.

Parameters:
func The scalar-valued basis function
length Length of the resulting basis function vector
index Index of the nonzero entry of the vector.
std::vector< std::vector<EquationType> > viennafem::detail::make_local_weak_form ( EquationType const &  transformed_weak_form,
PDESystemType const &  pde_system 
)

Generates the local weak form by transforming the global weak form accordingly.

viennamath::numerical_quadrature viennafem::detail::make_quadrature_rule_impl ( BasisTag   )  [inline]
viennamath::numerical_quadrature viennafem::detail::make_quadrature_rule_impl< viennafem::unit_cube > ( lagrange_tag< 1 >   )  [inline]
viennamath::numerical_quadrature viennafem::detail::make_quadrature_rule_impl< viennafem::unit_cube > ( lagrange_tag< 2 >   )  [inline]
viennamath::numerical_quadrature viennafem::detail::make_quadrature_rule_impl< viennafem::unit_interval > ( lagrange_tag< 1 >   )  [inline]
viennamath::numerical_quadrature viennafem::detail::make_quadrature_rule_impl< viennafem::unit_interval > ( lagrange_tag< 2 >   )  [inline]
viennamath::numerical_quadrature viennafem::detail::make_quadrature_rule_impl< viennafem::unit_interval > ( lagrange_tag< 3 >   )  [inline]
viennamath::numerical_quadrature viennafem::detail::make_quadrature_rule_impl< viennafem::unit_square > ( lagrange_tag< 1 >   )  [inline]
viennamath::numerical_quadrature viennafem::detail::make_quadrature_rule_impl< viennafem::unit_square > ( lagrange_tag< 2 >   )  [inline]
viennamath::numerical_quadrature viennafem::detail::make_quadrature_rule_impl< viennafem::unit_tetrahedron > ( lagrange_tag< 1 >   )  [inline]
viennamath::numerical_quadrature viennafem::detail::make_quadrature_rule_impl< viennafem::unit_tetrahedron > ( lagrange_tag< 2 >   )  [inline]
viennamath::numerical_quadrature viennafem::detail::make_quadrature_rule_impl< viennafem::unit_triangle > ( lagrange_tag< 2 >   )  [inline]
viennamath::numerical_quadrature viennafem::detail::make_quadrature_rule_impl< viennafem::unit_triangle > ( lagrange_tag< 1 >   )  [inline]
EquationType viennafem::detail::transform_to_reference_cell_1d ( EquationType const &  weak_form,
PDESystemType const &  pde_system,
ReferenceCellTag   
)

Transforms a weak formulation given in physical space to the reference cell. Also transforms derivatives where appropriate. Implementation for the 1d-case.

EquationType viennafem::detail::transform_to_reference_cell_2d ( EquationType const &  weak_form,
PDESystemType const &  pde_system,
ReferenceCellTag   
)

Transforms a weak formulation given in physical space to the reference cell. Also transforms derivatives where appropriate. Implementation for the 2d-case.

EquationType viennafem::detail::transform_to_reference_cell_3d ( EquationType const &  weak_form,
PDESystemType const &  pde_system,
ReferenceCellTag   
)

Transforms a weak formulation given in physical space to the reference cell. Also transforms derivatives where appropriate. Implementation for the 3d-case.

void viennafem::detail::wrap_dt_dx ( viennafem::cell_quan< CellType, InterfaceType > &  dt_dx,
viennafem::unit_square   
)

Wraps the cell quantity for the partial derivatives of the reference mapping on each cell depending on the reference element used. This is the overload for the unit square.

void viennafem::detail::wrap_dt_dx ( viennafem::cell_quan< CellType, InterfaceType > &  dt_dx,
viennafem::unit_cube   
)

Wraps the cell quantity for the partial derivatives of the reference mapping on each cell depending on the reference element used. This is the overload for the unit cube.

void viennafem::detail::wrap_dt_dx ( viennafem::cell_quan< CellType, InterfaceType > &  dt_dx,
viennafem::unit_tetrahedron   
)

Wraps the cell quantity for the partial derivatives of the reference mapping on each cell depending on the reference element used. This is the overload for the unit tetrahedron.

void viennafem::detail::wrap_dt_dx ( viennafem::cell_quan< CellType, InterfaceType > &  dt_dx,
viennafem::unit_interval   
)

Wraps the cell quantity for the partial derivatives of the reference mapping on each cell depending on the reference element used. This is the overload for the unit interval.

void viennafem::detail::wrap_dt_dx ( viennafem::cell_quan< CellType, InterfaceType > &  dt_dx,
viennafem::unit_triangle   
)

Wraps the cell quantity for the partial derivatives of the reference mapping on each cell depending on the reference element used. This is the overload for the unit triangle.

void viennafem::detail::wrap_jacobian ( viennafem::cell_quan< CellType, InterfaceType > &  det_dF_dt,
viennafem::unit_tetrahedron   
)

Wraps the cell quantity for the Jacobian on each cell depending on the reference element used. This is the overload for the unit tetrahedron.

void viennafem::detail::wrap_jacobian ( viennafem::cell_quan< CellType, InterfaceType > &  det_dF_dt,
viennafem::unit_triangle   
)

Wraps the cell quantity for the Jacobian on each cell depending on the reference element used. This is the overload for the unit triangle.

void viennafem::detail::wrap_jacobian ( viennafem::cell_quan< CellType, InterfaceType > &  det_dF_dt,
viennafem::unit_interval   
)

Wraps the cell quantity for the Jacobian on each cell depending on the reference element used. This is the overload for the unit interval.

void viennafem::detail::wrap_jacobian ( viennafem::cell_quan< CellType, InterfaceType > &  det_dF_dt,
viennafem::unit_cube   
)

Wraps the cell quantity for the Jacobian on each cell depending on the reference element used. This is the overload for the unit cube.

void viennafem::detail::wrap_jacobian ( viennafem::cell_quan< CellType, InterfaceType > &  det_dF_dt,
viennafem::unit_square   
)

Wraps the cell quantity for the Jacobian on each cell depending on the reference element used. This is the overload for the unit square.

void write_coordinated_weak_form ( EquationArray const &  weak_form,
latex_logger< InterfaceType > &  log 
)

Implementation for writing the coordinated weak form to LaTeX.

void write_linear_solver_stats ( latex_logger< InterfaceType > &  log  ) 

Implementation for writing linear solver statistics to LaTeX.

void write_strong_form ( EquationArray const &  pde_system,
latex_logger< InterfaceType > &  log 
)

Implementation for writing the strong form to LaTeX.

void write_test_and_trial_space ( EquationArray const &  test_space,
EquationArray const &  trial_space,
latex_logger< InterfaceType > &  log 
)

Implementation for writing the test and trial spaces to LaTeX.

void write_transformed_weak_form ( EquationArray const &  weak_form,
latex_logger< InterfaceType > &  log 
)

Implementation for writing the transformed weak form to LaTeX.

void write_weak_form ( EquationArray const &  weak_form,
latex_logger< InterfaceType > &  log 
)

Implementation for writing the weak form to LaTeX.