495                                                            {
  497  const int nb_integration_pts = getGaussPts().size2();
  498  const double area = getMeasure();
  499  auto t_w = getFTensor0IntegrationWeight();
  501  auto t_val_grad = getFTensor1FromMat<2>(*(
commonDataPtr->approxValsGrad));
 
  502  auto t_flux = getFTensor1FromMat<3>(*(
commonDataPtr->approxFlux));
 
  503  auto t_coords = getFTensor1CoordsAtGaussPts();
  506 
  507  double error_l2 = 0;
  508  double error_h1 = 0;
  509  double error_ind = 0;
  510  for (int gg = 0; gg != nb_integration_pts; ++gg) {
  511    const double alpha = t_w * area;
  512 
  514                              t_coords(0), t_coords(1), t_coords(2));
  515    error_l2 += alpha * 
sqr(diff);
 
  516 
  518        t_coords(0), t_coords(1), t_coords(2));
  519    auto t_fun_grad = getFTensor1FromArray<2, 2>(vec);
  520    t_diff(
i) = t_val_grad(
i) - t_fun_grad(
i);
 
  521    error_h1 += alpha * t_diff(
i) * t_diff(
i);
 
  522 
  523    t_diff(
i) = t_val_grad(
i) - t_flux(
i);
 
  524    error_ind += alpha * t_diff(
i) * t_diff(
i);
 
  525 
  526    ++t_w;
  527    ++t_val;
  528    ++t_val_grad;
  529    ++t_flux;
  530    ++t_coords;
  531  }
  532 
  534  Tag th_error_l2, th_error_h1, th_error_ind;
 
  536                                    th_error_l2);
  538                                    th_error_h1);
  540                                    th_error_ind);
  541 
  542  double error_l2_norm = sqrt(error_l2);
  543  double error_h1_seminorm = sqrt(error_h1);
  544  double error_ind_local = sqrt(error_ind);
  547                                        &error_h1_seminorm);
  549                                        &error_ind_local);
  550 
  553 
  555  constexpr std::array<int, CommonData::LAST_ELEMENT> indices = {
  558  std::array<double, CommonData::LAST_ELEMENT> values;
  559  values[0] = error_l2;
  560  values[1] = error_h1;
  561  values[2] = error_ind;
  563                      indices.data(), values.data(), ADD_VALUES);
  565}
#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()
#define CHKERR
Inline error check.
FTensor::Index< 'i', SPACE_DIM > i
static auto getFTensor0FromVec(ublas::vector< T, A > &data)
Get tensor rank 0 (scalar) form data vector.
MoFEMErrorCode VecSetValues(Vec V, const EntitiesFieldData::EntData &data, const double *ptr, InsertMode iora)
Assemble PETSc vector.
static VectorDouble analyticalFunctionGrad(const double x, const double y, const double z)
[Analytical function]
static double analyticalFunction(const double x, const double y, const double z)
[Analytical function]
static MoFEMErrorCode getTagHandle(MoFEM::Interface &m_field, const char *name, DataType type, Tag &tag_handle)
[Source function]
virtual moab::Interface & get_moab()=0