Class dedicated to integrate operator.
1121 {
1125
1126 const size_t nb_base_functions = row_data.getN().size2() / 3;
1127
1128
1129 auto t_w = OpBase::getFTensor0IntegrationWeight();
1130
1131 auto t_row_base = row_data.getFTensor1N<3>();
1132
1133 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1134
1135 auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
1136
1138
1139 auto a = OpBase::getMeasure();
1141
1142 auto l2 = std::sqrt(t_normal(
i) * t_normal(
i));
1143 const double alpha =
1144 t_w *
betaCoeff(t_coords(0), t_coords(1), t_coords(2)) * (
a / l2);
1145
1147
1148 int rr = 0;
1150 t_nf(
J) += alpha * (t_row_base(
i) * t_normal(
i)) * t_u(
J);
1151 ++t_row_base;
1152 ++t_nf;
1153 }
1154 for (; rr < nb_base_functions; ++rr)
1155 ++t_row_base;
1156 ++t_coords;
1157 ++t_w;
1158 ++t_normal;
1159 ++t_u;
1160 }
1162}
#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::Tensor1< FTensor::PackPtr< T *, S >, Tensor_Dim > getFTensor1FromMat(ublas::matrix< T, L, A > &data)
Get tensor rank 1 (vector) form data matrix.
int nbRows
number of dofs on rows
int nbIntegrationPts
number of integration points
FTensor::Tensor1< FTensor::PackPtr< double *, DIM >, DIM > getNf()