v0.16.3
Loading...
Searching...
No Matches
NeoHookeanLogarithmicMaterial.hpp
Go to the documentation of this file.
1/**
2 * @file NeoHookeanLogarithmicMaterial.hpp
3 * @brief Neo-Hookean material law in orthonormal logarithmic coordinates.
4 */
5
6#ifndef NEOHOOKEAN_LOGARITHMIC_MATERIAL_HPP
7#define NEOHOOKEAN_LOGARITHMIC_MATERIAL_HPP
8
9namespace EshelbianPlasticity {
10
11/** Stateless material evaluations, independent of mesh fields and solvers.
12 *
13 * The five coordinates use (11-22)/sqrt(2), (11+22-2*33)/sqrt(6),
14 * sqrt(2)*12, sqrt(2)*13 and sqrt(2)*23. Their Euclidean pairing is the
15 * Frobenius pairing of symmetric trace-free tensors.
16 *
17 * Call validateParameters after reading or changing material parameters and
18 * before evaluating a state. Kernels recheck this precondition only in debug
19 * builds; trial-state validity and numerical representability are always
20 * checked.
21 */
26
27 struct Parameters {
28 double c10;
30 };
31
32 struct VolumeState {
33 double jacobian;
34 double energy;
35 double firstDerivative; ///< d[g(exp(theta))]/d theta
36 double secondDerivative; ///< d2[g(exp(theta))]/d theta2
37 };
38
39 struct InverseState {
44 double inverseResidual; ///< Sum of principal logarithms before projection
46 };
47
48 /// Check finite, strictly positive C10, K and representable mu = 2*C10.
49 static MoFEMErrorCode validateParameters(const Parameters &parameters);
50
51 /// Reconstruct H = D + theta*I/3 from the fixed five-coordinate basis.
52 static SymmetricTensor getTensor(const Coordinates &t_coordinates,
53 double theta = 0.);
54
55 /// Project a symmetric tensor onto the fixed trace-free basis.
57
58 /// Evaluate f(D), optionally its five-component gradient and Hessian.
59 static MoFEMErrorCode evaluateDeviator(const Parameters &parameters,
60 const Coordinates &t_deviator,
61 double &energy,
62 Coordinates *stress_ptr = nullptr,
63 Tangent *hessian_ptr = nullptr);
64
65 /// Evaluate g(J) = K*(J-1)^2/2 and its logarithmic-volume derivatives.
66 static MoFEMErrorCode evaluateVolume(const Parameters &parameters,
67 double theta, VolumeState &state);
68
69 /// Recover Dm(Td), its compliance and conjugate energy; no state is cached.
70 static MoFEMErrorCode evaluateInverse(const Parameters &parameters,
71 const Coordinates &t_stress,
73
74 /// Evaluate f(D) + f*(Td) - Td:D, optionally returning the computed f(D).
75 /// The supplied inverse must correspond to the same Td.
76 static MoFEMErrorCode evaluateFenchelGap(const Parameters &parameters,
77 const Coordinates &t_deviator,
78 const Coordinates &t_stress,
79 const InverseState &inverse,
80 double &gap,
81 double *energy_ptr = nullptr);
82};
83
84} // namespace EshelbianPlasticity
85
86#endif // NEOHOOKEAN_LOGARITHMIC_MATERIAL_HPP
double inverseResidual
Sum of principal logarithms before projection.
static MoFEMErrorCode evaluateInverse(const Parameters &parameters, const Coordinates &t_stress, InverseState &state)
Recover Dm(Td), its compliance and conjugate energy; no state is cached.
static MoFEMErrorCode validateParameters(const Parameters &parameters)
Check finite, strictly positive C10, K and representable mu = 2*C10.
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 MoFEMErrorCode evaluateFenchelGap(const Parameters &parameters, const Coordinates &t_deviator, const Coordinates &t_stress, const InverseState &inverse, double &gap, double *energy_ptr=nullptr)
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.