464 {
470 : getFEMethod()->ts_t;
471 double pressure = 0.;
473 if (block.blockName.find("ANALYTICAL_EXTERNALSTRAIN") !=
474 std::string::npos)
475 SETERRQ(
477 "Analytical external strain is not implemented for Neo-Hookean");
478 if (block.ents.find(getFEEntityHandle()) == block.ents.end())
479 continue;
483 scale = scaling->second->getScale(time);
484 else
486 << "No scaling method found for " << block.blockName;
487 pressure += 3. * block.bulkModulusK * block.val *
scale;
488 }
489 if (!std::isfinite(pressure))
491 "Neo-Hookean prescribed external pressure must be finite");
494 const auto t_packed_basis = FTensor::SymmLTensor<double, 3>();
497 t_load(L) = pressure * (t_packed_basis(
i,
j, L) * t_identity(
i,
j));
499 auto t_weight = getFTensor0IntegrationWeight();
500 for (int gg = 0; gg != nbIntegrationPts; ++gg) {
501 const double alpha = getMeasure() * t_weight;
502 auto t_nf = getNf<size_symm>();
503 int rr = 0;
505 t_nf(L) -= alpha * t_row * t_load(L);
506 ++t_nf;
507 ++t_row;
508 }
509 for (; rr != nbRowBaseFunctions; ++rr)
510 ++t_row;
511 ++t_weight;
512 }
514 }
#define FTENSOR_INDEXES(DIM,...)
#define FTENSOR_INDEX(DIM, I)
Kronecker Delta class symmetric.
#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 ...
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MOFEM_LOG(channel, severity)
Log.
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'j', 3 > j
static constexpr auto size_symm
static PetscBool physicalTimeFlg
static double currentPhysicalTime
FTensor::Tensor1< double, size_symm > PackedStress
FTensor::Tensor0< FTensor::PackPtr< double *, 1 > > getFTensor0N(const FieldApproximationBase base)
Get base function as Tensor0.