v0.14.0
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
MoFEM::OpNormalMixVecTimesScalarImpl< 2, GAUSS, OpBase > Struct Template Reference

#include <src/finite_elements/LinearFormsIntegratorsImpl.hpp>

Inheritance diagram for MoFEM::OpNormalMixVecTimesScalarImpl< 2, GAUSS, OpBase >:
[legend]
Collaboration diagram for MoFEM::OpNormalMixVecTimesScalarImpl< 2, GAUSS, OpBase >:
[legend]

Public Member Functions

 OpNormalMixVecTimesScalarImpl (const std::string field_name, ScalarFun source_fun=[](double, double, double) constexpr { return 1;}, boost::shared_ptr< Range > ents_ptr=nullptr)
 

Protected Member Functions

MoFEMErrorCode iNtegrate (EntitiesFieldData::EntData &data)
 

Protected Attributes

ScalarFun sourceFun
 
FTensor::Index< 'i', 3 > i
 

Detailed Description

template<typename OpBase>
struct MoFEM::OpNormalMixVecTimesScalarImpl< 2, GAUSS, OpBase >

Definition at line 410 of file LinearFormsIntegratorsImpl.hpp.

Constructor & Destructor Documentation

◆ OpNormalMixVecTimesScalarImpl()

template<typename OpBase >
MoFEM::OpNormalMixVecTimesScalarImpl< 2, GAUSS, OpBase >::OpNormalMixVecTimesScalarImpl ( const std::string  field_name,
ScalarFun  source_fun = [](doubledoubledouble) constexpr { return 1; },
boost::shared_ptr< Range ents_ptr = nullptr 
)
inline

Definition at line 411 of file LinearFormsIntegratorsImpl.hpp.

413  { return 1; },
414  boost::shared_ptr<Range> ents_ptr = nullptr)
415  : OpBase(field_name, field_name, OpBase::OPROW, ents_ptr),
416  sourceFun(source_fun) {}

Member Function Documentation

◆ iNtegrate()

template<typename OpBase >
MoFEMErrorCode MoFEM::OpNormalMixVecTimesScalarImpl< 2, GAUSS, OpBase >::iNtegrate ( EntitiesFieldData::EntData data)
protected

Definition at line 1081 of file LinearFormsIntegratorsImpl.hpp.

1082  {
1084 
1085  const size_t nb_base_functions = row_data.getN().size2() / 3;
1086  FTensor::Tensor1<double, 3> t_z{0., 0., 1.};
1087  // get element volume
1088  // get integration weights
1089  auto t_w = OpBase::getFTensor0IntegrationWeight();
1090  // get base function gradient on rows
1091  auto t_row_base = row_data.getFTensor1N<3>();
1092  // get coordinate at integration points
1093  auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1094  // get normal
1095  auto t_tangent = OpBase::getFTensor1TangentAtGaussPts();
1096  // loop over integration points
1097  for (int gg = 0; gg != OpBase::nbIntegrationPts; gg++) {
1098  // take into account Jacobian
1099  const double alpha = t_w * sourceFun(t_coords(0), t_coords(1), t_coords(2));
1100  FTensor::Tensor1<double, 3> t_normal;
1103  t_normal(i) = FTensor::levi_civita(i, j, k) * t_tangent(j) * t_z(k);
1104  int rr = 0;
1105  for (; rr != OpBase::nbRows; ++rr) {
1106  OpBase::locF[rr] += alpha * t_row_base(i) * t_normal(i);
1107  ++t_row_base;
1108  }
1109  for (; rr < nb_base_functions; ++rr)
1110  ++t_row_base;
1111  ++t_coords;
1112  ++t_tangent;
1113  ++t_w; // move to another integration weight
1114  }
1116 }

Member Data Documentation

◆ i

template<typename OpBase >
FTensor::Index<'i', 3> MoFEM::OpNormalMixVecTimesScalarImpl< 2, GAUSS, OpBase >::i
protected

Definition at line 420 of file LinearFormsIntegratorsImpl.hpp.

◆ sourceFun

template<typename OpBase >
ScalarFun MoFEM::OpNormalMixVecTimesScalarImpl< 2, GAUSS, OpBase >::sourceFun
protected

Definition at line 419 of file LinearFormsIntegratorsImpl.hpp.


The documentation for this struct was generated from the following file:
MoFEM::OpBaseImpl::nbIntegrationPts
int nbIntegrationPts
number of integration points
Definition: FormsIntegrators.hpp:238
FTensor::Tensor1< double, 3 >
MoFEM::OpNormalMixVecTimesScalarImpl< 2, GAUSS, OpBase >::i
FTensor::Index< 'i', 3 > i
Definition: LinearFormsIntegratorsImpl.hpp:420
OpBase
OpBaseImpl< PETSC, EdgeEleOp > OpBase
Definition: radiation.cpp:29
FTensor::levi_civita
constexpr std::enable_if<(Dim0<=2 &&Dim1<=2), Tensor2_Expr< Levi_Civita< T >, T, Dim0, Dim1, i, j > >::type levi_civita(const Index< i, Dim0 > &, const Index< j, Dim1 > &)
levi_civita functions to make for easy adhoc use
Definition: Levi_Civita.hpp:617
MoFEM::OpBaseImpl::locF
VectorDouble locF
local entity vector
Definition: FormsIntegrators.hpp:251
MoFEM::OpNormalMixVecTimesScalarImpl< 2, GAUSS, OpBase >::sourceFun
ScalarFun sourceFun
Definition: LinearFormsIntegratorsImpl.hpp:419
field_name
constexpr auto field_name
Definition: poisson_2d_homogeneous.cpp:13
FTensor::Index< 'j', 3 >
MoFEM::OpBaseImpl::nbRows
int nbRows
number of dofs on rows
Definition: FormsIntegrators.hpp:236
j
FTensor::Index< 'j', 3 > j
Definition: matrix_function.cpp:19
k
FTensor::Index< 'k', 3 > k
Definition: matrix_function.cpp:20
MoFEMFunctionReturn
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:429
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:359