75 {
77
78 auto t_w = getFTensor0IntegrationWeight();
80
81 auto t_x0 = getFTensor1CoordsAtGaussPts();
84 auto t_normal = getFTensor1NormalsAtGaussPts();
85
87
88 for (int gg = 0; gg != nbIntegrationPts; gg++) {
89
94 t_P(
i,
j) = t_n(
i) * t_n(
j);
96
97 auto t_J_res =
res_J_dx(t_x(0), t_x(1), t_x(2));
98
99 const double alpha = t_w;
101 double l = std::sqrt(t_normal(
i) * t_normal(
i));
102
105 alpha *
l * ((t_P(
i,
k) * t_J_res(
k) + t_Q(
i,
k) * t_dot_x(
k)));
106
107 int rr = 0;
108 for (; rr != nbRows / 3; ++rr) {
109
110 t_nf(
j) += t_row_base * t_res(
j);
111
112 ++t_row_base;
113 ++t_nf;
114 }
115 for (; rr < nbRowBaseFunctions; ++rr) {
116 ++t_row_base;
117 }
118
119 ++t_w;
120 ++t_x;
121 ++t_dot_x;
122 ++t_x0;
123 ++t_normal;
124 }
125
127 }
FTensor::Index< 'j', 3 > j
FTensor::Index< 'i', 3 > i
FTensor::Index< 'k', 3 > k
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()
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.
auto getFTensor1FromArray(VectorDouble &data)
Get FTensor1 from array.
FTensor::Tensor0< FTensor::PackPtr< double *, 1 > > getFTensor0N(const FieldApproximationBase base)
Get base function as Tensor0.