v0.15.0
Loading...
Searching...
No Matches
OpLhs Struct Reference
Inheritance diagram for OpLhs:
[legend]
Collaboration diagram for OpLhs:
[legend]

Public Member Functions

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

Private Attributes

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

Detailed Description

Examples
ADOLCPlasticity.hpp, and approx_sphere.cpp.

Definition at line 134 of file approx_sphere.cpp.

Constructor & Destructor Documentation

◆ OpLhs()

OpLhs::OpLhs ( 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 136 of file approx_sphere.cpp.

139 AssemblyDomainEleOp::OPROWCOL),
140 xPtr(x_ptr), xDotPtr(dot_x_ptr) {
141 this->sYmm = false;
142 }
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 OpLhs::iNtegrate ( EntitiesFieldData::EntData & row_data,
EntitiesFieldData::EntData & col_data )
inline
Examples
approx_sphere.cpp.

Definition at line 144 of file approx_sphere.cpp.

145 {
147
148 auto t_w = getFTensor0IntegrationWeight();
149 auto t_row_base = row_data.getFTensor0N();
150
151 auto t_x0 = getFTensor1CoordsAtGaussPts();
152 auto t_x = getFTensor1FromMat<3>(*xPtr);
153 auto t_dot_x = getFTensor1FromMat<3>(*xDotPtr);
154 auto t_normal = getFTensor1NormalsAtGaussPts();
155
156 auto get_t_mat = [&](const int rr) {
158 &locMat(rr + 0, 0), &locMat(rr + 0, 1), &locMat(rr + 0, 2),
159
160 &locMat(rr + 1, 0), &locMat(rr + 1, 1), &locMat(rr + 1, 2),
161
162 &locMat(rr + 2, 0), &locMat(rr + 2, 1), &locMat(rr + 2, 2)};
163 };
164
165 constexpr auto t_kd = FTensor::Kronecker_Delta<double>();
166 const double ts_a = getTSa();
167
168 for (int gg = 0; gg != nbIntegrationPts; gg++) {
169
170 constexpr auto t_kd = FTensor::Kronecker_Delta<double>();
171 FTensor::Tensor1<double, 3> t_n{t_x0(0), t_x0(1), t_x0(2)};
172 t_n.normalize();
174 t_P(i, j) = t_n(i) * t_n(j);
175 t_Q(i, j) = t_kd(i, j) - t_P(i, j);
176
177 auto t_J_lhs = lhs_J_dx2(t_x(0), t_x(1), t_x(2));
178 double l = std::sqrt(t_normal(i) * t_normal(i));
179
180 const double alpha = t_w;
182 t_lhs(i, j) =
183 (alpha * l) * (t_P(i, k) * t_J_lhs(k, j) + t_Q(i, j) * ts_a);
184
185 int rr = 0;
186 for (; rr != nbRows / 3; rr++) {
187
188 auto t_col_base = col_data.getFTensor0N(gg, 0);
189 auto t_mat = get_t_mat(3 * rr);
190
191 for (int cc = 0; cc != nbCols / 3; cc++) {
192
193 const double rc = t_row_base * t_col_base;
194 t_mat(i, j) += rc * t_lhs(i, j);
195
196 ++t_col_base;
197 ++t_mat;
198 }
199 ++t_row_base;
200 }
201
202 for (; rr < nbRowBaseFunctions; ++rr)
203 ++t_row_base;
204
205 ++t_w;
206 ++t_x;
207 ++t_x0;
208 ++t_normal;
209 }
210
212 }
auto lhs_J_dx2
FTensor::Index< 'j', 3 > j
FTensor::Index< 'i', 3 > i
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.
FTensor::Tensor0< FTensor::PackPtr< double *, 1 > > getFTensor0N(const FieldApproximationBase base)
Get base function as Tensor0.

Member Data Documentation

◆ xDotPtr

boost::shared_ptr<MatrixDouble> OpLhs::xDotPtr
private
Examples
approx_sphere.cpp.

Definition at line 216 of file approx_sphere.cpp.

◆ xPtr

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

Definition at line 215 of file approx_sphere.cpp.


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