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

Classes

struct  BlockData
 
struct  DerivedParameters
 
struct  MaterialParameters
 
struct  OpCalculateStretchFromStress
 Evaluate Storakers stretch and its tangent from the supplied stress. More...
 
struct  OpJacobian
 
struct  OpSpatialPhysical
 Assemble the full-order equation conjugate to H = log(U) More...
 
struct  OpSpatialPhysical_du_du
 Assemble the consistent full-order H–H tangent. More...
 
struct  OpSpatialPhysicalExternalStrain
 Assemble the isotropic external-strain contribution. More...
 
struct  StressToStrech
 Recover the right stretch from a symmetric Biot stress. More...
 

Public Member Functions

 HMHStorakers (MoFEM::Interface &m_field, const double eta, const double mu, const double beta)
 
MaterialParameters getMaterialParameters (const EntityHandle ent) const
 
UserDataOperatorreturnOpJacobian (const bool eval_rhs, const bool eval_lhs, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr) override
 
MoFEMErrorCode getOptions ()
 
MoFEMErrorCode extractBlockData (const Sev sev)
 
MoFEMErrorCode extractBlockData (std::vector< const CubitMeshSets * > meshset_vec_ptr, const Sev sev)
 
VolUserDataOperatorreturnOpSpatialPhysical (const std::string &field_name, 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_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< ExternalStrainVec > external_strain_vec_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv) override
 
VolUserDataOperatorreturnOpCalculateExternalPressure (VectorPtr external_pressure_ptr, boost::shared_ptr< ExternalStrainVec > external_strain_vec_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv) override
 
VolUserDataOperatorreturnOpCalculateStretchFromStress (boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr, boost::shared_ptr< MatrixDouble > strain_ptr) override
 
VolUserDataOperatorreturnOpCalculateStretchFromStress (boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr, boost::shared_ptr< MatrixDouble > strain_ptr, VectorPtr external_pressure_ptr) override
 
- Public Member Functions inherited from EshelbianPlasticity::PhysicalEquations
 PhysicalEquations ()=default
 
virtual ~PhysicalEquations ()=default
 
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)
 
virtual VolUserDataOperatorreturnOpCalculateEnergy (boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< double > total_energy_ptr)
 
virtual VolUserDataOperatorreturnOpCalculateVarStretchFromStress (boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr)
 

Static Public Member Functions

static DerivedParameters getDerivedParameters (const double mu, const double beta)
 
static double getMu1 (const MaterialParameters &parameters)
 
static double getMu2 (const MaterialParameters &parameters)
 
template<typename T >
static double getLogJacobian (T &principal_hencky_stretches)
 
template<typename T >
static double getJacobianPower (const MaterialParameters &parameters, T &principal_hencky_stretches)
 
static double getGamma (const MaterialParameters &parameters, const double jacobian_power)
 
static double getGammaY (const MaterialParameters &parameters, const double jacobian_power)
 
static double getPrincipalCoordinateStress (const MaterialParameters &parameters, const double gamma, const double hencky_stretch)
 
static double getPrincipalCoordinateStressDerivativeAtFixedGamma (const MaterialParameters &parameters, const double hencky_stretch)
 

Static Private Member Functions

static MoFEMErrorCode validateParameters (const MaterialParameters &parameters, const char *source)
 

Private Attributes

MoFEM::InterfacemField
 
MaterialParameters defaultParameters
 
double alphaGradU = 0
 
std::vector< BlockDatablockData
 

Detailed Description

Definition at line 22 of file HMHStorakers.cpp.

Constructor & Destructor Documentation

◆ HMHStorakers()

EshelbianPlasticity::HMHStorakers::HMHStorakers ( MoFEM::Interface m_field,
const double  eta,
const double  mu,
const double  beta 
)
inline

Definition at line 35 of file HMHStorakers.cpp.

37 : mField(m_field), defaultParameters{eta, mu, beta} {
38 CHK_THROW_MESSAGE(getOptions(), "get options failed");
40 "extract block data failed");
41
44 }
47 "Storakers requires natural logarithmic stretch");
48 }
49 }
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
@ MOFEM_DATA_INCONSISTENCY
Definition definitions.h:31
double eta
static enum StretchSelector stretchSelector
static enum StretchHandling stretchHandling
static bool isNoStretch()
MoFEMErrorCode extractBlockData(const Sev sev)

Member Function Documentation

◆ extractBlockData() [1/2]

MoFEMErrorCode EshelbianPlasticity::HMHStorakers::extractBlockData ( const Sev  sev)
inline

Definition at line 183 of file HMHStorakers.cpp.

183 {
184 return extractBlockData(
185 mField.getInterface<MeshsetsManager>()->getCubitMeshsetPtr(
186 std::regex((boost::format("%s(.*)") % "MAT_STORAKES").str())),
187 sev);
188 }
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.

◆ extractBlockData() [2/2]

MoFEMErrorCode EshelbianPlasticity::HMHStorakers::extractBlockData ( std::vector< const CubitMeshSets * >  meshset_vec_ptr,
const Sev  sev 
)
inline

Definition at line 191 of file HMHStorakers.cpp.

192 {
194
195 for (const auto meshset : meshset_vec_ptr) {
196 MOFEM_LOG("EP", sev) << *meshset;
197
198 std::vector<double> attributes;
199 CHKERR meshset->getAttributes(attributes);
200
201 const auto json_parameters =
202 mField.getInterface<JsonConfigManager>()->getParamsFromBlockset(
203 "MAT_STORAKES", meshset->getMeshsetId());
204
205 MaterialParameters parameters{};
206 if (!json_parameters.empty()) {
207 if (json_parameters.size() != 3 ||
208 json_parameters.find("eta") == json_parameters.end() ||
209 json_parameters.find("mu") == json_parameters.end() ||
210 json_parameters.find("beta") == json_parameters.end()) {
211 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
212 "MAT_STORAKES JSON block must have exactly three "
213 "attributes: eta, mu, beta");
214 }
215 parameters = {json_parameters.at("eta"), json_parameters.at("mu"),
216 json_parameters.at("beta")};
217 } else {
218 if (attributes.size() != 3) {
219 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
220 "MAT_STORAKES block must have exactly three attributes: "
221 "eta, mu, beta");
222 }
223 parameters = {attributes[0], attributes[1], attributes[2]};
224 }
225 CHKERR validateParameters(parameters, "MAT_STORAKES block");
226
227 Range entities;
228 CHKERR mField.get_moab().get_entities_by_handle(meshset->meshset,
229 entities, true);
230 blockData.push_back(
231 {parameters.eta, parameters.mu, parameters.beta, entities});
232
233 const auto derived = getDerivedParameters(parameters.mu, parameters.beta);
234 MOFEM_LOG("EP", sev) << "MatBlock Storakers: eta = " << parameters.eta
235 << ", mu = " << parameters.mu
236 << ", beta = " << parameters.beta
237 << ", K = " << derived.bulkModulus
238 << ", nu = " << derived.poissonRatio
239 << ", lambda_L = " << derived.lameLambda
240 << ", nb. entities = " << entities.size();
241 }
242
244 }
#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.
#define MOFEM_LOG(channel, severity)
Log.
std::vector< BlockData > blockData
static DerivedParameters getDerivedParameters(const double mu, const double beta)
static MoFEMErrorCode validateParameters(const MaterialParameters &parameters, const char *source)
virtual moab::Interface & get_moab()=0

◆ getDerivedParameters()

static DerivedParameters EshelbianPlasticity::HMHStorakers::getDerivedParameters ( const double  mu,
const double  beta 
)
inlinestatic

Definition at line 51 of file HMHStorakers.cpp.

