457 {
459
460 try {
461 int nb_dofs = data.getIndices().size();
462 if (nb_dofs == 0)
465 getNumeredEntFiniteElementPtr()->getEnt()) ==
468 }
471 int nb_gauss_pts = data.getN().size1();
472 for (int gg = 0; gg < nb_gauss_pts; gg++) {
474 getFEMethod());
475 double w = getGaussPts()(2, gg) *
476 cblas_dnrm2(3, &getNormalsAtGaussPtsF3()(gg, 0), 1) * 0.5;
477 for (int nn = 0; nn < nb_dofs / 3; nn++) {
478 for (
int dd = 0;
dd < 3;
dd++) {
480 }
481 }
482 }
484 &data.getIndices()[0], &
Nf[0], ADD_VALUES);
485 } catch (const std::exception &ex) {
486 std::ostringstream ss;
487 ss << "throw in method: " << ex.what() << std::endl;
488 SETERRQ(PETSC_COMM_SELF, 1, ss.str().c_str());
489 }
491 }
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
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)
MoFEMErrorCode VecSetValues(Vec V, const EntitiesFieldData::EntData &data, const double *ptr, InsertMode iora)
Assemble PETSc vector.
virtual MoFEMErrorCode calculateTraction(VectorDouble &traction, int gg, CommonData &common_data, const FEMethod *fe_method)
Calculate tractions.