v0.16.0
Loading...
Searching...
No Matches
Classes | Namespaces
Templates.hpp File Reference

Templates declarations. More...

Go to the source code of this file.

Classes

struct  MoFEM::DataLayoutTraits< DataLayout::GaussByCoeffs >
 
struct  MoFEM::DataLayoutTraits< DataLayout::CoeffsByGauss >
 
struct  MoFEM::KeyFromKey< KeyExtractor1, KeyExtractor2 >
 
struct  MoFEM::LtBit< id_type >
 
struct  MoFEM::EqBit< id_type >
 
struct  MoFEM::HashBit< id_type >
 
struct  MoFEM::GetFTensor0FromVecImpl< S, V >
 
struct  MoFEM::GetFTensor0FromMatImpl< S, M >
 
struct  MoFEM::GetFTensor1FromMatImpl< Tensor_Dim, S, DataLayoutTraits< DataLayout::GaussByCoeffs >, M >
 
struct  MoFEM::GetFTensor1FromMatImpl< 3, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor1FromMatImpl< 4, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor1FromMatImpl< 6, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor1FromMatImpl< 9, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor1FromMatImpl< 2, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor1FromMatImpl< 1, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor2FromMatImpl< Tensor_Dim1, Tensor_Dim2, S, DL, M >
 
struct  MoFEM::GetFTensor2FromArrayImpl< 2, 2, S, M >
 
struct  MoFEM::GetFTensor2FromArrayImpl< 3, 3, S, M >
 
struct  MoFEM::GetFTensor2FromArrayRawPtrImpl< 2, 2, M >
 
struct  MoFEM::GetFTensor2FromArrayRawPtrImpl< 3, 3, M >
 
struct  MoFEM::GetFTensor2SymmetricFromMatImpl< Tensor_Dim, S, DL, M >
 
struct  MoFEM::GetFTensor2SymmetricFromMatImpl< Tensor_Dim, S, DataLayoutTraits< DataLayout::GaussByCoeffs >, M >
 
struct  MoFEM::GetFTensor2SymmetricFromMatImpl< 3, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor2SymmetricFromMatImpl< 2, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor3FromMatImpl< Tensor_Dim0, Tensor_Dim1, Tensor_Dim2, S, DataLayoutTraits< DataLayout::GaussByCoeffs >, M >
 
struct  MoFEM::GetFTensor3FromMatImpl< Tensor_Dim0, Tensor_Dim1, Tensor_Dim2, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor3DgFromMatImpl< Tensor_Dim01, Tensor_Dim2, S, DL, M >
 
struct  MoFEM::GetFTensor3DgFromMatImpl< Tensor_Dim01, Tensor_Dim2, S, DataLayoutTraits< DataLayout::GaussByCoeffs >, M >
 
struct  MoFEM::GetFTensor3DgFromMatImpl< 1, 1, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor3DgFromMatImpl< 2, 2, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor3DgFromMatImpl< 3, 3, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor4FromMatImpl< Tensor_Dim0, Tensor_Dim1, Tensor_Dim2, Tensor_Dim3, S, DL, M >
 
struct  MoFEM::GetFTensor4DdgFromMatImpl< Tensor_Dim01, Tensor_Dim23, S, DL, M >
 
struct  MoFEM::GetFTensor4DdgFromMatImpl< Tensor_Dim01, Tensor_Dim23, S, DataLayoutTraits< DataLayout::GaussByCoeffs >, M >
 
struct  MoFEM::GetFTensor4DdgFromMatImpl< 1, 1, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor4DdgFromMatImpl< 2, 2, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::GetFTensor4DdgFromMatImpl< 3, 3, S, DataLayoutTraits< DataLayout::CoeffsByGauss >, M >
 
struct  MoFEM::MatrixSizeHelper< FTensor::Tensor1< FTensor::CursorPtr< T *, S >, Tensor_Dim >, DataLayoutTraits< DataLayout::GaussByCoeffs > >
 
struct  MoFEM::MatrixSizeHelper< FTensor::Tensor2< FTensor::CursorPtr< T *, S >, Tensor_Dim0, Tensor_Dim1 >, DataLayoutTraits< DataLayout::GaussByCoeffs > >
 
