v0.15.0
Loading...
Searching...
No Matches
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
ADOLCPlasticity.hpp, approx_sphere.cpp, and heat_method.cpp.

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
Examples
approx_sphere.cpp.

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
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 constexpr auto t_kd = FTensor::Kronecker_Delta<double>();
87
88 for (int gg = 0; gg != nbIntegrationPts; gg++) {
89
90 constexpr auto t_kd = FTensor::Kronecker_Delta<double>();
91 FTensor::Tensor1<double, 3> t_n{t_x0(0), t_x0(1), t_x0(2)};
92 t_n.normalize();
94 t_P(i, j) = t_n(i) * t_n(j);
95 t_Q(i, j) = t_kd(i, j) - t_P(i, j);
96
97 auto t_J_res = res_J_dx(t_x(0), t_x(1), t_x(2));
98
99 const double alpha = t_w;
100 auto t_nf = getFTensor1FromArray<3, 3>(locF);
101 double l = std::sqrt(t_normal(i) * t_normal(i));
102
104 t_res(i) =
105 alpha * l * ((t_P(i, k) * t_J_res(k) + t_Q(i, k) * t_dot_x(k)));
106
107 int rr = 0;
108 for (; rr != nbRows / 3; ++rr) {
109
110 t_nf(j) += t_row_base * t_res(j);
111
112 ++t_row_base;
113 ++t_nf;
114 }
115 for (; rr < nbRowBaseFunctions; ++rr) {
116 ++t_row_base;
117 }
118
119 ++t_w;
120 ++t_x;
121 ++t_dot_x;
122 ++t_x0;
123 ++t_normal;
124 }
125
127 }
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::Tensor1< FTensor::PackPtr< T *, S >, Tensor_Dim > getFTensor1FromMat(ublas::matrix< T, L, A > &data)
Get tensor rank 1 (vector) form data matrix.
auto getFTensor1FromArray(VectorDouble &data)
Get FTensor1 from array.
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
Examples
approx_sphere.cpp.

Definition at line 131 of file approx_sphere.cpp.

◆ xPtr

boost::shared_ptr<MatrixDouble> OpRhs::xPtr
private
Examples
approx_sphere.cpp.

Definition at line 130 of file approx_sphere.cpp.


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