v0.16.3
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
EshelbianPlasticity::HMHNeohookean Struct Reference
Inheritance diagram for EshelbianPlasticity::HMHNeohookean:
[legend]
Collaboration diagram for EshelbianPlasticity::HMHNeohookean:
[legend]

Classes

struct  BlockData
 
struct  OpAuxiliaryHelmholtzGradient
 
struct  OpEnergy
 
struct  OpExternalStrain
 
struct  OpJacobian
 
struct  OpResidual
 
struct  OpTangent
 

Public Types

using Material = NeoHookeanLogarithmicMaterial
 
using PackedStress = FTensor::Tensor1< double, size_symm >
 
using PackedTangent = FTensor::Tensor2< double, size_symm, size_symm >
 
using FormBase = typename FormsIntegrators< VolUserDataOperator >::Assembly< A >::OpBase
 
- Public Types inherited from EshelbianPlasticity::PhysicalEquations
enum  MaterialModel {
  StVenantKirchhoff , MooneyRivlin , Hencky , Neohookean ,
  Meta , LastMaterial
}
 
enum  Feature {
  DIRECT_STRETCH = 0 , NO_STRETCH_LINEAR , NO_STRETCH_NONLINEAR , AUXILIARY_LOGARITHMIC_STRESS ,
  NON_HOMOGENEOUS_MATERIAL , LAST_FEATURE
}
 
enum  FieldState { CURRENT , PREVIOUS }
 
using Features = std::bitset< LAST_FEATURE >
 

Public Member Functions

MoFEMErrorCode pushAuxiliaryLogarithmicMaterialEvaluation (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, bool lhs) override
 Evaluate the auxiliary material copy and energies without assembly.
 
MoFEMErrorCode pushAuxiliaryLogarithmicStressOps (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, bool lhs) override
 Assemble the selected material field group after kinematic reconstruction.
 
 HMHNeohookean (MoFEM::Interface &m_field, const double c10, const double bulk_modulus, const Features features)
 
Material::Parameters getParameters (const EntityHandle entity) const
 
UserDataOperatorreturnOpJacobian (const bool eval_rhs, const bool eval_lhs, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr) override
 
VolUserDataOperatorreturnOpCalculateHelmholtzFreeEnergy (boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< double > total_energy_ptr) override
 
bool providesHelmholtzFreeEnergy () const override
 
MoFEMErrorCode pushHelmholtzStateGradient (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr) override
 Assemble the physical Helmholtz state derivative at equilibrium.
 
VolUserDataOperatorreturnOpSpatialPhysical (const std::string &field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha_u) override
 
VolUserDataOperatorreturnOpSpatialPhysical_du_du (std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha_u) override
 
VolUserDataOperatorreturnOpSpatialPhysicalExternalStrain (const std::string &field, boost::shared_ptr< DataAtIntegrationPts >, boost::shared_ptr< ExternalStrainVec > external_strain_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > scaling_methods) override
 
VolUserDataOperatorreturnOpCalculateExternalPressure (VectorPtr pressure_ptr, boost::shared_ptr< ExternalStrainVec > external_strain_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > scaling_methods) override
 
VolUserDataOperatorreturnOpCalculateStretchFromStress (boost::shared_ptr< DataAtIntegrationPts >, boost::shared_ptr< PhysicalEquations >, boost::shared_ptr< MatrixDouble >) override
 
VolUserDataOperatorreturnOpCalculateStretchFromStress (boost::shared_ptr< DataAtIntegrationPts >, boost::shared_ptr< PhysicalEquations >, boost::shared_ptr< MatrixDouble >, VectorPtr) override
 
VolUserDataOperatorreturnOpCalculateStretchFromStress (boost::shared_ptr< DataAtIntegrationPts >, boost::shared_ptr< PhysicalEquations >, boost::shared_ptr< MatrixDouble >, boost::shared_ptr< MatrixDouble >, VectorPtr) override
 
VolUserDataOperatorreturnOpCalculateVarStretchFromStress (boost::shared_ptr< DataAtIntegrationPts >, boost::shared_ptr< PhysicalEquations >) override
 
- Public Member Functions inherited from EshelbianPlasticity::PhysicalEquations
 PhysicalEquations (MaterialModel model, Features features)
 
virtual ~PhysicalEquations ()=default
 
MoFEMErrorCode checkSetup (const EshelbianCore &ep) const
 Check material capabilities after geometry and boundary setup.
 
MaterialModel getMaterialModel () const
 
const FeaturesgetFeatures () const
 
std::vector< FieldDefinitiongetMaterialFieldDefinitions (const EshelbianCore &ep) const
 
std::vector< std::string > getMaterialFields (const EshelbianCore &ep) const
 Active material unknowns used by the element, DMs and field split.
 
std::vector< std::pair< std::string, std::string > > getMaterialCouplings (const EshelbianCore &ep) const
 Material-dependent blocks; each pair also represents its transpose.
 
std::vector< std::pair< std::string, std::string > > getMaterialEmptyBlocks (const EshelbianCore &ep) const
 
MoFEMErrorCode pushMaterialFields (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, FieldState state=CURRENT)
 Evaluate the selected fields, or recover stretch from the matching stress.
 
MoFEMErrorCode pushMaterialRates (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
 
MoFEMErrorCode pushMaterialEvaluation (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, bool rhs, bool lhs)
 Evaluate constitutive data after kinematics and before material assembly.
 
MoFEMErrorCode pushStretchFromStress (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< MatrixDouble > strain_ptr=nullptr, boost::shared_ptr< MatrixDouble > stress_ptr=nullptr)
 
MoFEMErrorCode pushMaterialResidual (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
 
MoFEMErrorCode pushMaterialTangent (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
 
MoFEMErrorCode pushEnergyEvaluation (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< double > total_energy_ptr)
 
MoFEMErrorCode pushMaterialForceFields (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
 
MoFEMErrorCode pushPostProc (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, MaterialPostProcData &output)
 
MoFEMErrorCode pushMaterialVariation (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, SmartPetscObj< Vec > variation, MaterialPostProcData *output=nullptr)
 
MoFEMErrorCode pushPostProcResidual (const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, SmartPetscObj< Vec > residual, MaterialPostProcData &output)
 
MoFEMErrorCode pushSkeletonEvaluation (const EshelbianCore &ep, VolumeElementForcesAndSourcesCoreOnSide &fe, boost::shared_ptr< DataAtIntegrationPts > data_ptr, SmartPetscObj< Vec > residual, MaterialPostProcData &output)
 
virtual VolUserDataOperatorreturnOpTopoSpatialPhysical (const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, SmartPetscObj< Vec > assemble_vec, boost::shared_ptr< TopologicalData > topo_ptr, const double alpha_u, boost::shared_ptr< double > J_ptr)
 

Static Public Member Functions

static MoFEMErrorCode evaluateDirect (const Material::Parameters &parameters, const Material::SymmetricTensor &t_log_stretch, double &energy, PackedStress *stress_ptr=nullptr, PackedTangent *tangent_ptr=nullptr)
 
- Static Public Member Functions inherited from EshelbianPlasticity::PhysicalEquations
static MoFEMErrorCode create (EshelbianCore &ep)
 Select and configure the material before registering fields and DMs.
 

Private Member Functions

AuxiliaryLogarithmicMaterialParameters prepareAuxiliaryEvaluation (const boost::shared_ptr< DataAtIntegrationPts > &data_ptr)
 
MoFEMErrorCode getOptions ()
 
MoFEMErrorCode extractBlockData ()
 

Static Private Member Functions

static MoFEMErrorCode checkDirectConfiguration ()
 
static boost::shared_ptr< HMHNeohookeangetMaterial (const boost::shared_ptr< DataAtIntegrationPts > &data_ptr)
 
static VolUserDataOperatorretiredInverse ()
 

Private Attributes

MoFEM::InterfacemField
 
Material::Parameters defaultParameters
 
double alphaGradU = 0.
 
std::vector< BlockDatablockData
 

Additional Inherited Members

- Static Public Attributes inherited from EshelbianPlasticity::PhysicalEquations
static const Features noStretchMask
 
- Protected Attributes inherited from EshelbianPlasticity::PhysicalEquations
Features materialFeatures
 

Detailed Description

Definition at line 15 of file HMHNeohookean.cpp.

Member Typedef Documentation

◆ FormBase

using EshelbianPlasticity::HMHNeohookean::FormBase = typename FormsIntegrators<VolUserDataOperator>::Assembly<A>::OpBase

Definition at line 19 of file HMHNeohookean.cpp.

◆ Material

Definition at line 16 of file HMHNeohookean.cpp.

◆ PackedStress

Definition at line 17 of file HMHNeohookean.cpp.

◆ PackedTangent

Definition at line 18 of file HMHNeohookean.cpp.

Constructor & Destructor Documentation

◆ HMHNeohookean()

EshelbianPlasticity::HMHNeohookean::HMHNeohookean ( MoFEM::Interface m_field,
const double  c10,
const double  bulk_modulus,
const Features  features 
)
inline

Definition at line 42 of file HMHNeohookean.cpp.

45 defaultParameters{c10, bulk_modulus} {
46 if ((getFeatures() & noStretchMask).any())
49 "Neo-Hookean -no_stretch physical-stress recovery was "
50 "retired; omit -no_stretch and solve the material fields");
54 "Neo-Hookean requires natural logarithms: -stretches log");
55 CHK_THROW_MESSAGE(getOptions(), "Neo-Hookean options are invalid");
57 "Neo-Hookean material blocks are invalid");
58 }
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
@ MOFEM_NOT_IMPLEMENTED
Definition definitions.h:32
const char features[]
static enum StretchSelector stretchSelector
PhysicalEquations(MaterialModel model, Features features)

Member Function Documentation

◆ checkDirectConfiguration()

static MoFEMErrorCode EshelbianPlasticity::HMHNeohookean::checkDirectConfiguration ( )
inlinestaticprivate

Definition at line 577 of file HMHNeohookean.cpp.

577 {
580 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
581 "Neo-Hookean direct material equations require -grad no_h1");
584 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
585 "Neo-Hookean direct material equations require "
586 "-rotations large or -rotations small");
588 }
#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()
static enum RotSelector rotSelector
static enum RotSelector gradApproximator

