280                                                                  {
  282 
  283    
  285    const auto in_the_loop =
  287 
  288    
  289    const double s = getMeasure() / (
areaMap[0]);
 
  291 
  292    
  293    auto t_normal = getFTensor1Normal();
  294    t_normal.normalize();
  295 
  296    auto t_w = getFTensor0IntegrationWeight();
  297 
  299 
  300    if (!nb_rows)
  302 
  303    
  304    rhsF.resize(nb_rows, 
false);
 
  306 
  307    const size_t nb_integration_pts = getGaussPts().size2();
  309 
  310    
  313    auto t_coords = getFTensor1CoordsAtGaussPts();
  314 
  316    const double beta = 
static_cast<double>(
nitsche) / (in_the_loop + 1);
 
  317 
  318    for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
  319      const double alpha = getMeasure() * t_w;
  320 
  321      const double source_val =
  322          -p * 
sourceFun(t_coords(0), t_coords(1), t_coords(2));
 
  323 
  324      auto t_f = 
rhsF.data().begin();
 
  325 
  326      size_t rr = 0;
  327      for (; rr != nb_rows; ++rr) {
  328 
  330        t_vn_plus(
i) = beta * (
phi * t_diff_row_base(
i) / p);
 
  332        t_vn(
i) = t_row_base * t_normal(
i) * sense_row - t_vn_plus(
i);
 
  333 
  334        
  335        *t_f -= alpha * t_vn(
i) * (source_val * t_normal(
i));
 
  336 
  337        ++t_row_base;
  338        ++t_diff_row_base;
  339        ++t_f;
  340      }
  341 
  342      for (; rr < nb_row_base_functions; ++rr) {
  343        ++t_row_base;
  344        ++t_diff_row_base;
  345      }
  346 
  347      ++t_w;
  348      ++t_coords;
  349    }
  350 
  351    
  354                          ADD_VALUES);
  355 
  357  }
#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()
#define CHKERR
Inline error check.
auto get_ntensor(T &base_mat)
std::array< MatrixDouble, 2 > rowBaseSideMap
FTensor::Index< 'i', SPACE_DIM > i
std::array< double, 2 > areaMap
std::array< VectorInt, 2 > indicesRowSideMap
indices on rows for left hand-side
std::array< int, 2 > senseMap
auto get_diff_ntensor(T &base_mat)
std::array< MatrixDouble, 2 > rowDiffBaseSideMap
VectorDouble rhsF
vector to store local operator right hand side