52 {
53 return {
54 2 * mu * (beta + 1. / 3.),
55 beta / (1 + 2 * beta),
56 2 * beta * mu,
57 };
58 }

◆ getGamma()

static double EshelbianPlasticity::HMHStorakers::getGamma ( const MaterialParameters parameters,
const double  jacobian_power 
)
inlinestatic

Definition at line 83 of file HMHStorakers.cpp.

84 {
85 const double mu1 = getMu1(parameters);
86 const double mu2 = getMu2(parameters);
87 return 2 * mu1 * jacobian_power +
88 mu2 * jacobian_power * jacobian_power;
89 }
static double getMu1(const MaterialParameters &parameters)
static double getMu2(const MaterialParameters &parameters)

◆ getGammaY()

static double EshelbianPlasticity::HMHStorakers::getGammaY ( const MaterialParameters parameters,
const double  jacobian_power 
)
inlinestatic

Definition at line 91 of file HMHStorakers.cpp.

92 {
93 const double mu1 = getMu1(parameters);
94 const double mu2 = getMu2(parameters);
95 return 2 * mu1 * jacobian_power +
96 2 * mu2 * jacobian_power * jacobian_power;
97 }

◆ getJacobianPower()

template<typename T >
static double EshelbianPlasticity::HMHStorakers::getJacobianPower ( const MaterialParameters parameters,
T &  principal_hencky_stretches 
)
inlinestatic

Definition at line 76 of file HMHStorakers.cpp.

78 {
79 return std::exp(-parameters.beta *
80 getLogJacobian(principal_hencky_stretches));
81 }
static double getLogJacobian(T &principal_hencky_stretches)

◆ getLogJacobian()

template<typename T >
static double EshelbianPlasticity::HMHStorakers::getLogJacobian ( T &  principal_hencky_stretches)
inlinestatic

Definition at line 69 of file HMHStorakers.cpp.

69 {
71 constexpr auto t_one = FTensor::One<>();
72 return principal_hencky_stretches(i) * t_one(i);
73 }
#define FTENSOR_INDEX(DIM, I)
constexpr int SPACE_DIM
Stateless vector whose components are all equal to one.
Definition One.hpp:22
FTensor::Index< 'i', SPACE_DIM > i

◆ getMaterialParameters()

MaterialParameters EshelbianPlasticity::HMHStorakers::getMaterialParameters ( const EntityHandle  ent) const
inline

Definition at line 114 of file HMHStorakers.cpp.

114 {
115 for (const auto &block : blockData) {
116 if (block.blockEnts.find(ent) != block.blockEnts.end()) {
117 return {block.eta, block.mu, block.beta};
118 }
119 }
120
121 if (!blockData.empty()) {
123 "Storakers material block not found for entity. If "
124 "blocks are used, assign all material entities");
125 }
126
127 return defaultParameters;
128 }

◆ getMu1()

static double EshelbianPlasticity::HMHStorakers::getMu1 ( const MaterialParameters parameters)
inlinestatic

Definition at line 60 of file HMHStorakers.cpp.

60 {
61 return (1 - parameters.eta) * parameters.mu;
62 }

◆ getMu2()

static double EshelbianPlasticity::HMHStorakers::getMu2 ( const MaterialParameters parameters)
inlinestatic

Definition at line 64 of file HMHStorakers.cpp.

64 {
65 return parameters.eta * parameters.mu;
66 }

◆ getOptions()

MoFEMErrorCode EshelbianPlasticity::HMHStorakers::getOptions ( )
inline

Definition at line 144 of file HMHStorakers.cpp.

