version 0.4.1
Ikarus::KirchhoffLoveShell< PreFE, FE > Class Template Reference

Kirchhoff-Love shell finite element class. More...

#include <ikarus/finiteelements/mechanics/kirchhoffloveshell.hh>

Inheritance diagram for Ikarus::KirchhoffLoveShell< PreFE, FE >:
[legend]

Classes

struct  KinematicVariables
 A structure representing kinematic variables. More...
 

Public Types

using Traits = PreFE::Traits
 
using BasisHandler = typename Traits::BasisHandler
 
using FlatBasis = typename Traits::FlatBasis
 
using Requirement = FERequirementsFactory< FESolutions::displacement, FEParameter::loadfactor, Traits::useEigenRef >::type
 
using LocalView = typename Traits::LocalView
 
using Geometry = typename Traits::Geometry
 
using GridView = typename Traits::GridView
 
using Element = typename Traits::Element
 
using LocalBasisType = decltype(std::declval< LocalView >().tree().child(0).finiteElement().localBasis())
 
using Pre = KirchhoffLoveShellPre
 
using SupportedResultTypes = std::tuple< decltype(makeRT< ResultTypes >())... >
 

Public Member Functions

 KirchhoffLoveShell (const Pre &pre)
 Constructor for the KirchhoffLoveShell class. More...
 
template<typename ST = double>
auto displacementFunction (const Requirement &par, const std::optional< std::reference_wrapper< const Eigen::VectorX< ST > > > &dx=std::nullopt) const
 Get the displacement function and nodal displacements. More...
 
Geometry geometry () const
 
size_t numberOfNodes () const
 
int order () const
 
template<template< typename, int, int > class RT>
requires (supportsResultType<RT>())
auto calculateAtImpl (const Requirement &req, const Dune::FieldVector< double, Traits::mydim > &local) -> ResultWrapper< RT< double, myDim, worldDim >, ResultShape::Vector >
 Calculates a requested result at a specific local position. More...
 

Static Public Member Functions

static consteval bool supportsResultType ()
 Returns whether a ResultType is provided by the element. More...
 

Static Public Attributes

static constexpr int myDim = Traits::mydim
 
static constexpr int worldDim = Traits::worlddim
 
static constexpr int membraneStrainSize = 3
 
static constexpr int bendingStrainSize = 3
 

Protected Member Functions

void bindImpl ()
 A helper function to bind the local view to the element. More...
 
auto computeMaterialAndStrains (const Dune::FieldVector< double, 2 > &gpPos, int gpIndex, const Geometry &geo, const auto &uFunction) const
 Compute material properties and strains at a given integration point. More...
 
template<typename ST >
void calculateMatrixImpl (const Requirement &par, const MatrixAffordance &affordance, typename Traits::template MatrixType< ST > K, const std::optional< std::reference_wrapper< const Eigen::VectorX< ST > > > &dx=std::nullopt) const
 
template<typename ST >
void calculateVectorImpl (const Requirement &par, const VectorAffordance &affordance, typename Traits::template VectorType< ST > force, const std::optional< std::reference_wrapper< const Eigen::VectorX< ST > > > &dx=std::nullopt) const
 
template<typename ST >
auto calculateScalarImpl (const Requirement &par, const ScalarAffordance &affordance, const std::optional< std::reference_wrapper< const Eigen::VectorX< ST > > > &dx=std::nullopt) const -> ST
 
template<typename ST >
Eigen::Matrix< ST, 3, 3 > kgBending (const Eigen::Matrix< ST, 2, 3 > &jcur, const Eigen::Matrix3< ST > &h, const auto &dN, const auto &ddN, const Eigen::Vector3< ST > &a3N, const Eigen::Vector3< ST > &a3, const Eigen::Vector3< ST > &S, int I, int J) const
 
template<typename ST >
Eigen::Matrix< ST, 3, 3 > bopBending (const Eigen::Matrix< ST, 2, 3 > &jcur, const Eigen::Matrix3< ST > &h, const auto &dN, const auto &ddN, const int node, const Eigen::Vector3< ST > &a3N, const Eigen::Vector3< ST > &a3) const
 
Eigen::Matrix< double, 3, 3 > materialTangent (const Eigen::Matrix< double, 3, 3 > &Aconv) const
 Gets the material tangent matrix for the linear elastic material. More...
 

Detailed Description

template<typename PreFE, typename FE>
class Ikarus::KirchhoffLoveShell< PreFE, FE >

