370 {
372
373 const double vol = this->getMeasure();
374
375 auto t_w = getFTensor0IntegrationWeight();
376
378
380
381 auto t_coords = getFTensor1CoordsAtGaussPts();
382
383
385
386
387 const double r_cylinder = t_coords(0);
388
389
390 const double alpha = t_w * vol *
Beta * (2 * M_PI * r_cylinder);
391
392 for (
int rr = 0; rr !=
nbRows; ++rr) {
394
395 for (
int cc = 0; cc !=
nbCols; cc++) {
396 if (std::abs(t_coords(0)) > std::numeric_limits<double>::epsilon()) {
397 locMat(rr, cc) +=
alpha * t_row_base * t_col_base * 4 * pow(t_val, 3);
398 }
399 ++t_col_base;
400 }
401 ++t_row_base;
402 }
403
404 ++t_val;
405 ++t_coords;
406 ++t_w;
407 }
409}
#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()
static auto getFTensor0FromVec(ublas::vector< T, A > &data)
Get tensor rank 0 (scalar) form data vector.
FTensor::Tensor0< FTensor::PackPtr< double *, 1 > > getFTensor0N(const FieldApproximationBase base)
Get base function as Tensor0.
int nbRows
number of dofs on rows
int nbIntegrationPts
number of integration points
MatrixDouble locMat
local entity block matrix
int nbCols
number if dof on column