144 {
146
147 PetscOptionsBegin(PETSC_COMM_WORLD, "storakers_", "Storakers material",
148 "none");
149 CHKERR PetscOptionsScalar("-eta", "Blend fraction eta", "",
151 PETSC_NULLPTR);
152 CHKERR PetscOptionsScalar("-mu", "Infinitesimal shear modulus mu", "",
154 PETSC_NULLPTR);
155 CHKERR PetscOptionsScalar("-beta", "Compressibility parameter beta", "",
157 PETSC_NULLPTR);
158 alphaGradU = 0;
159 CHKERR PetscOptionsScalar("-viscosity_alpha_grad_u", "viscosity", "",
160 alphaGradU, &alphaGradU, PETSC_NULLPTR);
161 PetscOptionsEnd();
162
163 CHKERR validateParameters(defaultParameters, "default options");
164
165 const auto derived =
167 MOFEM_LOG("EP", Sev::inform)
168 << "MatBlock Storakers (default): "
169 << "eta = " << defaultParameters.eta
170 << ", mu = " << defaultParameters.mu
171 << ", beta = " << defaultParameters.beta
172 << ", K = " << derived.bulkModulus << ", nu = " << derived.poissonRatio
173 << ", lambda_L = " << derived.lameLambda
174 << ", grad alpha u = " << alphaGradU;
175 MOFEM_LOG("EP", Sev::inform)
176 << "Storakers conversions: mu_1 = (1 - eta)*mu; mu_2 = eta*mu; "
177 "lambda_L = 2*beta*mu; K = 2*mu*(beta + 1/3); "
178 "nu = beta/(1 + 2*beta); beta = nu/(1 - 2*nu)";
179
181 }

◆ getPrincipalCoordinateStress()

static double EshelbianPlasticity::HMHStorakers::getPrincipalCoordinateStress ( const MaterialParameters parameters,
const double  gamma,
const double  hencky_stretch 
)
inlinestatic

Definition at line 99 of file HMHStorakers.cpp.

101 {
102 const double stretch = std::exp(hencky_stretch);
103 return 2 * getMu1(parameters) * stretch +
104 getMu2(parameters) * stretch * stretch - gamma;
105 }

◆ getPrincipalCoordinateStressDerivativeAtFixedGamma()

static double EshelbianPlasticity::HMHStorakers::getPrincipalCoordinateStressDerivativeAtFixedGamma ( const MaterialParameters parameters,
const double  hencky_stretch 
)
inlinestatic

Definition at line 107 of file HMHStorakers.cpp.

108 {
109 const double stretch = std::exp(hencky_stretch);
110 return 2 * getMu1(parameters) * stretch +
111 2 * getMu2(parameters) * stretch * stretch;
112 }

◆ returnOpCalculateExternalPressure()

