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

#include <src/finite_elements/TriLinearFormsIntegrators.hpp>

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

Public Member Functions

 OpConvectiveTermLhsDuImpl (const std::string field_name_row, const std::string field_name_col, boost::shared_ptr< MatrixDouble > y_grad_ptr, ConstantFun alpha_fun=[]() { return 1;})
 

Protected Member Functions

MoFEMErrorCode iNtegrate (EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
 

Protected Attributes

boost::shared_ptr< MatrixDoubleyGradPtr
 
ConstantFun alphaConstant
 

Detailed Description

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

Definition at line 20 of file TriLinearFormsIntegrators.hpp.

Constructor & Destructor Documentation

◆ OpConvectiveTermLhsDuImpl()

template<int SPACE_DIM, typename OpBase >
MoFEM::OpConvectiveTermLhsDuImpl< 1, 1, SPACE_DIM, GAUSS, OpBase >::OpConvectiveTermLhsDuImpl ( const std::string  field_name_row,
const std::string  field_name_col,
boost::shared_ptr< MatrixDouble y_grad_ptr,
ConstantFun  alpha_fun = []() { return 1; } 
)
inline

Definition at line 22 of file TriLinearFormsIntegrators.hpp.

25  { return 1; })
26  : OpBase(field_name_row, field_name_col, OpBase::OPROWCOL),
27  yGradPtr(y_grad_ptr), alphaConstant(alpha_fun) {
28 
29  this->assembleTranspose = false;
30  this->onlyTranspose = false;
31  this->sYmm = false;
32  }

Member Function Documentation

◆ iNtegrate()

template<int SPACE_DIM, typename OpBase >
MoFEMErrorCode MoFEM::OpConvectiveTermLhsDuImpl< 1, 1, SPACE_DIM, GAUSS, OpBase >::iNtegrate ( EntitiesFieldData::EntData row_data,
EntitiesFieldData::EntData col_data 
)
protected

Definition at line 139 of file TriLinearFormsIntegrators.hpp.

141  {
143 
144  // get element volume
145  const double vol = OpBase::getMeasure();
146  // get integration weights
147  auto t_w = OpBase::getFTensor0IntegrationWeight();
148  // get base function gradient on rows
149  auto t_row_base = row_data.getFTensor0N();
150 
151  auto get_t_vec = [&](const int rr) {
152  std::array<double *, SPACE_DIM> ptrs;
153  for (auto i = 0; i != SPACE_DIM; ++i)
154  ptrs[i] = &OpBase::locMat(rr, i);
156  ptrs);
157  };
158 
159  auto t_grad_y = getFTensor1FromMat<SPACE_DIM>(*yGradPtr);
161 
162  const double alpha_constant = alphaConstant();
163  // loop over integration points
164  for (int gg = 0; gg != OpBase::nbIntegrationPts; gg++) {
165  // take into account Jacobian
166  const double alpha = t_w * vol * alpha_constant;
167  // access local matrix
168  auto t_vec = get_t_vec(0);
169  // loop over rows base functions
170  int rr = 0;
171  for (; rr != OpBase::nbRows; rr++) {
172  // get column base functions gradient at gauss point gg
173  auto t_col_base = col_data.getFTensor0N(gg, 0);
174  // loop over columns
175  for (int cc = 0; cc != OpBase::nbCols / SPACE_DIM; cc++) {
176  // calculate element of local matrix
177  t_vec(i) += alpha * t_row_base * t_col_base * t_grad_y(i);
178  ++t_col_base;
179  ++t_vec;
180  }
181  ++t_row_base;
182  }
183  for (; rr < OpBase::nbRowBaseFunctions; ++rr)
184  ++t_row_base;
185 
186  ++t_grad_y;
187  ++t_w; // move to another integration weight
188  }
190 };

Member Data Documentation

◆ alphaConstant

template<int SPACE_DIM, typename OpBase >
ConstantFun MoFEM::OpConvectiveTermLhsDuImpl< 1, 1, SPACE_DIM, GAUSS, OpBase >::alphaConstant
protected

Definition at line 36 of file TriLinearFormsIntegrators.hpp.

◆ yGradPtr

template<int SPACE_DIM, typename OpBase >
boost::shared_ptr<MatrixDouble> MoFEM::OpConvectiveTermLhsDuImpl< 1, 1, SPACE_DIM, GAUSS, OpBase >::yGradPtr
protected

Definition at line 35 of file TriLinearFormsIntegrators.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::OpBaseImpl::locMat
MatrixDouble locMat
local entity block matrix
Definition: FormsIntegrators.hpp:249
FTensor::Tensor1
Definition: Tensor1_value.hpp:8
OpBase
OpBaseImpl< PETSC, EdgeEleOp > OpBase
Definition: radiation.cpp:29
SPACE_DIM
constexpr int SPACE_DIM
Definition: child_and_parent.cpp:16
MoFEM::OpConvectiveTermLhsDuImpl< 1, 1, SPACE_DIM, GAUSS, OpBase >::yGradPtr
boost::shared_ptr< MatrixDouble > yGradPtr
Definition: TriLinearFormsIntegrators.hpp:35
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
FTensor::Index< 'i', SPACE_DIM >
MoFEM::OpBaseImpl::nbRowBaseFunctions
int nbRowBaseFunctions
number or row base functions
Definition: FormsIntegrators.hpp:239
MoFEM::OpBaseImpl::nbCols
int nbCols
number if dof on column
Definition: FormsIntegrators.hpp:237
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
MoFEM::OpConvectiveTermLhsDuImpl< 1, 1, SPACE_DIM, GAUSS, OpBase >::alphaConstant
ConstantFun alphaConstant
Definition: TriLinearFormsIntegrators.hpp:36
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:359