forked from 1b-agent/fieldcraft-upstream
verification: implicit plasticity oracle cases and documentation
Four cases, each against its closed form: uniaxial tension of a J2 cube to a logarithmic strain of 0.2 (Kirchhoff stress exact; 0.13 % from the explicit solver's hypoelastic Cauchy stress, the elastic volume change between the two laws), the Bauschinger effect of linear kinematic hardening on a load path back to zero strain (exact), Hill's elastic-perfectly plastic thick cylinder (bore displacement at a plastic radius of 1.5a within 0.009 %, collapse pressure within 2e-8; the pending case is now active) and a cantilever's plastic collapse, converged 3.1 % above beam theory's hinge, the bound a continuum exceeds. docs/fem.md, the literature, ROADMAP (M15), parity and the oracle page follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
This commit is contained in:
1 parent
17b2c837f2
commit
7a69fe5e2f
21 files changed
+414
-25
No files matched your search
@@ -0,0 +1,16 @@
|
||||
# Uniaxial tension of a J2 bilinear-hardening cube to large strain (implicit)
|
||||
|
||||
The cube of `j2-uniaxial-explicit` solved by the implicit nonlinear solver: one fully integrated
|
||||
hex8, E = 200000, ν = 0.3, σ_y = 250, H = 2000 (isotropic), held by symmetry on three faces and
|
||||
stretched on the fourth to λ = e^0.2 in a nonlinear static step, lateral faces free.
|
||||
|
||||
Simo's exponential return map integrates this proportional path exactly in the logarithmic
|
||||
strain, so the Kirchhoff stress is the small-strain curve τ = σ_y + E_t (ε − σ_y/E) = 643.564 at
|
||||
ε = 0.2 and the equivalent plastic strain (τ − σ_y)/H = 0.196782. The Cauchy stress is
|
||||
σ = τ/J with Hencky's volume law ln J = τ/(3K): 642.737.
|
||||
|
||||
Cross-check with the explicit solver: `j2-uniaxial-explicit` reaches 643.57 for the Cauchy stress
|
||||
with the same plastic strain. Its hypoelastic update takes the logarithmic strain rate against
|
||||
the Cauchy stress, while the implicit model is hyperelastic in the Kirchhoff stress: the two
|
||||
laws differ by the factor J = 1.0013 (the elastic volume change), which is the 0.13 % between
|
||||
them; both meet the closed form of their own law.
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"title": "Uniaxial tension of a J2 bilinear-hardening cube to large strain (implicit, finite strain)",
|
||||
"kind": "theory",
|
||||
"source": "J2 plasticity with linear isotropic hardening in uniaxial stress (Simo and Hughes, Computational Inelasticity, Springer 1998, §2.3) in the logarithmic strain, which Simo's exponential return map (CMAME 99:61–112, 1992) integrates exactly on a proportional path: Kirchhoff stress τ = σ_y + E_t (ε − σ_y/E), Cauchy stress σ = τ/J with ln J = τ/(3K) (Hencky's volume law)",
|
||||
"quantities": [
|
||||
{
|
||||
"id": "sigma",
|
||||
"quantity": "axial Cauchy stress at a logarithmic strain of 0.2",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Pull",
|
||||
"elements": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"pointer": "/elements/0/stress/0/0"
|
||||
},
|
||||
"value": 642.7365391418857,
|
||||
"tolerance": {
|
||||
"relative": 1e-06
|
||||
},
|
||||
"reason": "a homogeneous deformation the element represents exactly, reached on a proportional path: the tolerance only admits the Newton tolerance and rounding"
|
||||
},
|
||||
{
|
||||
"id": "plastic_strain",
|
||||
"quantity": "equivalent plastic strain",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Pull",
|
||||
"elements": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"pointer": "/elements/0/plastic_strain/0"
|
||||
},
|
||||
"value": 0.19678217821782182,
|
||||
"tolerance": {
|
||||
"relative": 1e-06
|
||||
},
|
||||
"reason": "ε_p = (τ − σ_y)/H, as for the stress"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"note": "FieldCraft's accepted results for this case, written by `cargo xtask oracle --bless`. A result outside its band fails CI.",
|
||||
"values": {
|
||||
"plastic_strain": {
|
||||
"band": 1.9678217821795454e-10,
|
||||
"value": 0.19678217821795452
|
||||
},
|
||||
"sigma": {
|
||||
"band": 6.427365391418857e-7,
|
||||
"value": 642.7365390754569
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
[
|
||||
{"command": "mesh.block", "params": {"body": "Cube", "kind": "hex8", "corners": [[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0, 0, 1], [1, 0, 1], [1, 1, 1], [0, 1, 1]], "divisions": [1, 1, 1], "faces": {"6": "x0", "3": "y0", "1": "z0", "4": "x1"}}},
|
||||
{"command": "model.set.create", "params": {"name": "all", "geometry": [{"body": "Cube"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "x0", "geometry": [{"body": "Cube", "face": "x0"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "y0", "geometry": [{"body": "Cube", "face": "y0"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "z0", "geometry": [{"body": "Cube", "face": "z0"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "x1", "geometry": [{"body": "Cube", "face": "x1"}]}},
|
||||
{"command": "model.material.create", "params": {"name": "Steel", "elastic": {"type": "isotropic", "young": 200000.0, "poisson": 0.3}, "plastic": {"type": "bilinear", "yield_stress": 250.0, "hardening_modulus": 2000.0, "hardening": "isotropic"}}},
|
||||
{"command": "model.section.create", "params": {"name": "cube", "set": "all", "material": "Steel", "kind": {"type": "solid"}}},
|
||||
{"command": "model.boundary_condition.create", "params": {"name": "sx", "type": "symmetry", "target": {"set": "x0"}, "plane": "x"}},
|
||||
{"command": "model.boundary_condition.create", "params": {"name": "sy", "type": "symmetry", "target": {"set": "y0"}, "plane": "y"}},
|
||||
{"command": "model.boundary_condition.create", "params": {"name": "sz", "type": "symmetry", "target": {"set": "z0"}, "plane": "z"}},
|
||||
{"command": "model.boundary_condition.create", "params": {"name": "pull", "type": "displacement", "target": {"set": "x1"}, "values": [0.22140275816016985, null, null, null, null, null]}},
|
||||
{"command": "model.step.create", "params": {"name": "Pull", "procedure": {"type": "nonlinear_static"}, "boundary_conditions": ["sx", "sy", "sz", "pull"], "loads": []}},
|
||||
{"command": "solve.nonlinear", "params": {"step": "Pull"}, "id": "solve"}
|
||||
]
|
||||
Reference in new issue
Block a user