This class represents Kirchhoff-Love shell finite elements.

Template Parameters
PreFEType of the pre finite element.
FEType of the finite element.

Member Typedef Documentation

◆ BasisHandler

template<typename PreFE , typename FE >
using Ikarus::KirchhoffLoveShell< PreFE, FE >::BasisHandler = typename Traits::BasisHandler

◆ Element

template<typename PreFE , typename FE >
using Ikarus::KirchhoffLoveShell< PreFE, FE >::Element = typename Traits::Element

◆ FlatBasis

template<typename PreFE , typename FE >
using Ikarus::KirchhoffLoveShell< PreFE, FE >::FlatBasis = typename Traits::FlatBasis

◆ Geometry

template<typename PreFE , typename FE >
using Ikarus::KirchhoffLoveShell< PreFE, FE >::Geometry = typename Traits::Geometry

◆ GridView

template<typename PreFE , typename FE >
using Ikarus::KirchhoffLoveShell< PreFE, FE >::GridView = typename Traits::GridView

◆ LocalBasisType

template<typename PreFE , typename FE >
using Ikarus::KirchhoffLoveShell< PreFE, FE >::LocalBasisType = decltype(std::declval<LocalView>().tree().child(0).finiteElement().localBasis())

◆ LocalView

template<typename PreFE , typename FE >
using Ikarus::KirchhoffLoveShell< PreFE, FE >::LocalView = typename Traits::LocalView

◆ Pre

template<typename PreFE , typename FE >
using Ikarus::KirchhoffLoveShell< PreFE, FE >::Pre = KirchhoffLoveShellPre

◆ Requirement

◆ SupportedResultTypes

using Ikarus::ResultTypeBase< ResultTypes >::SupportedResultTypes = std::tuple<decltype(makeRT<ResultTypes>())...>
inherited

◆ Traits

template<typename PreFE , typename FE >
using Ikarus::KirchhoffLoveShell< PreFE, FE >::Traits = PreFE::Traits

Constructor & Destructor Documentation

◆ KirchhoffLoveShell()

template<typename PreFE , typename FE >
Ikarus::KirchhoffLoveShell< PreFE, FE >::KirchhoffLoveShell ( const Pre pre)
inline

Initializes the KirchhoffLoveShell instance with the given parameters.

Parameters
preThe pre fe

Member Function Documentation

◆ bindImpl()

template<typename PreFE , typename FE >
void Ikarus::KirchhoffLoveShell< PreFE, FE >::bindImpl ( )
inlineprotected

◆ bopBending()

template<typename PreFE , typename FE >
template<typename ST >
Eigen::Matrix< ST, 3, 3 > Ikarus::KirchhoffLoveShell< PreFE, FE >::bopBending ( const Eigen::Matrix< ST, 2, 3 > &  jcur,
const Eigen::Matrix3< ST > &  h,
const auto &  dN,
const auto &  ddN,
const int  node,
const Eigen::Vector3< ST > &  a3N,
const Eigen::Vector3< ST > &  a3 
) const
inlineprotected
Here is the caller graph for this function:

◆ calculateAtImpl()

template<typename PreFE , typename FE >
template<template< typename, int, int > class RT>
requires (supportsResultType<RT>())
auto Ikarus::KirchhoffLoveShell< PreFE, FE >::calculateAtImpl ( const Requirement req,
const Dune::FieldVector< double, Traits::mydim > &  local 
) -> ResultWrapper<RT<double, myDim, worldDim>, ResultShape::Vector>
inline
Parameters
reqThe FERequirementType object holding the global solution.
localLocal position vector.
Returns
calculated result
Template Parameters
RTThe type representing the requested result.

◆ calculateMatrixImpl()

template<typename PreFE , typename FE >
template<typename ST >
void Ikarus::KirchhoffLoveShell< PreFE, FE >::calculateMatrixImpl ( const Requirement par,
const MatrixAffordance affordance,
typename Traits::template MatrixType< ST >  K,
const std::optional< std::reference_wrapper< const Eigen::VectorX< ST > > > &  dx = std::nullopt 
) const
inlineprotected

◆ calculateScalarImpl()

template<typename PreFE , typename FE >
template<typename ST >
auto Ikarus::KirchhoffLoveShell< PreFE, FE >::calculateScalarImpl ( const Requirement par,
const ScalarAffordance affordance,
const std::optional< std::reference_wrapper< const Eigen::VectorX< ST > > > &  dx = std::nullopt 
) const -> ST
inlineprotected

◆ calculateVectorImpl()

template<typename PreFE , typename FE >
template<typename ST >
void Ikarus::KirchhoffLoveShell< PreFE, FE >::calculateVectorImpl ( const Requirement par,
const VectorAffordance affordance,
typename Traits::template VectorType< ST >  force,
const std::optional< std::reference_wrapper< const Eigen::VectorX< ST > > > &  dx = std::nullopt 
) const
inlineprotected

◆ computeMaterialAndStrains()

template<typename PreFE , typename FE >
auto Ikarus::KirchhoffLoveShell< PreFE, FE >::computeMaterialAndStrains ( const Dune::FieldVector< double, 2 > &  gpPos,
int  gpIndex,
const Geometry geo,
const auto &  uFunction 
) const
inlineprotected
Parameters
gpPosThe position of the integration point.
gpIndexThe index of the integration point.
geoThe geometry object providing position and derivatives.
uFunctionThe function representing the displacement field.
Returns
A tuple containing the material tangent, membrane strain, bending, Jacobian matrix of the reference position, Jacobian matrix of the current position, Hessian matrix of the current position, Hessian matrix of the reference position, normal vector, and normalized normal vector at the given integration point.
Here is the caller graph for this function:

◆ displacementFunction()

template<typename PreFE , typename FE >
template<typename ST = double>
auto Ikarus::KirchhoffLoveShell< PreFE, FE >::displacementFunction ( const Requirement par,
const std::optional< std::reference_wrapper< const Eigen::VectorX< ST > > > &  dx = std::nullopt 
) const
inline

Retrieves the displacement function and nodal displacements based on the given FERequirements.

Template Parameters
STThe scalar type used for calculations.
Parameters
parThe FERequirements.
dxOptional additional displacement vector.
Returns
The displacement function.
Here is the caller graph for this function:

◆ geometry()

template<typename PreFE , typename FE >
Geometry Ikarus::KirchhoffLoveShell< PreFE, FE >::geometry ( ) const
inline
Here is the caller graph for this function:

◆ kgBending()

template<typename PreFE , typename FE >
template<typename ST >
Eigen::Matrix< ST, 3, 3 > Ikarus::KirchhoffLoveShell< PreFE, FE >::kgBending ( const Eigen::Matrix< ST, 2, 3 > &  jcur,
const Eigen::Matrix3< ST > &  h,
const auto &  dN,
const auto &  ddN,
const Eigen::Vector3< ST > &  a3N,
const Eigen::Vector3< ST > &  a3,
const Eigen::Vector3< ST > &  S,
int  I,
int  J 
) const
inlineprotected
Here is the caller graph for this function:

◆ materialTangent()

template<typename PreFE , typename FE >
Eigen::Matrix< double, 3, 3 > Ikarus::KirchhoffLoveShell< PreFE, FE >::materialTangent ( const Eigen::Matrix< double, 3, 3 > &  Aconv) const
inlineprotected
Parameters
AconvA tensor to get the material tangent in the curvilinear coordinate system.
Returns
The material tangent matrix.
Here is the caller graph for this function:

◆ numberOfNodes()

template<typename PreFE , typename FE >
size_t Ikarus::KirchhoffLoveShell< PreFE, FE >::numberOfNodes ( ) const
inline

◆ order()

template<typename PreFE , typename FE >
int Ikarus::KirchhoffLoveShell< PreFE, FE >::order ( ) const
inline

◆ supportsResultType()

static consteval bool Ikarus::ResultTypeBase< ResultTypes >::supportsResultType ( )
inlinestaticinherited
Template Parameters
RTrequested ResultType

Member Data Documentation

◆ bendingStrainSize

template<typename PreFE , typename FE >
constexpr int Ikarus::KirchhoffLoveShell< PreFE, FE >::bendingStrainSize = 3
staticconstexpr

◆ membraneStrainSize

template<typename PreFE , typename FE >
constexpr int Ikarus::KirchhoffLoveShell< PreFE, FE >::membraneStrainSize = 3
staticconstexpr

◆ myDim

template<typename PreFE , typename FE >
constexpr int Ikarus::KirchhoffLoveShell< PreFE, FE >::myDim = Traits::mydim
staticconstexpr

◆ worldDim

template<typename PreFE , typename FE >
constexpr int Ikarus::KirchhoffLoveShell< PreFE, FE >::worldDim = Traits::worlddim
staticconstexpr

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