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

#include <src/finite_elements/BiLinearFormsIntegratorsImpl.hpp>

Inheritance diagram for MoFEM::OpMassImpl< 3, 4, GAUSS, OpBase >:
[legend]
Collaboration diagram for MoFEM::OpMassImpl< 3, 4, GAUSS, OpBase >:
[legend]

Public Member Functions

 OpMassImpl (const std::string row_field_name, const std::string col_field_name, ScalarFun beta=scalar_fun_one, boost::shared_ptr< Range > ents_ptr=nullptr)
 

Protected Member Functions

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

Protected Attributes

ScalarFun betaCoeff
 

Detailed Description

template<typename OpBase>
struct MoFEM::OpMassImpl< 3, 4, GAUSS, OpBase >

Definition at line 126 of file BiLinearFormsIntegratorsImpl.hpp.

Constructor & Destructor Documentation

◆ OpMassImpl()

template<typename OpBase >
MoFEM::OpMassImpl< 3, 4, GAUSS, OpBase >::OpMassImpl ( const std::string  row_field_name,
const std::string  col_field_name,
ScalarFun  beta = scalar_fun_one,
boost::shared_ptr< Range ents_ptr = nullptr 
)
inline

Definition at line 127 of file BiLinearFormsIntegratorsImpl.hpp.

130  : OpBase(row_field_name, col_field_name, OpBase::OPROWCOL, ents_ptr),
131  betaCoeff(beta) {
132  if (row_field_name == col_field_name)
133  this->sYmm = true;
134  }

Member Function Documentation

◆ iNtegrate()

template<typename OpBase >
MoFEMErrorCode MoFEM::OpMassImpl< 3, 4, GAUSS, OpBase >::iNtegrate ( EntitiesFieldData::EntData row_data,
EntitiesFieldData::EntData col_data 
)
protected

Definition at line 704 of file BiLinearFormsIntegratorsImpl.hpp.

706  {
710  auto get_t_vec = [&](const int rr) {
712  &OpBase::locMat(rr + 0, 0), &OpBase::locMat(rr + 1, 1)};
713  };
714  size_t nb_base_functions = row_data.getN().size2() / 3;
715  // // get element volume
716  const double vol = OpBase::getMeasure();
717  // get integration weights
718  auto t_w = OpBase::getFTensor0IntegrationWeight();
719  // get base function gradient on rows
720  auto t_row_base = row_data.getFTensor1N<3>();
721  // get coordinate at integration points
722  auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
723  // loop over integration points
724  for (int gg = 0; gg != OpBase::nbIntegrationPts; gg++) {
725  const double beta = vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
726  // take into account Jacobian
727  const double alpha = t_w * beta;
728  // loop over rows base functions
729  int rr = 0;
730  for (; rr != OpBase::nbRows / 2; rr++) {
731  // get column base functions gradient at gauss point gg
732  auto t_col_base = col_data.getFTensor1N<3>(gg, 0);
733  auto t_vec = get_t_vec(2 * rr);
734  // loop over columns
735  for (int cc = 0; cc != OpBase::nbCols / 2; cc++) {
736  // calculate element of local matrix
737  t_vec(I) += alpha * (t_row_base(k) * t_col_base(k));
738  ++t_col_base;
739  ++t_vec;
740  }
741  ++t_row_base;
742  }
743  for (; rr < nb_base_functions; ++rr)
744  ++t_row_base;
745  ++t_coords;
746  ++t_w; // move to another integration weight
747  }
749 }

Member Data Documentation

◆ betaCoeff

template<typename OpBase >
ScalarFun MoFEM::OpMassImpl< 3, 4, GAUSS, OpBase >::betaCoeff
protected

Definition at line 137 of file BiLinearFormsIntegratorsImpl.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
I
constexpr IntegrationType I
Definition: operators_tests.cpp:31
FTensor::Index< 'i', 2 >
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
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
MoFEM::OpMassImpl< 3, 4, GAUSS, OpBase >::betaCoeff
ScalarFun betaCoeff
Definition: BiLinearFormsIntegratorsImpl.hpp:137
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:359