188 {
190 using DL = DataLayoutTraits<DataLayout::GaussByCoeffs>;
191 auto t_D =
194 auto t_w = OpBase::getFTensor0IntegrationWeight();
195 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
209 t_hoop(N2, N2) = 1;
211 const double radius = t_coords(0);
212 const double alpha = 2 * M_PI * t_w * OpBase::getMeasure();
213 int rr = 0;
215 auto t_m = OpBase::template getLocMat<2>(2 * rr);
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 *
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 }
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
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
DataLayoutTraits< DataLayout::GaussByCoeffs > DL
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