◆ evaluateDirect()

static MoFEMErrorCode EshelbianPlasticity::HMHNeohookean::evaluateDirect ( const Material::Parameters parameters,
const Material::SymmetricTensor t_log_stretch,
double energy,
PackedStress stress_ptr = nullptr,
PackedTangent tangent_ptr = nullptr 
)
inlinestatic

Map derivatives from five orthonormal coordinates and theta to the six raw symmetric coefficients. SymmLTensor supplies both shear occurrences.

Definition at line 75 of file HMHNeohookean.cpp.

78 {
80 FTENSOR_INDEXES(3, i, j);
82 FTensor::Index<'a', 5> a;
83 FTensor::Index<'b', 5> b;
84 const auto t_coordinates = Material::getCoordinates(t_log_stretch);
85 Material::Coordinates t_stress;
86 Material::Tangent t_hessian;
88 CHKERR Material::evaluateDeviator(parameters, t_coordinates, energy,
89 stress_ptr ? &t_stress : nullptr,
90 tangent_ptr ? &t_hessian : nullptr);
91 CHKERR Material::evaluateVolume(parameters, t_log_stretch(i, i), volume);
92 energy += volume.energy;
93 if (!std::isfinite(energy))
94 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
95 "Neo-Hookean total strain energy is not representable");
96 const auto t_packed_basis = FTensor::SymmLTensor<double, 3>();
97 constexpr auto t_identity = FTensor::Kronecker_Delta_symmetric<int>();
98 if (stress_ptr) {
99 const auto t_deviatoric_stress = Material::getTensor(t_stress);
100 Material::SymmetricTensor t_total_stress;
101 t_total_stress(i, j) =
102 t_deviatoric_stress(i, j) + volume.firstDerivative * t_identity(i, j);
103 (*stress_ptr)(L) = t_packed_basis(i, j, L) * t_total_stress(i, j);
104 for (int component = 0; component != size_symm; ++component)
105 if (!std::isfinite((*stress_ptr)(component)))
106 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
107 "Neo-Hookean packed material stress is not representable");
108 }
109 if (tangent_ptr) {
110 const auto &t_basis = Tensor2SymmetricDeviatorBasis::getBasis();
112 t_projection(a, L) = t_basis(i, j, a) * t_packed_basis(i, j, L);
113 PackedStress t_trace;
114 t_trace(L) = t_packed_basis(i, j, L) * t_identity(i, j);
115 FTensor::Tensor2<double, 5, size_symm> t_hessian_projection;
116 t_hessian_projection(a, J) = t_hessian(a, b) * t_projection(b, J);
117 (*tangent_ptr)(L, J) = t_projection(a, L) * t_hessian_projection(a, J) +
118 volume.secondDerivative * t_trace(L) * t_trace(J);
119 for (int row = 0; row != size_symm; ++row)
120 for (int col = 0; col != size_symm; ++col)
121 if (!std::isfinite((*tangent_ptr)(row, col)))
122 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
123 "Neo-Hookean packed material tangent is not representable");
124 }
126 }
#define FTENSOR_INDEXES(DIM,...)
constexpr double a
Kronecker Delta class symmetric.
@ MOFEM_OPERATION_UNSUCCESSFUL
Definition definitions.h:34
#define CHKERR
Inline error check.
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'J', DIM1 > J
Definition level_set.cpp:30
FTensor::Index< 'j', 3 > j
static constexpr auto size_symm
FTensor::Tensor1< double, size_symm > PackedStress
static SymmetricTensor getTensor(const Coordinates &t_coordinates, double theta=0.)
Reconstruct H = D + theta*I/3 from the fixed five-coordinate basis.
static MoFEMErrorCode evaluateDeviator(const Parameters &parameters, const Coordinates &t_deviator, double &energy, Coordinates *stress_ptr=nullptr, Tangent *hessian_ptr=nullptr)
Evaluate f(D), optionally its five-component gradient and Hessian.
static Coordinates getCoordinates(const SymmetricTensor &t_tensor)
Project a symmetric tensor onto the fixed trace-free basis.
static MoFEMErrorCode evaluateVolume(const Parameters &parameters, double theta, VolumeState &state)
Evaluate g(J) = K*(J-1)^2/2 and its logarithmic-volume derivatives.

