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

#include <src/finite_elements/LinearFormsIntegratorsImpl.hpp>

Inheritance diagram for MoFEM::OpBaseTimesVectorImpl< 1, FIELD_DIM, S, GAUSS, OpBase >:
[legend]
Collaboration diagram for MoFEM::OpBaseTimesVectorImpl< 1, FIELD_DIM, S, GAUSS, OpBase >:
[legend]

Public Member Functions

 OpBaseTimesVectorImpl (const std::string field_name, boost::shared_ptr< MatrixDouble > vec, 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

ScalarFun betaCoeff
 
boost::shared_ptr< MatrixDoublesourceVec
 
FTensor::Index< 'i', FIELD_DIMi
 

Detailed Description

template<int FIELD_DIM, int S, typename OpBase>
struct MoFEM::OpBaseTimesVectorImpl< 1, FIELD_DIM, S, GAUSS, OpBase >

Definition at line 143 of file LinearFormsIntegratorsImpl.hpp.

Constructor & Destructor Documentation

◆ OpBaseTimesVectorImpl()

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

Definition at line 145 of file LinearFormsIntegratorsImpl.hpp.

147  { return 1; },
148  boost::shared_ptr<Range> ents_ptr = nullptr)
149  : OpBase(field_name, field_name, OpBase::OPROW, ents_ptr), sourceVec(vec),
150  betaCoeff(beta_coeff) {}

Member Function Documentation

◆ iNtegrate()

template<int FIELD_DIM, int S, typename OpBase >
MoFEMErrorCode MoFEM::OpBaseTimesVectorImpl< 1, FIELD_DIM, S, GAUSS, OpBase >::iNtegrate ( EntitiesFieldData::EntData data)
protected

Definition at line 641 of file LinearFormsIntegratorsImpl.hpp.

642  {
644 
645  // get element volume
646  const double vol = OpBase::getMeasure();
647  // get integration weights
648  auto t_w = OpBase::getFTensor0IntegrationWeight();
649  // get base function gradient on rows
650  auto t_row_base = row_data.getFTensor0N();
651  // get coords
652  auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
653  // get vector values
654  auto t_vec = getFTensor1FromMat<FIELD_DIM, S>(*sourceVec);
655  // loop over integration points
656  for (int gg = 0; gg != OpBase::nbIntegrationPts; gg++) {
657  // take into account Jacobian
658  const double alpha =
659  t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
660  // get loc vector tensor
661  auto t_nf = OpBase::template getNf<FIELD_DIM>();
662  // loop over rows base functions
663  int rr = 0;
664  for (; rr != OpBase::nbRows / FIELD_DIM; ++rr) {
665  t_nf(i) += alpha * t_row_base * t_vec(i);
666  ++t_row_base;
667  ++t_nf;
668  }
669  for (; rr < OpBase::nbRowBaseFunctions; ++rr)
670  ++t_row_base;
671  ++t_w; // move to another integration weight
672  ++t_vec;
673  ++t_coords;
674  }
676 }

Member Data Documentation

◆ betaCoeff

template<int FIELD_DIM, int S, typename OpBase >
ScalarFun MoFEM::OpBaseTimesVectorImpl< 1, FIELD_DIM, S, GAUSS, OpBase >::betaCoeff
protected

Definition at line 153 of file LinearFormsIntegratorsImpl.hpp.

◆ i

template<int FIELD_DIM, int S, typename OpBase >
FTensor::Index<'i', FIELD_DIM> MoFEM::OpBaseTimesVectorImpl< 1, FIELD_DIM, S, GAUSS, OpBase >::i
protected

Definition at line 155 of file LinearFormsIntegratorsImpl.hpp.

◆ sourceVec

template<int FIELD_DIM, int S, typename OpBase >
boost::shared_ptr<MatrixDouble> MoFEM::OpBaseTimesVectorImpl< 1, FIELD_DIM, S, GAUSS, OpBase >::sourceVec
protected

Definition at line 154 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
OpBase
OpBaseImpl< PETSC, EdgeEleOp > OpBase
Definition: radiation.cpp:29
FIELD_DIM
constexpr int FIELD_DIM
Definition: child_and_parent.cpp:15
MoFEM::OpBaseTimesVectorImpl< 1, FIELD_DIM, S, GAUSS, OpBase >::i
FTensor::Index< 'i', FIELD_DIM > i
Definition: LinearFormsIntegratorsImpl.hpp:155
MoFEM::OpBaseTimesVectorImpl< 1, FIELD_DIM, S, GAUSS, OpBase >::betaCoeff
ScalarFun betaCoeff
Definition: LinearFormsIntegratorsImpl.hpp:153
MoFEM::OpBaseTimesVectorImpl< 1, FIELD_DIM, S, GAUSS, OpBase >::sourceVec
boost::shared_ptr< MatrixDouble > sourceVec
Definition: LinearFormsIntegratorsImpl.hpp:154
field_name
constexpr auto field_name
Definition: poisson_2d_homogeneous.cpp:13
MoFEM::OpBaseImpl::nbRowBaseFunctions
int nbRowBaseFunctions
number or row base functions
Definition: FormsIntegrators.hpp:239
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