v0.16.3
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
MatOps::OpAxisymmetricLhs< A, DomainEleOp > Struct Template Reference

#include "src/materials/MatAxisymmetric.hpp"

Inheritance diagram for MatOps::OpAxisymmetricLhs< A, DomainEleOp >:
[legend]
Collaboration diagram for MatOps::OpAxisymmetricLhs< A, DomainEleOp >:
[legend]

Public Types

using OpBase = OpAxisymmetricBase< A, DomainEleOp >
 

Public Member Functions

 OpAxisymmetricLhs (const std::string field_name, boost::shared_ptr< MatrixDouble > full_tangent_ptr)
 

Protected Member Functions

MoFEMErrorCode iNtegrate (EntData &row_data, EntData &col_data) override
 

Protected Attributes

boost::shared_ptr< MatrixDoublefullTangentPtr
 

Detailed Description

template<AssemblyType A, typename DomainEleOp>
struct MatOps::OpAxisymmetricLhs< A, DomainEleOp >

Definition at line 177 of file MatAxisymmetric.hpp.

Member Typedef Documentation

◆ OpBase

Definition at line 178 of file MatAxisymmetric.hpp.

Constructor & Destructor Documentation

◆ OpAxisymmetricLhs()

template<AssemblyType A, typename DomainEleOp >
MatOps::OpAxisymmetricLhs< A, DomainEleOp >::OpAxisymmetricLhs ( const std::string  field_name,
boost::shared_ptr< MatrixDouble full_tangent_ptr 
)
inline

Definition at line 180 of file MatAxisymmetric.hpp.

182 : OpBase(field_name, field_name, DomainEleOp::OPROWCOL),
183 fullTangentPtr(full_tangent_ptr) {}
constexpr auto field_name
OpAxisymmetricBase< A, DomainEleOp > OpBase
boost::shared_ptr< MatrixDouble > fullTangentPtr

Member Function Documentation

◆ iNtegrate()

template<AssemblyType A, typename DomainEleOp >
MoFEMErrorCode MatOps::OpAxisymmetricLhs< A, DomainEleOp >::iNtegrate ( EntData row_data,
EntData col_data 
)
inlineoverrideprotected

Definition at line 188 of file MatAxisymmetric.hpp.

188 {
190 using DL = DataLayoutTraits<DataLayout::GaussByCoeffs>;
191 auto t_D =
192 MatrixSizeHelper<GetFTensor4FromMatType<3, 3, 3, 3, -1, DL>, DL>::get(
194 auto t_w = OpBase::getFTensor0IntegrationWeight();
195 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
196 auto t_row_base = row_data.getFTensor0N();
197 auto t_row_diff = row_data.getFTensor1DiffN<2>();
198 FTENSOR_INDEX(3, i);
199 FTENSOR_INDEX(3, J);
200 FTENSOR_INDEX(3, k);
201 FTENSOR_INDEX(3, L);
202 FTENSOR_INDEX(2, j);
203 FTENSOR_INDEX(2, I);
204 FTENSOR_INDEX(2, l);
208 t_hoop(i, J) = 0;
209 t_hoop(N2, N2) = 1;
210 for (int gg = 0; gg != OpBase::nbIntegrationPts; ++gg) {
211 const double radius = t_coords(0);
212 const double alpha = 2 * M_PI * t_w * OpBase::getMeasure();
213 int rr = 0;
214 for (; rr != OpBase::nbRows / 2; ++rr) {
215 auto t_m = OpBase::template getLocMat<2>(2 * rr);
216 auto t_col_base = col_data.getFTensor0N(gg, 0);
217 auto t_col_diff = col_data.getFTensor1DiffN<2>(gg, 0);
218 for (int cc = 0; cc != OpBase::nbCols / 2; ++cc) {
219 t_m(j, N0) += alpha * t_col_base * t_row_diff(I) *
220 (t_D(j, I, k, L) * t_hoop(k, L));
221 t_m(N0, l) += alpha * t_row_base * t_hoop(i, J) *
222 (t_D(i, J, l, I) * t_col_diff(I));
223 t_m(N0, N0) += alpha * t_row_base * t_col_base / radius *
224 t_hoop(i, J) *
225 (t_D(i, J, k, L) * t_hoop(k, L));
226 ++t_m;
227 ++t_col_base;
228 ++t_col_diff;
229 }
230 ++t_row_base;
231 ++t_row_diff;
232 }
233 for (; rr < OpBase::nbRowBaseFunctions; ++rr) {
234 ++t_row_base;
235 ++t_row_diff;
236 }
237 ++t_D;
238 ++t_w;
239 ++t_coords;
240 }
242 }
#define FTENSOR_INDEX(DIM, I)
#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::Index< 'J', DIM1 > J
Definition level_set.cpp:30
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
DataLayoutTraits< DataLayout::GaussByCoeffs > DL
Definition MatHuHu.hpp:33
decltype(GetFTensor4FromMatImpl< Tensor_Dim0, Tensor_Dim1, Tensor_Dim2, Tensor_Dim3, S, DL, M >::get(std::declval< M & >(), 0, 0)) GetFTensor4FromMatType
constexpr IntegrationType I
FTensor::Tensor0< FTensor::PackPtr< double *, 1 > > getFTensor0N(const FieldApproximationBase base)
Get base function as Tensor0.
auto getFTensor1DiffN(const FieldApproximationBase base)
Get derivatives of base functions.
int nbRows
number of dofs on rows
int nbIntegrationPts
number of integration points
int nbCols
number if dof on column
int nbRowBaseFunctions
number or row base functions

Member Data Documentation

◆ fullTangentPtr

template<AssemblyType A, typename DomainEleOp >
boost::shared_ptr<MatrixDouble> MatOps::OpAxisymmetricLhs< A, DomainEleOp >::fullTangentPtr
protected

Definition at line 186 of file MatAxisymmetric.hpp.


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