◆ extractBlockData()

MoFEMErrorCode EshelbianPlasticity::HMHNeohookean::extractBlockData ( )
inlineprivate

Definition at line 646 of file HMHNeohookean.cpp.

646 {
648 auto meshsets = mField.getInterface<MeshsetsManager>();
649 auto json_config = mField.getInterface<JsonConfigManager>();
650 for (const auto block :
651 meshsets->getCubitMeshsetPtr(std::regex("MAT_NEOHOOKEAN(.*)"))) {
652 Material::Parameters parameters;
653 const auto json_parameters = json_config->getParamsFromBlockset(
654 "MAT_NEOHOOKEAN", block->getMeshsetId());
655 if (!json_parameters.empty()) {
656 if (json_parameters.size() != 2 || !json_parameters.count("c10") ||
657 !json_parameters.count("k"))
659 "MAT_NEOHOOKEAN JSON block must contain exactly c10,k");
660 parameters = {json_parameters.at("c10"), json_parameters.at("k")};
661 } else {
662 std::vector<double> attributes;
663 CHKERR block->getAttributes(attributes);
664 if (attributes.size() < 2)
666 "MAT_NEOHOOKEAN block requires C10,K attributes");
667 parameters = {attributes[0], attributes[1]};
668 }
670 Range entities;
671 CHKERR mField.get_moab().get_entities_by_handle(block->getMeshset(),
672 entities, true);
673 blockData.push_back({parameters, std::move(entities)});
674 MOFEM_LOG("EP", Sev::inform)
675 << "MAT_NEOHOOKEAN " << block->getMeshsetId()
676 << " C10=" << parameters.c10 << " K=" << parameters.bulkModulus;
677 }
679 }
@ MOFEM_DATA_INCONSISTENCY
Definition definitions.h:31
#define MOFEM_LOG(channel, severity)
Log.
std::vector< BlockData > blockData
static MoFEMErrorCode validateParameters(const Parameters &parameters)
Check finite, strictly positive C10, K and representable mu = 2*C10.
virtual moab::Interface & get_moab()=0
virtual MPI_Comm & get_comm() const =0
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.

◆ getMaterial()

static boost::shared_ptr< HMHNeohookean > EshelbianPlasticity::HMHNeohookean::getMaterial ( const boost::shared_ptr< DataAtIntegrationPts > &  data_ptr)
inlinestaticprivate

Definition at line 591 of file HMHNeohookean.cpp.

591 {
592 if (!data_ptr)
594 "Neo-Hookean integration-point data is missing");
595 const auto material_ptr =
596 boost::dynamic_pointer_cast<HMHNeohookean>(data_ptr->physicsPtr);
597 if (!material_ptr)
599 "Neo-Hookean material pointer is missing");
600 return material_ptr;
601 }

