46 {
48
53
54 const auto nb_integration_pts = DomainEleOp::getGaussPts().size2();
55
58
60
61 auto t_grad = getFTensor2FromMat<DIM, DIM>(*(
matGradPtr));
62
63
64 const double vol = DomainEleOp::getMeasure();
65
66 auto t_w = DomainEleOp::getFTensor0IntegrationWeight();
67
68 auto t_row_base = data.getFTensor1N<3>();
69
70 auto t_flux = getFTensor1FromMat<DIM>(*
fluxVec);
71
72 auto t_coords = AssemblyDomainEleOp::getFTensor1CoordsAtGaussPts();
73
74
75 for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
76
77 const double alpha = t_w * vol;
78
80 auto t_J = determinantTensor(t_F);
81
84 t_F(
m,
N) * t_flux(
N) / t_J;
85
86
87 size_t rr = 0;
88 for (; rr != DomainEleOp::nbRows; ++rr) {
89 DomainEleOp::locF[rr] += t_K_inv_Q_over_J(
J) * alpha * (t_row_base(
J));
90 ++t_row_base;
91 }
92 for (; rr < DomainEleOp::nbRowBaseFunctions; ++rr)
93 ++t_row_base;
94 ++t_w;
95 ++t_coords;
96 ++t_flux;
97 ++t_grad;
98 };
100}
#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< 'm', 3 > m