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

#include <src/finite_elements/BiLinearFormsIntegratorsImpl.hpp>

Inheritance diagram for MoFEM::OpMassImpl< 3, 9, GAUSS, OpBase >:
[legend]
Collaboration diagram for MoFEM::OpMassImpl< 3, 9, 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, 9, GAUSS, OpBase >

Definition at line 143 of file BiLinearFormsIntegratorsImpl.hpp.

Constructor & Destructor Documentation

◆ OpMassImpl()

template<typename OpBase >
MoFEM::OpMassImpl< 3, 9, 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 144 of file BiLinearFormsIntegratorsImpl.hpp.

147  : OpBase(row_field_name, col_field_name, OpBase::OPROWCOL, ents_ptr),
148  betaCoeff(beta) {
149  if (row_field_name == col_field_name)
150  this->sYmm = true;
151  }

Member Function Documentation

◆ iNtegrate()

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

Definition at line 752 of file BiLinearFormsIntegratorsImpl.hpp.

754  {
758  auto get_t_vec = [&](const int rr) {
760  &OpBase::locMat(rr + 0, 0), &OpBase::locMat(rr + 1, 1),
761  &OpBase::locMat(rr + 2, 2)};
762  };
763  size_t nb_base_functions = row_data.getN().size2() / 3;
764  // // get element volume
765  const double vol = OpBase::getMeasure();
766  // get integration weights
767  auto t_w = OpBase::getFTensor0IntegrationWeight();
768  // get base function gradient on rows
769  auto t_row_base = row_data.getFTensor1N<3>();
770  // get coordinate at integration points
771  auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
772  // loop over integration points
773  for (int gg = 0; gg != OpBase::nbIntegrationPts; gg++) {
774  const double beta = vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
775  // take into account Jacobian
776  const double alpha = t_w * beta;
777  // loop over rows base functions
778  int rr = 0;
779  for (; rr != OpBase::nbRows / 3; rr++) {
780  // get column base functions gradient at gauss point gg
781  auto t_col_base = col_data.getFTensor1N<3>(gg, 0);
782  auto t_vec = get_t_vec(3 * rr);
783  // loop over columns
784  for (int cc = 0; cc != OpBase::nbCols / 3; cc++) {
785  // calculate element of local matrix
786  t_vec(i) += alpha * (t_row_base(k) * t_col_base(k));
787  ++t_col_base;
788  ++t_vec;
789  }
790  ++t_row_base;
791  }
792  for (; rr < nb_base_functions; ++rr)
793  ++t_row_base;
794  ++t_coords;
795  ++t_w; // move to another integration weight
796  }
798 };

Member Data Documentation

◆ betaCoeff

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

Definition at line 154 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
MoFEM::OpMassImpl< 3, 9, GAUSS, OpBase >::betaCoeff
ScalarFun betaCoeff
Definition: BiLinearFormsIntegratorsImpl.hpp:154
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
FTensor::Index< 'i', 3 >
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
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:359