◆ getOptions()

MoFEMErrorCode EshelbianPlasticity::HMHNeohookean::getOptions ( )
inlineprivate

Definition at line 610 of file HMHNeohookean.cpp.

610 {
612 PetscOptionsBegin(mField.get_comm(), "neo_hookean_", "Neo-Hookean material",
613 "none");
614 CHKERR PetscOptionsScalar("-c10", "C10", "", defaultParameters.c10,
615 &defaultParameters.c10, nullptr);
616 CHKERR PetscOptionsScalar("-K", "Bulk modulus", "",
619 CHKERR PetscOptionsScalar("-viscosity_alpha_grad_u",
620 "Logarithmic-stretch-gradient rate viscosity", "",
621 alphaGradU, &alphaGradU, nullptr);
622 PetscOptionsEnd();
624 if (!std::isfinite(alphaGradU))
625 SETERRQ(
627 "Neo-Hookean logarithmic-stretch-gradient viscosity must be finite");
628 char *options_ptr = nullptr;
629 CHKERR PetscOptionsGetAll(nullptr, &options_ptr);
630 std::istringstream options(options_ptr ? options_ptr : "");
631 CHKERR PetscFree(options_ptr);
632 std::string option;
633 while (options >> option)
634 if (option.rfind("-nh_stretch_", 0) == 0 ||
635 option == "-neo_hookean_min_eigen_value")
637 "Option %s belongs to the retired Neo-Hookean physical inverse "
638 "or tangent projection; remove it",
639 option.c_str());
640 MOFEM_LOG("EP", Sev::inform) << "Neo-Hookean C10=" << defaultParameters.c10
642 << " alphaGradU=" << alphaGradU;
644 }

◆ getParameters()

Material::Parameters EshelbianPlasticity::HMHNeohookean::getParameters ( const EntityHandle  entity) const
inline

Definition at line 60 of file HMHNeohookean.cpp.

60 {
61 for (const auto &block : blockData)
62 if (block.entities.find(entity) != block.entities.end())
63 return block.parameters;
64 if (!blockData.empty())
67 "MAT_NEOHOOKEAN blocks must cover every material element");
68 return defaultParameters;
69 }

◆ prepareAuxiliaryEvaluation()

AuxiliaryLogarithmicMaterialParameters EshelbianPlasticity::HMHNeohookean::prepareAuxiliaryEvaluation ( const boost::shared_ptr< DataAtIntegrationPts > &  data_ptr)
inlineprivate

Definition at line 566 of file HMHNeohookean.cpp.

567 {
568 if (!data_ptr)
570 "Auxiliary material evaluation requires field data");
571 if (!data_ptr->auxiliaryMaterialData)
572 data_ptr->auxiliaryMaterialData =
573 boost::make_shared<AuxiliaryLogarithmicStressMaterialData>();
574 return [this](EntityHandle entity) { return getParameters(entity); };
575 }
Material::Parameters getParameters(const EntityHandle entity) const

◆ providesHelmholtzFreeEnergy()

bool EshelbianPlasticity::HMHNeohookean::providesHelmholtzFreeEnergy ( ) const
inlineoverridevirtual

True when the material supplies its Helmholtz free energy.

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 187 of file HMHNeohookean.cpp.

187{ return true; }

◆ pushAuxiliaryLogarithmicMaterialEvaluation()

MoFEMErrorCode EshelbianPlasticity::HMHNeohookean::pushAuxiliaryLogarithmicMaterialEvaluation ( const EshelbianCore ep,
boost::ptr_deque< UserDataOperator > &  pipeline,
boost::shared_ptr< DataAtIntegrationPts data_ptr,
bool  lhs 
)
inlineoverridevirtual

Evaluate the auxiliary material copy and energies without assembly.

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 22 of file HMHNeohookean.cpp.

24 {
26 auto parameters = prepareAuxiliaryEvaluation(data_ptr);
28 ep, pipeline, data_ptr, data_ptr->auxiliaryMaterialData,
29 std::move(parameters), lhs);
31 }
MoFEMErrorCode pushAuxiliaryLogarithmicMaterialEvaluation(const EshelbianCore &ep, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data, boost::shared_ptr< AuxiliaryLogarithmicStressMaterialData > material_data, AuxiliaryLogarithmicMaterialParameters parameters, bool lhs=false)
AuxiliaryLogarithmicMaterialParameters prepareAuxiliaryEvaluation(const boost::shared_ptr< DataAtIntegrationPts > &data_ptr)

