v0.14.0
Public Member Functions | Private Attributes | List of all members
MoFEM::OpCalculateHVecTensorTrace< Tensor_Dim, OpBase > Struct Template Reference

Calculate trace of vector (Hdiv/Hcurl) space. More...

#include <src/finite_elements/UserDataOperators.hpp>

Inheritance diagram for MoFEM::OpCalculateHVecTensorTrace< Tensor_Dim, OpBase >:
[legend]
Collaboration diagram for MoFEM::OpCalculateHVecTensorTrace< Tensor_Dim, OpBase >:
[legend]

Public Member Functions

 OpCalculateHVecTensorTrace (const std::string field_name, boost::shared_ptr< MatrixDouble > data_ptr, const EntityType zero_type=MBEDGE, const int zero_side=0)
 
MoFEMErrorCode doWork (int side, EntityType type, EntitiesFieldData::EntData &data)
 
- Public Member Functions inherited from MoFEM::OpBaseImpl< A, EleOp >
 OpBaseImpl (const std::string row_field_name, const std::string col_field_name, const OpType type, boost::shared_ptr< Range > ents_ptr=nullptr)
 
MoFEMErrorCode doWork (int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data)
 Do calculations for the left hand side. More...
 
MoFEMErrorCode doWork (int row_side, EntityType row_type, EntData &row_data)
 Do calculations for the right hand side. More...
 

Private Attributes

boost::shared_ptr< MatrixDoubledataPtr
 
const EntityHandle zeroType
 
const int zeroSide
 
FTensor::Index< 'i', Tensor_Dim > i
 
FTensor::Index< 'j', Tensor_Dim > j
 

Additional Inherited Members

- Public Types inherited from MoFEM::OpBaseImpl< A, EleOp >
using OpType = typename EleOp::OpType
 
using EntData = EntitiesFieldData::EntData
 
using MatSetValuesHook = boost::function< MoFEMErrorCode(ForcesAndSourcesCore::UserDataOperator *op_ptr, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, MatrixDouble &m)>
 
- Public Attributes inherited from MoFEM::OpBaseImpl< A, EleOp >
TimeFun timeScalingFun
 assumes that time variable is set More...
 
FEFun feScalingFun
 assumes that time variable is set More...
 
boost::shared_ptr< RangeentsPtr
 Entities on which element is run. More...
 
- Static Public Attributes inherited from MoFEM::OpBaseImpl< A, EleOp >
static MatSetValuesHook matSetValuesHook
 
- Protected Member Functions inherited from MoFEM::OpBaseImpl< A, EleOp >
template<int DIM>
FTensor::Tensor1< FTensor::PackPtr< double *, DIM >, DIM > getNf ()
 
template<int DIM>
FTensor::Tensor2< FTensor::PackPtr< double *, DIM >, DIM, DIM > getLocMat (const int rr)
 
virtual MoFEMErrorCode iNtegrate (EntData &row_data, EntData &col_data)
 Integrate grad-grad operator. More...
 
virtual MoFEMErrorCode aSsemble (EntData &row_data, EntData &col_data, const bool trans)
 
virtual MoFEMErrorCode iNtegrate (EntData &data)
 Class dedicated to integrate operator. More...
 
virtual MoFEMErrorCode aSsemble (EntData &data)
 
virtual size_t getNbOfBaseFunctions (EntitiesFieldData::EntData &data)
 Get number of base functions. More...
 
- Protected Attributes inherited from MoFEM::OpBaseImpl< A, EleOp >
int nbRows
 number of dofs on rows More...
 
int nbCols
 number if dof on column More...
 
int nbIntegrationPts
 number of integration points More...
 
int nbRowBaseFunctions
 number or row base functions More...
 
int rowSide
 row side number More...
 
int colSide
 column side number More...
 
EntityType rowType
 row type More...
 
EntityType colType
 column type More...
 
bool assembleTranspose
 
bool onlyTranspose
 
MatrixDouble locMat
 local entity block matrix More...
 
MatrixDouble locMatTranspose
 local entity block matrix More...
 
VectorDouble locF
 local entity vector More...
 

Detailed Description

template<int Tensor_Dim, typename OpBase>
struct MoFEM::OpCalculateHVecTensorTrace< Tensor_Dim, OpBase >

Calculate trace of vector (Hdiv/Hcurl) space.

Template Parameters
Tensor_Dim
OpBase
Examples
EshelbianPlasticity.cpp, and tensor_divergence_operator.cpp.

Definition at line 2764 of file UserDataOperators.hpp.

Constructor & Destructor Documentation

◆ OpCalculateHVecTensorTrace()

template<int Tensor_Dim, typename OpBase >
MoFEM::OpCalculateHVecTensorTrace< Tensor_Dim, OpBase >::OpCalculateHVecTensorTrace ( const std::string  field_name,
boost::shared_ptr< MatrixDouble data_ptr,
const EntityType  zero_type = MBEDGE,
const int  zero_side = 0 
)
inline