struct  MoFEM::MatrixSizeHelper< FTensor::Tensor2_symmetric< FTensor::CursorPtr< T *, S >, Tensor_Dim >, DataLayoutTraits< DataLayout::GaussByCoeffs > >
 
struct  MoFEM::MatrixSizeHelper< FTensor::Tensor3< FTensor::CursorPtr< T *, S >, Tensor_Dim0, Tensor_Dim1, Tensor_Dim2 >, DataLayoutTraits< DataLayout::GaussByCoeffs > >
 
struct  MoFEM::MatrixSizeHelper< FTensor::Dg< FTensor::CursorPtr< T *, S >, Tensor_Dim01, Tensor_Dim2 >, DataLayoutTraits< DataLayout::GaussByCoeffs > >
 
struct  MoFEM::MatrixSizeHelper< FTensor::Tensor4< FTensor::CursorPtr< T *, S >, Tensor_Dim0, Tensor_Dim1, Tensor_Dim2, Tensor_Dim3 >, DataLayoutTraits< DataLayout::GaussByCoeffs > >
 
struct  MoFEM::MatrixSizeHelper< FTensor::Ddg< FTensor::CursorPtr< T *, S >, Tensor_Dim01, Tensor_Dim23 >, DataLayoutTraits< DataLayout::GaussByCoeffs > >
 
struct  MoFEM::DeterminantTensorImpl< T, 3 >
 
struct  MoFEM::DeterminantTensorImpl< T, 2 >
 
struct  MoFEM::InvertTensorImpl< T1, T2, T3, 3 >
 
struct  MoFEM::InvertTensorImpl< T1, T2, T3, 2 >
 
struct  MoFEM::RefEntExtractor
 Extract entity handle form multi-index container. More...
 
struct  MoFEM::Modify_change_nothing
 Do nothing, used to rebuild database. More...
 
struct  MoFEM::TempMeshset
 

Namespaces

namespace  MoFEM
 implementation of Data Operators for Forces and Sources
 

Enumerations

Data layout helpers

Traits describing tensor storage layout conventions.

enum class  MoFEM::DataLayout { MoFEM::GaussByCoeffs , MoFEM::CoeffsByGauss }
 

Functions

Adaptor functions

Views that wrap raw storage as vector or matrix adaptors.

template<typename T1 >
auto MoFEM::getVectorAdaptor (T1 ptr, const size_t n)
 Get Vector adaptor.
 
template<typename T1 >
auto MoFEM::getMatrixAdaptor (T1 ptr, const size_t n, const size_t m)
 Get Matrix adaptor.
 
Generic utility helpers

Shared template utilities used across the header.

template<class X >
std::string MoFEM::toString (X x)
 
Tensor0 functions

Scalar tensor access helpers.

template<int S = 1, class V >
static auto MoFEM::getFTensor0FromVec (V &data)
 Get tensor rank 0 (scalar) form data vector.
 
template<int S = 1, class M >
auto MoFEM::getFTensor0FromMat (M &data)
 Get tensor rank 0 (scalar) form data vector.
 
template<int S = 1, class T , class A >
auto MoFEM::getFTensor0FromMat (boost::weak_ptr< MatrixDouble > data_ptr)
 
template<int S = 1>
auto MoFEM::getFTensor0FromMat (boost::shared_ptr< MatrixDouble > data_ptr)
 
template<int S = 1, class T >
static auto MoFEM::getFTensor0FromPtr (T *ptr)
 Get tensor rank 0 (scalar) from pointer.
 
Voigt notation helpers

Conversions between tensor views and Voigt-like storage.

template<int DIM, typename T >
auto MoFEM::getVoigtVec (T &t_mat)
 
template<int DIM, typename T >
auto MoFEM::getVoigtVecSymm (T &t_mat)
 
template<typename T >
auto MoFEM::getVoigtVecAxisymm (T &t_mat, const double hoop_term)
 
template<typename T >
auto MoFEM::getVoigtVecSymmAxisymm (T &t_mat, const double hoop_term)
 
Linear algebra helpers

LAPACK-backed matrix and eigenvalue utilities.

MoFEMErrorCode MoFEM::computeMatrixInverse (MatrixDouble &mat)
 compute matrix inverse with lapack dgetri
 
