v0.15.0
Loading...
Searching...
No Matches
Poisson2DHomogeneousOperators::OpDomainLhsMatrixK Struct Reference

#include "tutorials/scl-1/src/poisson_2d_homogeneous.hpp"

Inheritance diagram for Poisson2DHomogeneousOperators::OpDomainLhsMatrixK:
[legend]
Collaboration diagram for Poisson2DHomogeneousOperators::OpDomainLhsMatrixK:
[legend]

Public Member Functions

 OpDomainLhsMatrixK (std::string row_field_name, std::string col_field_name)
 
MoFEMErrorCode iNtegrate (EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
 

Detailed Description

Definition at line 40 of file poisson_2d_homogeneous.hpp.

Constructor & Destructor Documentation

◆ OpDomainLhsMatrixK()

Poisson2DHomogeneousOperators::OpDomainLhsMatrixK::OpDomainLhsMatrixK ( std::string row_field_name,
std::string col_field_name )
inline

Definition at line 42 of file poisson_2d_homogeneous.hpp.

43 : AssemblyDomainEleOp(row_field_name, col_field_name,
44 DomainEleOp::OPROWCOL) {}
FormsIntegrators< DomainEleOp >::Assembly< A >::OpBase AssemblyDomainEleOp

Member Function Documentation

◆ iNtegrate()

MoFEMErrorCode Poisson2DHomogeneousOperators::OpDomainLhsMatrixK::iNtegrate ( EntitiesFieldData::EntData & row_data,
EntitiesFieldData::EntData & col_data )
inline
Examples
poisson_2d_homogeneous.hpp.

Definition at line 46 of file poisson_2d_homogeneous.hpp.

47 {
49
50 const int nb_row_dofs = row_data.getIndices().size();
51 const int nb_col_dofs = col_data.getIndices().size();
52
53 this->locMat.resize(nb_row_dofs, nb_col_dofs, false);
54 this->locMat.clear();
55
56 // get element area
57 const double area = getMeasure();
58
59 // get number of integration points
60 const int nb_integration_points = getGaussPts().size2();
61 // get integration weights
62 auto t_w = getFTensor0IntegrationWeight();
63
64 // get derivatives of base functions on row
65 auto t_row_diff_base = row_data.getFTensor1DiffN<SPACE_DIM>();
66
67 // START THE LOOP OVER INTEGRATION POINTS TO CALCULATE LOCAL MATRIX
68 for (int gg = 0; gg != nb_integration_points; gg++) {
69 const double a = t_w * area;
70
71 for (int rr = 0; rr != nb_row_dofs; ++rr) {
72 // get derivatives of base functions on column
73 auto t_col_diff_base = col_data.getFTensor1DiffN<SPACE_DIM>(gg, 0);
74
75 for (int cc = 0; cc != nb_col_dofs; cc++) {
76 this->locMat(rr, cc) += t_row_diff_base(i) * t_col_diff_base(i) * a;
77
78 // move to the derivatives of the next base functions on column
79 ++t_col_diff_base;
80 }
81
82 // move to the derivatives of the next base functions on row
83 ++t_row_diff_base;
84 }
85
86 // move to the weight of the next integration point
87 ++t_w;
88 }
89
91 }
constexpr double a
constexpr int SPACE_DIM
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Tensor1< FTensor::PackPtr< double *, Tensor_Dim >, Tensor_Dim > getFTensor1DiffN(const FieldApproximationBase base)
Get derivatives of base functions.
const VectorInt & getIndices() const
Get global indices of dofs on entity.

The documentation for this struct was generated from the following file: