221 {
223
225 if (nb_dofs == 0)
227 int nb_gauss_pts = data.
getN().size1();
228
230
233
234 for (int gg = 0; gg < nb_gauss_pts; gg++) {
235 for (
int dd = 0;
dd < nb_dofs;
dd++) {
236 double w = getGaussPts()(2, gg);
237 const double n0 = getNormalsAtGaussPts(gg)[0];
238 const double n1 = getNormalsAtGaussPts(gg)[1];
239 const double n2 = getNormalsAtGaussPts(gg)[2];
240 if (getFEType() == MBTRI) {
242 }
243
244 tCurl(0) += (n1 * t_curl_base(2) - n2 * t_curl_base(1)) * w;
245 tCurl(1) += (n2 * t_curl_base(0) - n0 * t_curl_base(2)) * w;
246 tCurl(2) += (n0 * t_curl_base(1) - n1 * t_curl_base(0)) * w;
247 ++t_curl_base;
248 }
249 }
250
252}
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#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', 3 > j
const Tensor2_symmetric_Expr< const ddTensor0< T, Dim, i, j >, typename promote< T, double >::V, Dim, i, j > dd(const Tensor0< T * > &a, const Index< i, Dim > index1, const Index< j, Dim > index2, const Tensor1< int, Dim > &d_ijk, const Tensor1< double, Dim > &d_xyz)
MatrixDouble & getN(const FieldApproximationBase base)
get base functions this return matrix (nb. of rows is equal to nb. of Gauss pts, nb....
const VectorDouble & getFieldData() const
get dofs values
FTensor::Tensor1< FTensor::PackPtr< double *, Tensor_Dim >, Tensor_Dim > getFTensor1N(FieldApproximationBase base)
Get base functions for Hdiv/Hcurl spaces.