VolUserDataOperator * EshelbianPlasticity::HMHStorakers::returnOpCalculateExternalPressure ( VectorPtr  external_pressure_ptr,
boost::shared_ptr< ExternalStrainVec external_strain_vec_ptr,
std::map< std::string, boost::shared_ptr< ScalingMethod > >  smv 
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 1160 of file HMHStorakers.cpp.

1163 {
1164 return new OpCalculateExternalPressure(
1165 std::move(external_pressure_ptr),
1166 std::move(external_strain_vec_ptr), std::move(smv));
1167 }
Calculate q = 3 K_ext epsilon_ext at integration points.

◆ returnOpCalculateStretchFromStress() [1/2]

VolUserDataOperator * EshelbianPlasticity::HMHStorakers::returnOpCalculateStretchFromStress ( boost::shared_ptr< DataAtIntegrationPts data_ptr,
boost::shared_ptr< PhysicalEquations physics_ptr,
boost::shared_ptr< MatrixDouble >  strain_ptr 
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 1190 of file HMHStorakers.cpp.

1193 {
1195 std::move(data_ptr), std::move(physics_ptr), std::move(strain_ptr),
1196 nullptr);
1197 }
VolUserDataOperator * returnOpCalculateStretchFromStress(boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr, boost::shared_ptr< MatrixDouble > strain_ptr) override

◆ returnOpCalculateStretchFromStress() [2/2]

VolUserDataOperator * EshelbianPlasticity::HMHStorakers::returnOpCalculateStretchFromStress ( boost::shared_ptr< DataAtIntegrationPts data_ptr,
boost::shared_ptr< PhysicalEquations physics_ptr,
boost::shared_ptr< MatrixDouble >  strain_ptr,
VectorPtr  external_pressure_ptr 
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 1199 of file HMHStorakers.cpp.

1203 {
1204 auto storakers_ptr = boost::dynamic_pointer_cast<HMHStorakers>(physics_ptr);
1205 if (!storakers_ptr) {
1207 "Pointer to HMHStorakers is null");
1208 }
1209
1210 return new OpCalculateStretchFromStress(
1211 data_ptr,
1212 strain_ptr ? strain_ptr : data_ptr->getLogStretchTensorAtPts(),
1213 data_ptr->getApproxPAtPts(), storakers_ptr,
1214 std::move(external_pressure_ptr));
1215 }

◆ returnOpJacobian()

UserDataOperator * EshelbianPlasticity::HMHStorakers::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 138 of file HMHStorakers.cpp.

140 {
141 return new OpJacobian(eval_rhs, eval_lhs, data_ptr, physics_ptr);
142 }

◆ returnOpSpatialPhysical()

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

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 267 of file HMHStorakers.cpp.

269 {
270 return new OpSpatialPhysical(field_name, data_ptr, alpha_u);
271 }
constexpr auto field_name

◆ returnOpSpatialPhysical_du_du()

VolUserDataOperator * EshelbianPlasticity::HMHStorakers::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 294 of file HMHStorakers.cpp.

297 {
298 return new OpSpatialPhysical_du_du(
299 std::move(row_field), std::move(col_field), std::move(data_ptr),
300 alpha_u);
301 }

◆ returnOpSpatialPhysicalExternalStrain()

VolUserDataOperator * EshelbianPlasticity::HMHStorakers::returnOpSpatialPhysicalExternalStrain ( const std::string &  field_name,
boost::shared_ptr< DataAtIntegrationPts data_ptr,
boost::shared_ptr< ExternalStrainVec external_strain_vec_ptr,
std::map< std::string, boost::shared_ptr< ScalingMethod > >  smv 
)
inlineoverridevirtual

Reimplemented from EshelbianPlasticity::PhysicalEquations.

Definition at line 1151 of file HMHStorakers.cpp.

1155 {
1156 return new OpSpatialPhysicalExternalStrain(
1157 field_name, data_ptr, external_strain_vec_ptr, std::move(smv));
1158 }

◆ validateParameters()

static MoFEMErrorCode EshelbianPlasticity::HMHStorakers::validateParameters ( const MaterialParameters parameters,
const char *  source 
)
inlinestaticprivate

Definition at line 1218 of file HMHStorakers.cpp.

1219 {
1221
1222 if (!std::isfinite(parameters.eta) || parameters.eta <= 0 ||
1223 parameters.eta > 1) {
1224 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
1225 "Storakers eta must satisfy 0 < eta <= 1 in %s", source);
1226 }
1227 if (!std::isfinite(parameters.mu) || parameters.mu <= 0) {
1228 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
1229 "Storakers mu must be positive in %s", source);
1230 }
1231 if (!std::isfinite(parameters.beta) || parameters.beta <= 0) {
1232 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
1233 "Storakers beta must be positive in %s", source);
1234 }
1235
1237 }

Member Data Documentation

◆ alphaGradU

double EshelbianPlasticity::HMHStorakers::alphaGradU = 0
private

Definition at line 1248 of file HMHStorakers.cpp.

◆ blockData

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

Definition at line 1249 of file HMHStorakers.cpp.

◆ defaultParameters

MaterialParameters EshelbianPlasticity::HMHStorakers::defaultParameters
private

Definition at line 1247 of file HMHStorakers.cpp.

◆ mField

MoFEM::Interface& EshelbianPlasticity::HMHStorakers::mField
private

Definition at line 1246 of file HMHStorakers.cpp.


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