◆ pushAuxiliaryLogarithmicStressOps()

MoFEMErrorCode EshelbianPlasticity::HMHNeohookean::pushAuxiliaryLogarithmicStressOps ( const EshelbianCore ep,
boost::ptr_deque< UserDataOperator > &  pipeline,
boost::shared_ptr< DataAtIntegrationPts data_ptr,
bool  lhs 
)
inlineoverridevirtual

Assemble the selected material field group after kinematic reconstruction.

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 33 of file HMHNeohookean.cpp.

35 {
38 ep, pipeline, data_ptr->auxiliaryMaterialData, lhs);
40 }
MoFEMErrorCode pushAuxiliaryLogarithmicMaterialOps(const EshelbianCore &ep, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, boost::shared_ptr< AuxiliaryLogarithmicStressMaterialData > material_data, bool lhs)

◆ pushHelmholtzStateGradient()

MoFEMErrorCode EshelbianPlasticity::HMHNeohookean::pushHelmholtzStateGradient ( const EshelbianCore ep,
boost::ptr_deque< UserDataOperator > &  pipeline,
boost::shared_ptr< DataAtIntegrationPts data_ptr 
)
inlineoverridevirtual

Assemble the physical Helmholtz state derivative at equilibrium.

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 243 of file HMHNeohookean.cpp.

245 {
249 data_ptr);
251 }
252 auto deviator_gradient = boost::make_shared<MatrixDouble>();
253 auto volume_gradient = boost::make_shared<MatrixDouble>();
254 pipeline.push_back(new OpAuxiliaryHelmholtzGradient(
255 data_ptr, deviator_gradient, volume_gradient));
256 using OpDeviatorGradient = FormsIntegrators<VolUserDataOperator>::Assembly<
258 using OpVolumeGradient = FormsIntegrators<VolUserDataOperator>::Assembly<
260 pipeline.push_back(
261 new OpDeviatorGradient(ep.logDeviator, deviator_gradient));
262 pipeline.push_back(new OpVolumeGradient(ep.logJacobian, volume_gradient));
264 }
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
constexpr AssemblyType A
const std::string logDeviator
const std::string logJacobian
virtual MoFEMErrorCode pushHelmholtzStateGradient(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
Assemble the physical Helmholtz state derivative at equilibrium.
@ AUXILIARY_LOGARITHMIC_STRESS
Auxiliary logarithmic stress formulation.

◆ retiredInverse()

static VolUserDataOperator * EshelbianPlasticity::HMHNeohookean::retiredInverse ( )
inlinestaticprivate

Definition at line 603 of file HMHNeohookean.cpp.

603 {
605 "Neo-Hookean physical-stress-to-stretch recovery was "
606 "retired; solve the logarithmic material fields");
607 return nullptr;
608 }

◆ returnOpCalculateExternalPressure()

