393 {
395
396
397 if ((type == MBTRI || type == MBQUAD) && side == 0) {
398 const size_t nb_dofs = data.
getIndices().size();
399
400
401
402 const size_t nb_integration_pts = data.
getN().size1();
403 const size_t nb_base_functions = data.
getN().size2();
406 const int check_size =
commonDataPtr->plasticStrainSideMap.size();
407
409 if (static_cast<int>(
410 commonDataPtr->plasticStrainSideMap.begin()->second.size2()) !=
411 nb_integration_pts)
413 "wrong number of integration points");
414
415 auto &plastic_mat_l =
commonDataPtr->plasticStrainSideMap.at(-1);
416 auto &plastic_mat_r =
commonDataPtr->plasticStrainSideMap.at(1);
417 auto t_plastic_strain_l = getFTensor2SymmetricFromMat<3>(plastic_mat_l);
418 auto t_plastic_strain_r = getFTensor2SymmetricFromMat<3>(plastic_mat_r);
423
424 auto t_w = getFTensor0IntegrationWeight();
426 auto t_coords = getFTensor1CoordsAtGaussPts();
427 commonDataPtr->plasticTauJumpPtr->resize(nb_integration_pts,
false);
428 commonDataPtr->plasticStrainJumpPtr->resize(6, nb_integration_pts,
false);
429 auto t_plastic_strain_jump =
430 getFTensor2SymmetricFromMat<3>(*
commonDataPtr->plasticStrainJumpPtr);
432
433 for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
434 double alpha = getMeasure() * t_w;
435
436
437
438
439
440
441 t_plastic_strain_jump(
i,
j) =
442 t_plastic_strain_l(
i,
j) - t_plastic_strain_r(
i,
j);
443 t_tau_jump = t_tau_l - t_tau_r;
444
445
446
447
448
449
450
451
452
453
454
455 ++t_plastic_strain_jump;
456 ++t_tau_jump;
457 ++t_plastic_strain_l;
458 ++t_plastic_strain_r;
459 ++t_tau_l;
460 ++t_tau_r;
461 ++t_w;
462 }
463
464
465 }
466
468}
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
#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
FTensor::Index< 'j', 3 > j
static auto getFTensor0FromVec(ublas::vector< T, A > &data)
Get tensor rank 0 (scalar) form data vector.
FTensor::Tensor0< FTensor::PackPtr< double *, 1 > > getFTensor0N(const FieldApproximationBase base)
Get base function as Tensor0.
MatrixDouble & getN(const FieldApproximationBase base)
get base functions this return matrix (nb. of rows is equal to nb. of Gauss pts, nb....
const VectorInt & getIndices() const
Get global indices of dofs on entity.