Definition at line 2766 of file UserDataOperators.hpp.

2770  : OpBase(field_name, OpBase::OPROW), dataPtr(data_ptr),
2771  zeroType(zero_type), zeroSide(zero_side) {
2772  if (!dataPtr)
2773  THROW_MESSAGE("Pointer is not set");
2774  }

Member Function Documentation

◆ doWork()

template<int Tensor_Dim, typename OpBase >
MoFEMErrorCode MoFEM::OpCalculateHVecTensorTrace< Tensor_Dim, OpBase >::doWork ( int  side,
EntityType  type,
EntitiesFieldData::EntData data 
)
inline

Definition at line 2776 of file UserDataOperators.hpp.

2777  {
2779  const size_t nb_integration_points = OpBase::getGaussPts().size2();
2780  if (type == zeroType && side == 0) {
2781  dataPtr->resize(Tensor_Dim, nb_integration_points, false);
2782  dataPtr->clear();
2783  }
2784  const size_t nb_dofs = data.getFieldData().size();
2785  if (nb_dofs) {
2786  auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
2787  const size_t nb_base_functions = data.getN().size2() / 3;
2788  auto t_base = data.getFTensor1N<3>();
2789  auto t_data = getFTensor1FromMat<Tensor_Dim>(*dataPtr);
2790  for (size_t gg = 0; gg != nb_integration_points; ++gg) {
2791  FTensor::Tensor1<double, Tensor_Dim> t_normalized_normal;
2792  t_normalized_normal(j) = t_normal(j);
2793  t_normalized_normal.normalize();
2794  auto t_dof = data.getFTensor1FieldData<Tensor_Dim>();
2795  size_t bb = 0;
2796  for (; bb != nb_dofs / Tensor_Dim; ++bb) {
2797  t_data(i) += t_dof(i) * (t_base(j) * t_normalized_normal(j));
2798  ++t_base;
2799  ++t_dof;
2800  }
2801  for (; bb < nb_base_functions; ++bb) {
2802  ++t_base;
2803  }
2804  ++t_data;
2805  ++t_normal;
2806  }
2807  }
2809  }

Member Data Documentation

◆ dataPtr

template<int Tensor_Dim, typename OpBase >
boost::shared_ptr<MatrixDouble> MoFEM::OpCalculateHVecTensorTrace< Tensor_Dim, OpBase >::dataPtr
private

Definition at line 2812 of file UserDataOperators.hpp.

◆ i

template<int Tensor_Dim, typename OpBase >
FTensor::Index<'i', Tensor_Dim> MoFEM::OpCalculateHVecTensorTrace< Tensor_Dim, OpBase >::i
private

Definition at line 2815 of file UserDataOperators.hpp.

◆ j

template<int Tensor_Dim, typename OpBase >
FTensor::Index<'j', Tensor_Dim> MoFEM::OpCalculateHVecTensorTrace< Tensor_Dim, OpBase >::j
private

Definition at line 2816 of file UserDataOperators.hpp.

◆ zeroSide

template<int Tensor_Dim, typename OpBase >
const int MoFEM::OpCalculateHVecTensorTrace< Tensor_Dim, OpBase >::zeroSide
private

Definition at line 2814 of file UserDataOperators.hpp.

◆ zeroType

template<int Tensor_Dim, typename OpBase >
const EntityHandle MoFEM::OpCalculateHVecTensorTrace< Tensor_Dim, OpBase >::zeroType
private

Definition at line 2813 of file UserDataOperators.hpp.


The documentation for this struct was generated from the following file:
FTensor::Tensor1
Definition: Tensor1_value.hpp:8
OpBase
OpBaseImpl< PETSC, EdgeEleOp > OpBase
Definition: radiation.cpp:29
THROW_MESSAGE
#define THROW_MESSAGE(msg)
Throw MoFEM exception.
Definition: definitions.h:561
MoFEM::OpCalculateHVecTensorTrace::zeroSide
const int zeroSide
Definition: UserDataOperators.hpp:2814
MoFEM::OpCalculateHVecTensorTrace::zeroType
const EntityHandle zeroType
Definition: UserDataOperators.hpp:2813
MoFEM::OpCalculateHVecTensorTrace::i
FTensor::Index< 'i', Tensor_Dim > i
Definition: UserDataOperators.hpp:2815
MoFEM::OpCalculateHVecTensorTrace::dataPtr
boost::shared_ptr< MatrixDouble > dataPtr
Definition: UserDataOperators.hpp:2812
convert.type
type
Definition: convert.py:64
field_name
constexpr auto field_name
Definition: poisson_2d_homogeneous.cpp:13
FTensor::Tensor1::normalize
Tensor1< T, Tensor_Dim > normalize()
Definition: Tensor1_value.hpp:77
MoFEM::OpCalculateHVecTensorTrace::j
FTensor::Index< 'j', Tensor_Dim > j
Definition: UserDataOperators.hpp:2816
MoFEMFunctionReturn
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346