MoFEMErrorCode MoFEM::solveLinearSystem (MatrixDouble &mat, VectorDouble &f)
 solve linear system with lapack dgesv
 
MoFEMErrorCode MoFEM::solveLinearSystem (const MatrixDouble &mat, VectorDouble &f)
 Solve linear system of equations using Lapack.
 
MoFEMErrorCode MoFEM::computeEigenValuesSymmetric (const MatrixDouble &mat, VectorDouble &eig, MatrixDouble &eigen_vec)
 compute eigenvalues of a symmetric matrix using lapack dsyev
 
template<int DIM, typename T1 , typename T2 >
MoFEMErrorCode MoFEM::computeEigenValuesSymmetric (FTensor::Tensor2< T1, DIM, DIM > &eigen_vec, FTensor::Tensor1< T2, DIM > &eig)
 compute eigenvalues of a symmetric matrix using lapack dsyev
 
template<int DIM, typename T1 , typename T2 , typename T3 >
MoFEMErrorCode MoFEM::computeEigenValuesSymmetric (const FTensor::Tensor2_symmetric< T1, DIM > &mat, FTensor::Tensor1< T2, DIM > &eig, FTensor::Tensor2< T3, DIM, DIM > &eigen_vec)
 compute eigenvalues of a symmetric tensor using lapack dsyev
 
Tensor algebra helpers

Determinant and inverse routines for tensor-valued objects.

template<typename T >
static auto MoFEM::determinantTensor3by3 (T &t)
 Calculate the determinant of a 3x3 matrix or a tensor of rank 2.
 
template<typename T >
static auto MoFEM::determinantTensor2by2 (T &t)
 Calculate the determinant of a 2x2 matrix or a tensor of rank 2.
 
template<typename T , int DIM>
static auto MoFEM::determinantTensor (FTensor::Tensor2< T, DIM, DIM > &t)
 Calculate the determinant of a tensor of rank DIM.
 
template<typename T , int DIM>
static auto MoFEM::determinantTensor (FTensor::Tensor2_symmetric< T, DIM > &t)
 Calculate the determinant of a tensor of rank DIM.
 
template<int Tensor_Dim, class T , class L , class A >
MoFEMErrorCode MoFEM::invertTensor3by3 (ublas::matrix< T, L, A > &jac_data, ublas::vector< T, A > &det_data, ublas::matrix< T, L, A > &inv_jac_data)
 Calculate inverse of tensor rank 2 at integration points.
 
template<>
MoFEMErrorCode MoFEM::invertTensor3by3< 3, double, ublas::row_major, DoubleAllocator > (MatrixDouble &jac_data, VectorDouble &det_data, MatrixDouble &inv_jac_data)
 
template<class T1 , class T2 >
MoFEMErrorCode MoFEM::determinantTensor3by3 (T1 &t, T2 &det)
 Calculate determinant 3 by 3.
 
template<class T1 , class T2 >
MoFEMErrorCode MoFEM::determinantTensor2by2 (T1 &t, T2 &det)
 Calculate determinant 2 by 2.
 
template<class T1 , class T2 , class T3 >
MoFEMErrorCode MoFEM::invertTensor3by3 (T1 &t, T2 &det, T3 &inv_t)
 Calculate matrix inverse 3 by 3.
 
template<class T1 , class T2 , class T3 >
MoFEMErrorCode MoFEM::invertTensor2by2 (T1 &t, T2 &det, T3 &inv_t)
 Calculate matrix inverse 2 by 2.
 
template<typename T1 , typename T2 , typename T3 >
MoFEMErrorCode MoFEM::invertTensor3by3 (FTensor::Tensor2_symmetric< T1, 3 > &t, T2 &det, FTensor::Tensor2_symmetric< T3, 3 > &inv_t)
 Calculate matrix inverse, overload for symmetric tensor.
 
template<typename T1 , typename T2 , typename T3 >
MoFEMErrorCode MoFEM::invertTensor2by2 (FTensor::Tensor2_symmetric< T1, 2 > &t, T2 &det, FTensor::Tensor2_symmetric< T3, 2 > &inv_t)
 Calculate matrix inverse, overload for symmetric tensor.
 
template<typename T1 , typename T2 , typename T3 , int DIM>
static MoFEMErrorCode MoFEM::invertTensor (FTensor::Tensor2< T1, DIM, DIM > &t, T2 &det, FTensor::Tensor2< T3, DIM, DIM > &inv_t)
 
template<typename T1 , typename T2 , typename T3 , int DIM>
static MoFEMErrorCode MoFEM::invertTensor (FTensor::Tensor2_symmetric< T1, DIM > &t, T2 &det, FTensor::Tensor2_symmetric< T3, DIM > &inv_t)
 
Mesh and range helpers

Utility types and helpers for mesh entities, ranges, and handles.

template<typename Extractor , typename Iterator >
moab::Range::iterator MoFEM::insertOrdered (Range &r, Extractor, Iterator begin_iter, Iterator end_iter)
 Insert ordered mofem multi-index into range.
 
template<typename MI , typename MO = Modify_change_nothing>
MoFEMErrorCode MoFEM::reconstructMultiIndex (const MI &mi, MO &&mo=Modify_change_nothing())
 Template used to reconstruct multi-index.
 
auto MoFEM::get_temp_meshset_ptr (moab::Interface &moab)
 Create smart pointer to temporary meshset.
 
auto MoFEM::id_from_handle (const EntityHandle h)
 
auto MoFEM::type_from_handle (const EntityHandle h)
 get type from entity handle
 
auto MoFEM::ent_form_type_and_id (const EntityType type, const EntityID id)
 get entity handle from type and id
 
auto MoFEM::dimension_from_handle (const EntityHandle h)
 get entity dimension form handle
 
auto MoFEM::type_name_from_handle (const EntityHandle h)
 get entity type name from handle
 
auto MoFEM::field_bit_from_bit_number (const int bit_number)
 get field bit id from bit number
 
template<typename I >
auto MoFEM::rangeInserter (const I f, const I s, boost::function< bool(I it)> tester, boost::function< MoFEMErrorCode(I f, I s)> inserter)
 Insert ranges.
 
template<typename Dest = void, typename... Arg>
constexpr auto MoFEM::make_array (Arg &&...arg)
 Create Array.
 

FTensor index aliases

Convenient aliases for commonly used FTensor indices.

#define FTENSOR_INDEX(DIM, I)   I##_FTIndex<DIM> I;
 
#define FTENSOR_INDEX_DECL(r, DIM, I)   FTENSOR_INDEX(DIM, I)
 
#define FTENSOR_INDEXES(DIM, ...)
 
template<int DIM>
using MoFEM::i_FTIndex = FTensor::Index< 'i', DIM >
 
template<int DIM>
using MoFEM::j_FTIndex = FTensor::Index< 'j', DIM >
 
template<int DIM>
using MoFEM::k_FTIndex = FTensor::Index< 'k', DIM >
 
template<int DIM>
using MoFEM::l_FTIndex = FTensor::Index< 'l', DIM >
 
template<int DIM>
using MoFEM::m_FTIndex = FTensor::Index< 'm', DIM >
 
template<int DIM>
using MoFEM::n_FTIndex = FTensor::Index< 'n', DIM >
 
template<int DIM>
using MoFEM::o_FTIndex = FTensor::Index< 'o', DIM >
 
template<int DIM>
using MoFEM::p_FTIndex = FTensor::Index< 'p', DIM >
 
template<int DIM>
using MoFEM::x_FTIndex = FTensor::Index< 'x', DIM >
 
template<int DIM>
using MoFEM::y_FTIndex = FTensor::Index< 'y', DIM >
 
template<int DIM>
using MoFEM::I_FTIndex = FTensor::Index< 'I', DIM >
 
template<int DIM>
using MoFEM::J_FTIndex = FTensor::Index< 'J', DIM >
 
template<int DIM>
using MoFEM::K_FTIndex = FTensor::Index< 'K', DIM >
 
template<int DIM>
using MoFEM::L_FTIndex = FTensor::Index< 'L', DIM >
 
template<int DIM>
using MoFEM::M_FTIndex = FTensor::Index< 'M', DIM >
 
template<int DIM>
using MoFEM::N_FTIndex = FTensor::Index< 'N', DIM >
 
template<int DIM>
using MoFEM::O_FTIndex = FTensor::Index< 'O', DIM >
 
template<int DIM>
using MoFEM::Z_FTIndex = FTensor::Index< 'Z', DIM >
 
template<int DIM>
using MoFEM::Y_FTIndex = FTensor::Index< 'Y', DIM >
 

Tensor1 functions

Rank-1 tensor construction helpers.

template<int Tensor_Dim, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
using MoFEM::GetFTensor1FromMatType = decltype(GetFTensor1FromMatImpl< Tensor_Dim, S, DL, M >::get(std::declval< M & >(), 0, 0))
 
template<int Tensor_Dim, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
auto MoFEM::getFTensor1FromMat (M &data, int rr=0, int cc=0)
 Get tensor rank 1 (vector) form data matrix.
 
template<int Tensor_Dim, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
auto MoFEM::getFTensor1FromMat (boost::weak_ptr< MatrixDouble > data, int rr=0, int cc=0)
 
template<int Tensor_Dim, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
auto MoFEM::getFTensor1FromMat (boost::shared_ptr< MatrixDouble > data, int rr=0, int cc=0)
 
template<int Tensor_Dim, int S = Tensor_Dim, typename T = double>
auto MoFEM::getFTensor1FromPtr (T *ptr)
 
template<int Tensor_Dim, int S = Tensor_Dim>
auto MoFEM::getFTensor1FromPtr (std::complex< double > *ptr)
 
template<int Tensor_Dim, int S = Tensor_Dim>
auto MoFEM::getFTensor1FromPtr (adouble *ptr)
 
template<int Tensor_Dim, int S = Tensor_Dim, typename T = VectorDouble>
auto MoFEM::getFTensor1FromArray (T &data)
 
template<int DIM, int S>
auto MoFEM::getFTensor1FromArrayDiag (MatrixDouble &data, const size_t rr)
 Get FTensor1 from array.
 
template<>
auto MoFEM::getFTensor1FromArrayDiag< 2, 2 > (MatrixDouble &data, const size_t rr)
 
template<>
auto MoFEM::getFTensor1FromArrayDiag< 3, 3 > (MatrixDouble &data, const size_t rr)
 

Tensor2 functions

Rank-2 tensor construction and array helper routines.

template<int Tensor_Dim0, int Tensor_Dim1, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
using MoFEM::GetFTensor2FromMatType = decltype(GetFTensor2FromMatImpl< Tensor_Dim0, Tensor_Dim1, S, DL, M >::get(std::declval< M & >(), 0, 0))
 
template<int Tensor_Dim1, int Tensor_Dim2, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
auto MoFEM::getFTensor2FromMat (M &data)
 Get tensor rank 2 (matrix) form data matrix.
 
template<int Tensor_Dim1, int Tensor_Dim2, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
auto MoFEM::getFTensor2FromMat (boost::weak_ptr< MatrixDouble > data_ptr)
 Get tensor rank 2 (matrix) form data matrix.
 
template<int Tensor_Dim1, int Tensor_Dim2, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
auto MoFEM::getFTensor2FromMat (boost::shared_ptr< MatrixDouble > data_ptr)
 Get tensor rank 2 (matrix) form data matrix.
 
template<int Tensor_Dim1, int Tensor_Dim2, int S = -1>
auto MoFEM::getFTensor2FromVec (VectorDouble &data)
 
template<int Tensor_Dim1, int Tensor_Dim2, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
auto MoFEM::getFTensor2FromPtr (double *ptr)
 
template<int Tensor_Dim1, int Tensor_Dim2, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
auto MoFEM::getFTensor2FromPtr (std::complex< double > *ptr)
 
template<int DIM1, int DIM2>
auto MoFEM::getFTensor2HVecFromPtr (double *ptr)
 Make Tensor2 for HVec base from pointer.
 
template<>
auto MoFEM::getFTensor2HVecFromPtr< 3, 2 > (double *ptr)
 
template<>
auto MoFEM::getFTensor2HVecFromPtr< 3, 3 > (double *ptr)
 
template<int DIM1, int DIM2, int S>
auto MoFEM::getFTensor2FromArray (MatrixDouble &data, const size_t rr, const size_t cc=0)
 
template<int DIM1, int DIM2>
auto MoFEM::getFTensor2FromArray (MatrixDouble &data, const size_t rr, const size_t cc, const int ss)
 
template<int DIM1, int DIM2, int S>
auto MoFEM::getFTensor2FromArray (MatrixADouble &data, const size_t rr)
 

Tensor2_symmetric functions

Symmetric rank-2 tensor construction and conversion helpers.

template<int Tensor_Dim, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
using MoFEM::GetFTensor2SymmetricFromMatType = decltype(GetFTensor2SymmetricFromMatImpl< Tensor_Dim, S, DL, M >::get(std::declval< M & >(), 0, 0))
 
template<int Tensor_Dim, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
static auto MoFEM::getFTensor2SymmetricFromMat (M &data)
 Get symmetric tensor rank 2 (matrix) form data matrix.
 
template<int Tensor_Dim, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
static auto MoFEM::getFTensor2SymmetricFromMat (boost::weak_ptr< MatrixDouble > data_ptr)
 
template<int Tensor_Dim, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
static auto MoFEM::getFTensor2SymmetricFromMat (boost::shared_ptr< MatrixDouble > data_ptr)
 
template<int Tensor_Dim>
auto MoFEM::getFTensor2SymmetricFromPtr (double *ptr)
 
template<int Tensor_Dim>
auto MoFEM::getFTensor2SymmetricFromPtr (adouble *ptr)
 
template<int DIM>
auto MoFEM::getFTensor2SymmetricLowerFromPtr (double *ptr)
 Make symmetric Tensor2 from pointer, taking lower triangle of matrix.
 
template<>
auto MoFEM::getFTensor2SymmetricLowerFromPtr< 3 > (double *ptr)
 
template<>
auto MoFEM::getFTensor2SymmetricLowerFromPtr< 2 > (double *ptr)
 
template<int DIM, class T >
auto MoFEM::to_non_symm (const FTensor::Tensor2_symmetric< T, DIM > &symm)
 

Tensor3 functions

Rank-3 tensor construction helpers.

template<int Tensor_Dim0, int Tensor_Dim1, int Tensor_Dim2, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
using MoFEM::GetFTensor3FromMatType = decltype(GetFTensor3FromMatImpl< Tensor_Dim0, Tensor_Dim1, Tensor_Dim2, S, DL, M >::get(std::declval< M & >(), 0, 0))
 
template<int Tensor_Dim0, int Tensor_Dim1, int Tensor_Dim2, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
static auto MoFEM::getFTensor3FromMat (M &data, int rr=0, int cc=0)
 Get tensor rank 3 (non symmetries) form data matrix.
 
template<int Tensor_Dim0, int Tensor_Dim1, int Tensor_Dim2, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
static auto MoFEM::getFTensor3FromMat (boost::weak_ptr< MatrixDouble > data_ptr, int rr=0, int cc=0)
 
template<int Tensor_Dim0, int Tensor_Dim1, int Tensor_Dim2, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
static auto MoFEM::getFTensor3FromMat (boost::shared_ptr< MatrixDouble > data_ptr, int rr=0, int cc=0)
 
template<int DIM1, int DIM2, int DIM3>
FTensor::Tensor3< FTensor::PackPtr< double *, DIM1 *DIM2 *DIM3 >, DIM1, DIM2, DIM3 > MoFEM::getFTensor3FromPtr (double *ptr)
 
template<>
FTensor::Tensor3< FTensor::PackPtr< double *, 12 >, 3, 2, 2 > MoFEM::getFTensor3FromPtr< 3, 2, 2 > (double *ptr)
 
template<>
FTensor::Tensor3< FTensor::PackPtr< double *, 27 >, 3, 3, 3 > MoFEM::getFTensor3FromPtr< 3, 3, 3 > (double *ptr)
 

Dg functions

Helpers for third-order tensors symmetric in the first two indices.

template<int Tensor_Dim01, int Tensor_Dim2, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
using MoFEM::GetFTensor3DgFromMatType = decltype(GetFTensor3DgFromMatImpl< Tensor_Dim01, Tensor_Dim2, S, DL, M >::get(std::declval< M & >(), 0, 0))
 
template<int Tensor_Dim01, int Tensor_Dim2, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
static auto MoFEM::getFTensor3DgFromMat (M &data)
 Get symmetric tensor rank 3 on the first two indices from form data matrix.
 
template<int Tensor_Dim01, int Tensor_Dim2, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
static auto MoFEM::getFTensor3DgFromMat (boost::weak_ptr< MatrixDouble > data_ptr)
 