VolUserDataOperator * EshelbianPlasticity::HMHNeohookean::returnOpCalculateExternalPressure ( VectorPtr  pressure_ptr,
boost::shared_ptr< ExternalStrainVec external_strain_ptr,
std::map< std::string, boost::shared_ptr< ScalingMethod > >  scaling_methods 
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 530 of file HMHNeohookean.cpp.

534 {
535 return new OpCalculateExternalPressure(std::move(pressure_ptr),
536 std::move(external_strain_ptr),
537 std::move(scaling_methods));
538 }
Calculate q = 3 K_ext epsilon_ext at integration points.

◆ returnOpCalculateHelmholtzFreeEnergy()

VolUserDataOperator * EshelbianPlasticity::HMHNeohookean::returnOpCalculateHelmholtzFreeEnergy ( boost::shared_ptr< DataAtIntegrationPts data_ptr,
boost::shared_ptr< double total_energy_ptr 
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 181 of file HMHNeohookean.cpp.

183 {
184 return new OpEnergy(std::move(data_ptr), std::move(total_energy_ptr));
185 }

◆ returnOpCalculateStretchFromStress() [1/3]

VolUserDataOperator * EshelbianPlasticity::HMHNeohookean::returnOpCalculateStretchFromStress ( boost::shared_ptr< DataAtIntegrationPts ,
boost::shared_ptr< PhysicalEquations ,
boost::shared_ptr< MatrixDouble >   
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 541 of file HMHNeohookean.cpp.

543 {
544 return retiredInverse();
545 }
static VolUserDataOperator * retiredInverse()

◆ returnOpCalculateStretchFromStress() [2/3]

VolUserDataOperator * EshelbianPlasticity::HMHNeohookean::returnOpCalculateStretchFromStress ( boost::shared_ptr< DataAtIntegrationPts ,
boost::shared_ptr< PhysicalEquations ,
boost::shared_ptr< MatrixDouble >  ,
boost::shared_ptr< MatrixDouble >  ,
VectorPtr   
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 553 of file HMHNeohookean.cpp.

556 {
557 return retiredInverse();
558 }

◆ returnOpCalculateStretchFromStress() [3/3]

VolUserDataOperator * EshelbianPlasticity::HMHNeohookean::returnOpCalculateStretchFromStress ( boost::shared_ptr< DataAtIntegrationPts ,
boost::shared_ptr< PhysicalEquations ,
boost::shared_ptr< MatrixDouble >  ,
VectorPtr   
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 547 of file HMHNeohookean.cpp.

550 {
551 return retiredInverse();
552 }

◆ returnOpCalculateVarStretchFromStress()

VolUserDataOperator * EshelbianPlasticity::HMHNeohookean::returnOpCalculateVarStretchFromStress ( boost::shared_ptr< DataAtIntegrationPts ,
boost::shared_ptr< PhysicalEquations  
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 559 of file HMHNeohookean.cpp.

561 {
562 return retiredInverse();
563 }

◆ returnOpJacobian()

UserDataOperator * EshelbianPlasticity::HMHNeohookean::returnOpJacobian ( const bool  eval_rhs,
const bool  eval_lhs,
boost::shared_ptr< DataAtIntegrationPts data_ptr,
boost::shared_ptr< PhysicalEquations physics_ptr 
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 135 of file HMHNeohookean.cpp.

137 {
138 return new OpJacobian(eval_rhs, eval_lhs, std::move(data_ptr),
139 std::move(physics_ptr));
140 }

◆ returnOpSpatialPhysical()

VolUserDataOperator * EshelbianPlasticity::HMHNeohookean::returnOpSpatialPhysical ( const std::string &  field,
boost::shared_ptr< DataAtIntegrationPts data_ptr,
const double  alpha_u 
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 350 of file HMHNeohookean.cpp.

352 {
353 return new OpResidual(field, std::move(data_ptr), alpha_u);
354 }

◆ returnOpSpatialPhysical_du_du()

VolUserDataOperator * EshelbianPlasticity::HMHNeohookean::returnOpSpatialPhysical_du_du ( std::string  row_field,
std::string  col_field,
boost::shared_ptr< DataAtIntegrationPts data_ptr,
const double  alpha_u 
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 448 of file HMHNeohookean.cpp.

451 {
452 return new OpTangent(row_field, col_field, std::move(data_ptr), alpha_u);
453 }

◆ returnOpSpatialPhysicalExternalStrain()

VolUserDataOperator * EshelbianPlasticity::HMHNeohookean::returnOpSpatialPhysicalExternalStrain ( const std::string &  field,
boost::shared_ptr< DataAtIntegrationPts ,
boost::shared_ptr< ExternalStrainVec external_strain_ptr,
std::map< std::string, boost::shared_ptr< ScalingMethod > >  scaling_methods 
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 521 of file HMHNeohookean.cpp.

525 {
526 return new OpExternalStrain(field, std::move(external_strain_ptr),
527 std::move(scaling_methods));
528 }

Member Data Documentation

◆ alphaGradU

double EshelbianPlasticity::HMHNeohookean::alphaGradU = 0.
private

Definition at line 687 of file HMHNeohookean.cpp.

◆ blockData

std::vector<BlockData> EshelbianPlasticity::HMHNeohookean::blockData
private

Definition at line 688 of file HMHNeohookean.cpp.

◆ defaultParameters

Material::Parameters EshelbianPlasticity::HMHNeohookean::defaultParameters
private

Definition at line 686 of file HMHNeohookean.cpp.

◆ mField

MoFEM::Interface& EshelbianPlasticity::HMHNeohookean::mField
private

Definition at line 685 of file HMHNeohookean.cpp.


The documentation for this struct was generated from the following file: