v0.16.3
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
EshelbianPlasticity::PlasticIncrementalOptimizationProblem Struct Reference

#include "users_modules/eshelbian_plasticity/src/PlasticIncrementalOptimization.hpp"

Inheritance diagram for EshelbianPlasticity::PlasticIncrementalOptimizationProblem:
[legend]
Collaboration diagram for EshelbianPlasticity::PlasticIncrementalOptimizationProblem:
[legend]

Public Member Functions

 PlasticIncrementalOptimizationProblem (EshelbianCore &ep, SmartPetscObj< TS > ts)
 
std::string getName () const override
 
MoFEMErrorCode validate () override
 
DM getControlDM () const override
 
MoFEMErrorCode createControlData (SmartPetscObj< Vec > &committed_control, SmartPetscObj< Vec > &candidate_control) override
 
MoFEMErrorCode configureConstraintDM (DM constraint_dm) override
 
MoFEMErrorCode initialiseInequalityMultipliers (DM constraint_dm, Vec multipliers) override
 
MoFEMErrorCode initialiseReferenceControl (Vec committed_control, Vec reference_control) override
 
MoFEMErrorCode solveState (Vec state, EquilibriumSolveReport &report) override
 
MoFEMErrorCode restoreState (Vec state) override
 
MoFEMErrorCode evaluateConservativeValue (double &value) override
 
MoFEMErrorCode assembleConservativeGradient (Vec smooth_gradient) override
 
MoFEMErrorCode evaluateDissipation (Vec control, double &value) override
 
MoFEMErrorCode assembleObjectiveGradient (Vec control, Vec smooth_gradient, Vec objective_gradient) override
 
MoFEMErrorCode evaluateInequalityConstraints (Vec control, Vec constraints) override
 
MoFEMErrorCode assembleInequalityJacobian (Vec control, Vec smooth_gradient, Mat jacobian) override
 
MoFEMErrorCode assembleInequalityJacobianWithoutSmoothGradient (Vec control, Mat jacobian) override
 
MoFEMErrorCode validateSolution (DM constraint_dm, Vec control, Vec smooth_gradient, Vec inequality_multipliers, PetscReal gradient_tolerance, PetscReal constraint_tolerance, std::string &diagnostics) override
 
MoFEMErrorCode commit (Vec solution, Vec equilibrated_state, Vec committed_control, Vec candidate_control, Vec reference_control) override
 
const std::string & getPlasticFlowFieldName () const
 
const std::string & getPlasticKappaFieldName () const
 
double getInitialYieldStress () const
 
double getIsotropicHardeningModulus () const
 
double getDissipationRegularizationEpsilon () const
 
const std::string & getVolumeElementName () const
 
MoFEMErrorCode addConstitutiveGeometryOperators (boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline) const
 
- Public Member Functions inherited from EshelbianPlasticity::IncrementalOptimizationProblem
virtual ~IncrementalOptimizationProblem ()=default
 

Private Attributes

EshelbianCoreep
 
SmartPetscObj< TS > timeSolver
 
SmartPetscObj< Vec > fallbackJacobianSmoothGradient
 
double initialYieldStress = 1
 
double isotropicHardeningModulus = 0
 
double dissipationRegularizationEpsilon = 0
 

Detailed Description

Plasticity adapter; no plastic data is present in the generic context.

Definition at line 20 of file PlasticIncrementalOptimization.hpp.

Constructor & Destructor Documentation

◆ PlasticIncrementalOptimizationProblem()

EshelbianPlasticity::PlasticIncrementalOptimizationProblem::PlasticIncrementalOptimizationProblem ( EshelbianCore ep,
SmartPetscObj< TS >  ts 
)

Member Function Documentation

◆ addConstitutiveGeometryOperators()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::addConstitutiveGeometryOperators ( boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &  pipeline) const

Add geometry operators for local constitutive integration.

Definition at line 176 of file PlasticIncrementalOptimization.cpp.

177 {
178 // Only transformed quadrature weights are needed. Keep the P0 bases
179 // unchanged while evaluating vector-owned trial coefficients.
181 pipeline, {NOSPACE}, ep.materialH1Positions);
182}
@ NOSPACE
Definition definitions.h:83
const std::string materialH1Positions
Add operators pushing bases from local to physical configuration.

◆ assembleConservativeGradient()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::assembleConservativeGradient ( Vec  smooth_gradient)
overridevirtual

Assemble the reduced conservative gradient.

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 299 of file PlasticIncrementalOptimization.cpp.

300 {
301 return assembleReducedHelmholtzGradient(ep, timeSolver, smooth_gradient);
302}
MoFEMErrorCode assembleReducedHelmholtzGradient(EshelbianCore &ep, TS ts, Vec gradient)

◆ assembleInequalityJacobian()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::assembleInequalityJacobian ( Vec  control,
Vec  smooth_gradient,
Mat  jacobian 
)
overridevirtual

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 325 of file PlasticIncrementalOptimization.cpp.

326 {
327 return assemblePlasticInequalityJacobian(*this, control, smooth_gradient,
328 jacobian);
329}
MoFEMErrorCode assemblePlasticInequalityJacobian(PlasticIncrementalOptimizationProblem &problem, Vec control, Vec smooth_gradient, Mat jacobian)

◆ assembleInequalityJacobianWithoutSmoothGradient()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::assembleInequalityJacobianWithoutSmoothGradient ( Vec  control,
Mat  jacobian 
)
overridevirtual

Assemble a finite generalized row without a usable smooth gradient.

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 331 of file PlasticIncrementalOptimization.cpp.

333 {
337 "Fallback plastic Jacobian scratch vector is unavailable");
339 // At the exact cone apex, zero is an admissible subgradient. Away from the
340 // apex, and on the rounded branch, the row depends only on the control.
342 *this, control, fallbackJacobianSmoothGradient, jacobian);
344}
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
Definition definitions.h:31
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
MoFEM::Interface & mField
virtual MPI_Comm & get_comm() const =0

◆ assembleObjectiveGradient()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::assembleObjectiveGradient ( Vec  control,
Vec  smooth_gradient,
Vec  objective_gradient 
)
overridevirtual

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 312 of file PlasticIncrementalOptimization.cpp.

313 {
314 return assembleIncrementalObjectiveGradient(*this, control, smooth_gradient,
315 objective_gradient);
316}
MoFEMErrorCode assembleIncrementalObjectiveGradient(PlasticIncrementalOptimizationProblem &problem, Vec control, Vec smooth_gradient, Vec objective_gradient)

◆ commit()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::commit ( Vec  solution,
Vec  equilibrated_state,
Vec  committed_control,
Vec  candidate_control,
Vec  reference_control 
)
overridevirtual

Commit physics history and all next-step control vectors atomically. solution and equilibrated_state are read-only accepted inputs; a successful implementation may modify only physics history and the three control outputs.

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 740 of file PlasticIncrementalOptimization.cpp.

742 {
744 ep, solution, equilibrated_state, committed_control, candidate_control,
745 reference_control);
746}
MoFEMErrorCode commitIncrementalOptimizationLoadStep(EshelbianCore &ep, Vec solution, Vec equilibrated_state, Vec committed_control, Vec candidate_control, Vec reference_control)

◆ configureConstraintDM()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::configureConstraintDM ( DM  constraint_dm)
overridevirtual

Add physics-specific rows, columns, and elements to constraintDM.

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 248 of file PlasticIncrementalOptimization.cpp.

249 {
251 if (!constraint_dm)
253 "Plastic constraint DM is null");
262}
PetscErrorCode DMMoFEMAddElement(DM dm, std::string fe_name)
add element to dm
Definition DMMoFEM.cpp:488
PetscErrorCode DMMoFEMAddSubFieldRow(DM dm, const char field_name[])
Definition DMMoFEM.cpp:238
PetscErrorCode DMMoFEMAddSubFieldCol(DM dm, const char field_name[])
Definition DMMoFEM.cpp:280
boost::shared_ptr< Range > plasticVolumes
const std::string elementVolumeName
const std::string plasticFlowField
const std::string plasticKappaField

◆ createControlData()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::createControlData ( SmartPetscObj< Vec > &  committed_control,
SmartPetscObj< Vec > &  candidate_control 
)
overridevirtual

Create the problem's committed and candidate control vectors.

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 199 of file PlasticIncrementalOptimization.cpp.

201 {
203 committed_control =
207 "Plastic trial-control vector is not available");
208 candidate_control = ep.incrementalTrialControl;
209 // Mesh field data store committed kappa, whereas every vector with this DM
210 // layout stores fresh increments (Delta H_p, Delta kappa).
211 CHKERR VecZeroEntries(committed_control);
212 CHKERR VecZeroEntries(candidate_control);
215 CHKERR PetscOptionsGetReal(PETSC_NULLPTR, "",
216 "-incremental_optimization_yield_stress",
217 &initialYieldStress, PETSC_NULLPTR);
219 PETSC_NULLPTR, "",
220 "-incremental_optimization_isotropic_hardening_modulus",
221 &isotropicHardeningModulus, PETSC_NULLPTR);
222 CHKERR PetscOptionsGetReal(PETSC_NULLPTR, "",
223 "-incremental_optimization_dissipation_epsilon",
224 &dissipationRegularizationEpsilon, PETSC_NULLPTR);
225 if (!std::isfinite(initialYieldStress) || !(initialYieldStress > 0))
227 "Initial plastic yield stress must be finite and positive");
228 if (!std::isfinite(isotropicHardeningModulus) ||
231 "Isotropic hardening modulus must be finite and non-negative");
232 if (!std::isfinite(dissipationRegularizationEpsilon) ||
235 "Plastic dissipation epsilon must be finite and non-negative");
236 PlasticKappaHistory kappa_history;
237 CHKERR savePlasticKappaHistory(ep, kappa_history);
238 MOFEM_LOG("EP", Sev::inform)
239 << "Plastic model parameters: initial yield stress "
240 << initialYieldStress << ", isotropic hardening modulus "
242 << ", dissipation epsilon " << dissipationRegularizationEpsilon
243 << ", constraint scaling sqrt(reference cell volume)";
244
246}
@ ROW
@ MOFEM_INVALID_DATA
Definition definitions.h:36
auto createDMVector(DM dm, RowColData rc=RowColData::COL)
Get smart vector from DM.
Definition DMMoFEM.hpp:1237
#define MOFEM_LOG(channel, severity)
Log.
MoFEMErrorCode savePlasticKappaHistory(EshelbianCore &ep, PlasticKappaHistory &history)
PetscErrorCode PetscOptionsGetReal(PetscOptions *, const char pre[], const char name[], PetscReal *dval, PetscBool *set)
SmartPetscObj< Vec > vectorDuplicate(Vec vec)
Create duplicate vector of smart vector.
SmartPetscObj< Vec > incrementalTrialControl
SmartPetscObj< DM > dmIncrementalOptimization
Incremental-optimization control problem.

◆ evaluateConservativeValue()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::evaluateConservativeValue ( double value)
overridevirtual

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 291 of file PlasticIncrementalOptimization.cpp.

292 {
296}
MoFEMErrorCode evaluateEquilibratedMechanicalValue(EshelbianCore &ep, TS ts, double &value)

◆ evaluateDissipation()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::evaluateDissipation ( Vec  control,
double value 
)
overridevirtual

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 305 of file PlasticIncrementalOptimization.cpp.

306 {
307 // The generic "dissipation" slot is the complete local incremental
308 // resistance: irreversible yield work plus stored hardening-energy change.
309 return evaluatePlasticIncrementalResistanceValue(*this, control, value);
310}
MoFEMErrorCode evaluatePlasticIncrementalResistanceValue(const PlasticIncrementalOptimizationProblem &problem, Vec control, double &value)

◆ evaluateInequalityConstraints()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::evaluateInequalityConstraints ( Vec  control,
Vec  constraints 
)
overridevirtual

Return sqrt(cell volume) times the exact or rounded epigraph gap.

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 319 of file PlasticIncrementalOptimization.cpp.

320 {
321 return evaluatePlasticInequalityConstraints(*this, control, constraints);
322}
MoFEMErrorCode evaluatePlasticInequalityConstraints(const PlasticIncrementalOptimizationProblem &problem, Vec control, Vec constraints)

◆ getControlDM()

DM EshelbianPlasticity::PlasticIncrementalOptimizationProblem::getControlDM ( ) const
overridevirtual

Parent DM containing every optimization-control field.

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 156 of file PlasticIncrementalOptimization.cpp.

156 {
158}

◆ getDissipationRegularizationEpsilon()

double EshelbianPlasticity::PlasticIncrementalOptimizationProblem::getDissipationRegularizationEpsilon ( ) const
inline

Definition at line 68 of file PlasticIncrementalOptimization.hpp.

68 {
70 }

◆ getInitialYieldStress()

double EshelbianPlasticity::PlasticIncrementalOptimizationProblem::getInitialYieldStress ( ) const
inline

Definition at line 64 of file PlasticIncrementalOptimization.hpp.

64{ return initialYieldStress; }

◆ getIsotropicHardeningModulus()

double EshelbianPlasticity::PlasticIncrementalOptimizationProblem::getIsotropicHardeningModulus ( ) const
inline

Definition at line 65 of file PlasticIncrementalOptimization.hpp.

65 {
67 }

◆ getName()

std::string EshelbianPlasticity::PlasticIncrementalOptimizationProblem::getName ( ) const
overridevirtual

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 152 of file PlasticIncrementalOptimization.cpp.

152 {
153 return "plasticity";
154}

◆ getPlasticFlowFieldName()

const std::string & EshelbianPlasticity::PlasticIncrementalOptimizationProblem::getPlasticFlowFieldName ( ) const

Plastic-flow control field; its vector values are Delta H^p.

Definition at line 161 of file PlasticIncrementalOptimization.cpp.

161 {
162 return ep.plasticFlowField;
163}

◆ getPlasticKappaFieldName()

const std::string & EshelbianPlasticity::PlasticIncrementalOptimizationProblem::getPlasticKappaFieldName ( ) const

Scalar control/constraint field; its vector values are Delta kappa.

Definition at line 166 of file PlasticIncrementalOptimization.cpp.

166 {
167 return ep.plasticKappaField;
168}

◆ getVolumeElementName()

const std::string & EshelbianPlasticity::PlasticIncrementalOptimizationProblem::getVolumeElementName ( ) const

Definition at line 171 of file PlasticIncrementalOptimization.cpp.

171 {
172 return ep.elementVolumeName;
173}

◆ initialiseInequalityMultipliers()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::initialiseInequalityMultipliers ( DM  constraint_dm,
Vec  multipliers 
)
overridevirtual

Initialise multipliers for sqrt(cell volume)-scaled inequality rows.

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 265 of file PlasticIncrementalOptimization.cpp.

266 {
267 return initialisePlasticInequalityMultipliers(*this, constraint_dm,
268 multipliers);
269}
MoFEMErrorCode initialisePlasticInequalityMultipliers(const PlasticIncrementalOptimizationProblem &problem, DM constraint_dm, Vec multipliers)

◆ initialiseReferenceControl()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::initialiseReferenceControl ( Vec  committed_control,
Vec  reference_control 
)
overridevirtual

Define the zero-increment/reference point for a new load step.

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 272 of file PlasticIncrementalOptimization.cpp.

273 {
275 (void)committed_control;
276 // Both Delta H_p and Delta kappa are fresh increment variables. Committed
277 // kappa remains in mesh field storage.
278 CHKERR VecZeroEntries(reference_control);
280}

◆ restoreState()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::restoreState ( Vec  state)
overridevirtual

◆ solveState()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::solveState ( Vec  state,
EquilibriumSolveReport report 
)
overridevirtual

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 282 of file PlasticIncrementalOptimization.cpp.

283 {
284 return solveEquilibriumStateTS(ep, timeSolver, state, report);
285}
MoFEMErrorCode solveEquilibriumStateTS(TopologicalTAOCtxImpl *ctx_impl_ptr)

◆ validate()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::validate ( )
overridevirtual

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 184 of file PlasticIncrementalOptimization.cpp.

184 {
188 "Plastic incremental optimization requires -plastic_volume 1 "
189 "and -cohesive_interface_on 0");
192 "Plastic incremental-optimization control DM is not available");
193 if (!timeSolver)
195 "Plastic incremental optimization requires a state TS");
197}
@ MOFEM_NOT_IMPLEMENTED
Definition definitions.h:32
static PetscBool plasticVolume
static PetscBool interfaceCrack

◆ validateSolution()

MoFEMErrorCode EshelbianPlasticity::PlasticIncrementalOptimizationProblem::validateSolution ( DM  constraint_dm,
Vec  control,
Vec  smooth_gradient,
Vec  inequality_multipliers,
PetscReal  gradient_tolerance,
PetscReal  constraint_tolerance,
std::string &  diagnostics 
)
overridevirtual

Recover physical multipliers and check unscaled plastic feasibility.

Implements EshelbianPlasticity::IncrementalOptimizationProblem.

Definition at line 731 of file PlasticIncrementalOptimization.cpp.

734 {
736 *this, constraint_dm, control, smooth_gradient, inequality_multipliers,
737 gradient_tolerance, constraint_tolerance, diagnostics);
738}
MoFEMErrorCode validatePlasticIncrementalSolution(PlasticIncrementalOptimizationProblem &problem, DM constraint_dm, Vec control, Vec smooth_gradient, Vec inequality_multipliers, PetscReal gradient_tolerance, PetscReal constraint_tolerance, std::string &diagnostics)

Member Data Documentation

◆ dissipationRegularizationEpsilon

double EshelbianPlasticity::PlasticIncrementalOptimizationProblem::dissipationRegularizationEpsilon = 0
private

Definition at line 83 of file PlasticIncrementalOptimization.hpp.

◆ ep

EshelbianCore& EshelbianPlasticity::PlasticIncrementalOptimizationProblem::ep
private

Definition at line 77 of file PlasticIncrementalOptimization.hpp.

◆ fallbackJacobianSmoothGradient

SmartPetscObj<Vec> EshelbianPlasticity::PlasticIncrementalOptimizationProblem::fallbackJacobianSmoothGradient
private

Zero force selects a finite exact-cone row when no smooth force exists.

Definition at line 80 of file PlasticIncrementalOptimization.hpp.

◆ initialYieldStress

double EshelbianPlasticity::PlasticIncrementalOptimizationProblem::initialYieldStress = 1
private

Definition at line 81 of file PlasticIncrementalOptimization.hpp.

◆ isotropicHardeningModulus

double EshelbianPlasticity::PlasticIncrementalOptimizationProblem::isotropicHardeningModulus = 0
private

Definition at line 82 of file PlasticIncrementalOptimization.hpp.

◆ timeSolver

SmartPetscObj<TS> EshelbianPlasticity::PlasticIncrementalOptimizationProblem::timeSolver
private

Definition at line 78 of file PlasticIncrementalOptimization.hpp.


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