6#ifndef MOFEM_PLASTIC_INCREMENTAL_OPTIMIZATION_INTERNAL_HPP
7#define MOFEM_PLASTIC_INCREMENTAL_OPTIMIZATION_INTERNAL_HPP
43 "The five-coordinate plastic basis is three-dimensional");
44 return Tensor2SymmetricDeviatorBasis::getTensor(t_coordinates);
54 "The five-coordinate plastic basis is three-dimensional");
55 return Tensor2SymmetricDeviatorBasis::getCoordinates(t_values);
65 "The five-coordinate plastic basis is three-dimensional");
66 return Tensor2SymmetricDeviatorBasis::getCoordinates(t_values);
76 return std::sqrt(t_values(L) * t_values(L));
84 return std::sqrt(t_values(
i,
j) * t_values(
i,
j));
94 const double epsilon) {
98 return scaled_norm * scaled_norm /
99 (std::hypot(scaled_norm, epsilon) + epsilon);
103 std::array<double, plasticLogarithmicStretchCoordinateSize>;
131 Vec smooth_gradient, Vec objective_gradient);
143 Vec smooth_gradient, Mat jacobian);
147 Vec control, Vec smooth_gradient, Vec inequality_multipliers,
148 PetscReal gradient_tolerance, PetscReal constraint_tolerance,
149 std::string &diagnostics);
#define FTENSOR_INDEXES(DIM,...)
#define FTENSOR_INDEX(DIM, I)
PetscRestoreGuard(Restore restore)
PetscRestoreGuard(const PetscRestoreGuard &)=delete
PetscRestoreGuard & operator=(const PetscRestoreGuard &)=delete
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'j', 3 > j
std::map< EntityHandle, double > PlasticKappaHistory
constexpr double plasticEquivalentIncrementScale
MoFEMErrorCode assemblePlasticInequalityJacobian(PlasticIncrementalOptimizationProblem &problem, Vec control, Vec smooth_gradient, Mat jacobian)
MoFEMErrorCode assemblePlasticForce(EshelbianCore &ep, Vec force)
constexpr double plasticEquivalentIncrementScaleSquared
MoFEMErrorCode setPlasticHistory(EshelbianCore &ep, const PlasticHistory &history, const FTensor::Tensor2_symmetric< double, SPACE_DIM > &t_direction, const double scale)
MoFEMErrorCode clearPlasticIncrementFields(EshelbianCore &ep)
MoFEMErrorCode assembleIncrementalObjectiveGradient(PlasticIncrementalOptimizationProblem &problem, Vec control, Vec smooth_gradient, Vec objective_gradient)
MoFEMErrorCode initialisePlasticInequalityMultipliers(const PlasticIncrementalOptimizationProblem &problem, DM constraint_dm, Vec multipliers)
MoFEMErrorCode setPlasticKappaHistory(EshelbianCore &ep, const PlasticKappaHistory &history)
MoFEMErrorCode setStateOnMesh(EshelbianCore &ep, Vec state)
MoFEMErrorCode savePlasticHistory(EshelbianCore &ep, PlasticHistory &history)
MoFEMErrorCode evaluatePlasticInequalityConstraints(const PlasticIncrementalOptimizationProblem &problem, Vec control, Vec constraints)
std::array< double, plasticLogarithmicStretchCoordinateSize > PackedPlasticCoordinates
MoFEMErrorCode savePlasticKappaHistory(EshelbianCore &ep, PlasticKappaHistory &history)
double plasticCoordinateNorm(const FTensor::Tensor1< T, plasticLogarithmicStretchCoordinateSize > &t_values)
MoFEMErrorCode validatePlasticIncrementalSolution(PlasticIncrementalOptimizationProblem &problem, DM constraint_dm, Vec control, Vec smooth_gradient, Vec inequality_multipliers, PetscReal gradient_tolerance, PetscReal constraint_tolerance, std::string &diagnostics)
MoFEMErrorCode evaluatePlasticIncrementalResistanceValue(const PlasticIncrementalOptimizationProblem &problem, Vec control, double &value)
double plasticEquivalentIncrement(const double coordinate_norm, const double epsilon)
constexpr double plasticYieldFunctionScale
FTensor::Tensor1< double, plasticLogarithmicStretchCoordinateSize > plasticLogarithmicStretchCoordinatesFromTensor(const FTensor::Tensor2_symmetric< T, SPACE_DIM > &t_values)
MoFEMErrorCode assembleReducedHelmholtzGradient(EshelbianCore &ep, TS ts, Vec gradient)
std::map< EntityHandle, PackedPlasticCoordinates > PlasticHistory
FTensor::Tensor2_symmetric< double, SPACE_DIM > plasticLogarithmicStretchTensorFromCoordinates(const FTensor::Tensor1< T, plasticLogarithmicStretchCoordinateSize > &t_coordinates)
double plasticFrobeniusNorm(const FTensor::Tensor2_symmetric< T, SPACE_DIM > &t_values)
constexpr int plasticLogarithmicStretchCoordinateSize