template<int Tensor_Dim01, int Tensor_Dim2, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
static auto MoFEM::getFTensor3DgFromMat (boost::shared_ptr< MatrixDouble > data_ptr)
 
template<int Tensor_Dim01, int Tensor_Dim2, int S, class T = double>
static auto MoFEM::getFTensor3DgFromPtr (T *ptr)
 

Tensor4 functions

Rank-4 tensor construction helpers.

template<int Tensor_Dim0, int Tensor_Dim1, int Tensor_Dim2, int Tensor_Dim3, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
using MoFEM::GetFTensor4FromMatType = decltype(GetFTensor4FromMatImpl< Tensor_Dim0, Tensor_Dim1, Tensor_Dim2, Tensor_Dim3, S, DL, M >::get(std::declval< M & >(), 0, 0))
 
template<class T , int Tensor_Dim0, int Tensor_Dim1, int Tensor_Dim2, int Tensor_Dim3, int S, std::size_t... Is>
static auto MoFEM::makeFTensor4FromPtrArray (const std::array< T *, Tensor_Dim0 *Tensor_Dim1 *Tensor_Dim2 *Tensor_Dim3 > &ptrs, std::index_sequence< Is... >)
 
template<int Tensor_Dim0, int Tensor_Dim1, int Tensor_Dim2, int Tensor_Dim3, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
static auto MoFEM::getFTensor4FromMat (M &data)
 Get tensor rank 4 (non symmetric) form data matrix.
 
template<int Tensor_Dim0, int Tensor_Dim1, int Tensor_Dim2, int Tensor_Dim3, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
static auto MoFEM::getFTensor4FromMat (boost::weak_ptr< MatrixDouble > data_ptr)
 
template<int Tensor_Dim0, int Tensor_Dim1, int Tensor_Dim2, int Tensor_Dim3, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
static auto MoFEM::getFTensor4FromMat (boost::shared_ptr< MatrixDouble > data_ptr)
 
template<int DIM1, int DIM2, int DIM3, int DIM4, int S = -1, class T = double>
auto MoFEM::getFTensor4FromPtr (T *ptr)
 

Ddg functions

Helpers for fourth-order tensors symmetric in index pairs.

template<int Tensor_Dim01, int Tensor_Dim23, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
using MoFEM::GetFTensor4DdgFromMatType = decltype(GetFTensor4DdgFromMatImpl< Tensor_Dim01, Tensor_Dim23, S, DL, M >::get(std::declval< M & >(), 0, 0))
 
template<int Tensor_Dim01, int Tensor_Dim23, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>, class M = MatrixDouble>
static auto MoFEM::getFTensor4DdgFromMat (M &data)
 Get symmetric tensor rank 4 on first two and last indices from form data matrix.
 
template<int Tensor_Dim01, int Tensor_Dim23, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
static auto MoFEM::getFTensor4DdgFromMat (boost::weak_ptr< MatrixDouble > data)
 
template<int Tensor_Dim01, int Tensor_Dim23, int S = -1, class DL = DataLayoutTraits<DataLayout::GaussByCoeffs>>
static auto MoFEM::getFTensor4DdgFromMat (boost::shared_ptr< MatrixDouble > data_ptr)
 
template<int Tensor_Dim01, int Tensor_Dim23, int S, class T = double>
static auto MoFEM::getFTensor4DdgFromPtr (T *ptr)
 

Detailed Description

Templates declarations.

Definition in file Templates.hpp.

Macro Definition Documentation

◆ FTENSOR_INDEX

#define FTENSOR_INDEX (   DIM,
  I 
)    I##_FTIndex<DIM> I;

◆ FTENSOR_INDEX_DECL

#define FTENSOR_INDEX_DECL (   r,
  DIM,
  I 
)    FTENSOR_INDEX(DIM, I)

Definition at line 2563 of file Templates.hpp.

◆ FTENSOR_INDEXES

#define FTENSOR_INDEXES (   DIM,
  ... 
)
Value:
BOOST_PP_SEQ_FOR_EACH(FTENSOR_INDEX_DECL, DIM, \
BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))
#define FTENSOR_INDEX_DECL(r, DIM, I)

Definition at line 2565 of file Templates.hpp.