v0.16.0
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
OpRhs Struct Reference
Inheritance diagram for OpRhs:
[legend]
Collaboration diagram for OpRhs:
[legend]

Public Member Functions

 OpRhs (const std::string field_name, boost::shared_ptr< MatrixDouble > x_ptr, boost::shared_ptr< MatrixDouble > dot_x_ptr)
 
MoFEMErrorCode iNtegrate (EntitiesFieldData::EntData &row_data)
 

Private Attributes

boost::shared_ptr< MatrixDoublexPtr
 
boost::shared_ptr< MatrixDoublexDotPtr
 

Detailed Description

Examples
mofem/tutorials/scl-9_heat_method/heat_method.cpp, mofem/tutorials/vec-4_shallow_wave/approx_sphere.cpp, and mofem/users_modules/adolc-plasticity/src/ADOLCPlasticity.hpp.

Definition at line 68 of file approx_sphere.cpp.

Constructor & Destructor Documentation

◆ OpRhs()

OpRhs::OpRhs ( const std::string  field_name,
boost::shared_ptr< MatrixDouble x_ptr,
boost::shared_ptr< MatrixDouble dot_x_ptr 
)
inline

Definition at line 70 of file approx_sphere.cpp.

72 : AssemblyDomainEleOp(field_name, field_name, AssemblyDomainEleOp::OPROW),
73 xPtr(x_ptr), xDotPtr(dot_x_ptr) {}
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::OpBase AssemblyDomainEleOp
constexpr auto field_name
boost::shared_ptr< MatrixDouble > xPtr
boost::shared_ptr< MatrixDouble > xDotPtr

Member Function Documentation

◆ iNtegrate()

MoFEMErrorCode OpRhs::iNtegrate ( EntitiesFieldData::EntData row_data)
inline
Examples
mofem/tutorials/vec-4_shallow_wave/approx_sphere.cpp.

Definition at line 75 of file approx_sphere.cpp.

75 {
77
78 auto t_w = getFTensor0IntegrationWeight();
79 auto t_row_base = row_data.getFTensor0N();
80
81 auto t_x0 = getFTensor1CoordsAtGaussPts();
82 auto t_x = getFTensor1FromMat<3>(*xPtr);
83 auto t_dot_x = getFTensor1FromMat<3>(*xDotPtr);
84 auto t_normal = getFTensor1NormalsAtGaussPts();
85
86 for (int gg = 0; gg != nbIntegrationPts; gg++) {
87
88 constexpr auto t_kd = FTensor::Kronecker_Delta<double>();
89 FTensor::Tensor1<double, 3> t_n{t_x0(0), t_x0(1), t_x0(2)};
90 t_n.normalize();
92 t_P(i, j) = t_n(i) * t_n(j);
93 t_Q(i, j) = t_kd(i, j) - t_P(i, j);
94
95 auto t_J_res = res_J_dx(t_x(0), t_x(1), t_x(2));
96
97 const double alpha = t_w;
98 auto t_nf = getFTensor1FromArray<3, 3>(locF);
99 double l = std::sqrt(t_normal(i) * t_normal(i));
100
102 t_res(i) =
103 alpha * l * ((t_P(i, k) * t_J_res(k) + t_Q(i, k) * t_dot_x(k)));
104
105 int rr = 0;
106 for (; rr != nbRows / 3; ++rr) {
107
108 t_nf(j) += t_row_base * t_res(j);
109
110 ++t_row_base;
111 ++t_nf;
112 }
113 for (; rr < nbRowBaseFunctions; ++rr) {
114 ++t_row_base;
115 }
116
117 ++t_w;
118 ++t_x;
119 ++t_dot_x;
120 ++t_x0;
121 ++t_normal;
122 }
123
125 }
FTensor::Index< 'j', 3 > j
FTensor::Index< 'i', 3 > i
auto res_J_dx
FTensor::Index< 'k', 3 > k
Kronecker Delta class.
Tensor1< T, Tensor_Dim > normalize()
#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()
constexpr auto t_kd
FTensor::Index< 'l', 3 > l
FTensor::Tensor0< FTensor::PackPtr< double *, 1 > > getFTensor0N(const FieldApproximationBase base)
Get base function as Tensor0.

Member Data Documentation

◆ xDotPtr

boost::shared_ptr<MatrixDouble> OpRhs::xDotPtr
private

◆ xPtr

boost::shared_ptr<MatrixDouble> OpRhs::xPtr
private

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