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

#include <src/finite_elements/LinearFormsIntegratorsImpl.hpp>

Inheritance diagram for MoFEM::OpNormalMixVecTimesVectorFieldImpl< SPACE_DIM, GAUSS, OpBase >:
[legend]
Collaboration diagram for MoFEM::OpNormalMixVecTimesVectorFieldImpl< SPACE_DIM, GAUSS, OpBase >:
[legend]

Public Member Functions

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

Protected Member Functions

MoFEMErrorCode iNtegrate (EntitiesFieldData::EntData &data)
 

Protected Attributes

boost::shared_ptr< MatrixDoubleuPtr
 
ScalarFun betaCoeff
 

Detailed Description

template<int SPACE_DIM, typename OpBase>
struct MoFEM::OpNormalMixVecTimesVectorFieldImpl< SPACE_DIM, GAUSS, OpBase >

Definition at line 438 of file LinearFormsIntegratorsImpl.hpp.

Constructor & Destructor Documentation

◆ OpNormalMixVecTimesVectorFieldImpl()

template<int SPACE_DIM, typename OpBase >
MoFEM::OpNormalMixVecTimesVectorFieldImpl< SPACE_DIM, GAUSS, OpBase >::OpNormalMixVecTimesVectorFieldImpl ( const std::string  field_name,
boost::shared_ptr< MatrixDouble u_ptr,
ScalarFun  beta_coeff = [](doubledoubledouble) constexpr { return 1; },
boost::shared_ptr< Range ents_ptr = nullptr 
)
inline

Definition at line 440 of file LinearFormsIntegratorsImpl.hpp.

442  { return 1; },
443  boost::shared_ptr<Range> ents_ptr = nullptr)
444  : OpBase(field_name, field_name, OpBase::OPROW, ents_ptr), uPtr(u_ptr),
445  betaCoeff(beta_coeff) {}

Member Function Documentation

◆ iNtegrate()

template<int SPACE_DIM, typename OpBase >
MoFEMErrorCode MoFEM::OpNormalMixVecTimesVectorFieldImpl< SPACE_DIM, GAUSS, OpBase >::iNtegrate ( EntitiesFieldData::EntData data)
protected

Definition at line 1120 of file LinearFormsIntegratorsImpl.hpp.

1121  {
1125 
1126  const size_t nb_base_functions = row_data.getN().size2() / 3;
1127  // get element volume
1128  // get integration weights
1129  auto t_w = OpBase::getFTensor0IntegrationWeight();
1130  // get base function gradient on rows
1131  auto t_row_base = row_data.getFTensor1N<3>();
1132  // get coordinate at integration points
1133  auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1134  // get normal
1135  auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
1136  // get field
1137  auto t_u = getFTensor1FromMat<SPACE_DIM>(*uPtr);
1138  // loop over integration points
1139  auto a = OpBase::getMeasure();
1140  for (int gg = 0; gg != OpBase::nbIntegrationPts; gg++) {
1141  // take into account Jacobian
1142  auto l2 = std::sqrt(t_normal(i) * t_normal(i));
1143  const double alpha =
1144  t_w * betaCoeff(t_coords(0), t_coords(1), t_coords(2)) * (a / l2);
1145  // get rhs vector
1146  auto t_nf = OpBase::template getNf<SPACE_DIM>();
1147  // loop over rows base functions
1148  int rr = 0;
1149  for (; rr != OpBase::nbRows / SPACE_DIM; ++rr) {
1150  t_nf(J) += alpha * (t_row_base(i) * t_normal(i)) * t_u(J);
1151  ++t_row_base;
1152  ++t_nf;
1153  }
1154  for (; rr < nb_base_functions; ++rr)
1155  ++t_row_base;
1156  ++t_coords;
1157  ++t_w; // move to another integration weight
1158  ++t_normal;
1159  ++t_u;
1160  }
1162 }

Member Data Documentation

◆ betaCoeff

template<int SPACE_DIM, typename OpBase >
ScalarFun MoFEM::OpNormalMixVecTimesVectorFieldImpl< SPACE_DIM, GAUSS, OpBase >::betaCoeff
protected

Definition at line 449 of file LinearFormsIntegratorsImpl.hpp.

◆ uPtr

template<int SPACE_DIM, typename OpBase >
boost::shared_ptr<MatrixDouble> MoFEM::OpNormalMixVecTimesVectorFieldImpl< SPACE_DIM, GAUSS, OpBase >::uPtr
protected

Definition at line 448 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
MoFEM::OpNormalMixVecTimesVectorFieldImpl< SPACE_DIM, GAUSS, OpBase >::betaCoeff
ScalarFun betaCoeff
Definition: LinearFormsIntegratorsImpl.hpp:449
J
FTensor::Index< 'J', DIM1 > J
Definition: level_set.cpp:30
OpBase
OpBaseImpl< PETSC, EdgeEleOp > OpBase
Definition: radiation.cpp:29
SPACE_DIM
constexpr int SPACE_DIM
Definition: child_and_parent.cpp:16
a
constexpr double a
Definition: approx_sphere.cpp:30
MoFEM::OpNormalMixVecTimesVectorFieldImpl< SPACE_DIM, GAUSS, OpBase >::uPtr
boost::shared_ptr< MatrixDouble > uPtr
Definition: LinearFormsIntegratorsImpl.hpp:448
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
field_name
constexpr auto field_name
Definition: poisson_2d_homogeneous.cpp:13
FTensor::Index< 'i', 3 >
MoFEM::OpBaseImpl::nbRows
int nbRows
number of dofs on rows
Definition: FormsIntegrators.hpp:236
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