oracle: 2D cases (Kirsch plane stress, Lamé plane strain and axisymmetric, rotating disc and cylinder, NAFEMS LE1 with quad8) and J2 uniaxial explicit

The pending 2D LE1 case becomes a real one; the plasticity cases stay
pending with what they still need (static J2 for the collapse pressure,
the transcribed measurements for the Taylor bar).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
This commit is contained in:
jyvikoandClaude Opus 5.5 authored and Irakli Kourtis committed 2026-10-13 21:42:19 -04:00
1 parent 84e81acf3a
commit 96c9992c92
31 files changed
+686 -13

No files matched your search

@@ -0,0 +1,7 @@
# Rotating disc with a central hole, plane stress
A thin disc, inner radius 20, outer 100 (E = 210000, ν = 0.3, ρ = 7.85e-9: mm, t, s, MPa),
spinning at 1000 rad/s about z: a quarter, one quad8 patch (16 × 32, graded 4 : 1 towards the
bore, where the hoop stress is steepest) with mid-side nodes on the arcs, symmetry on x = 0 and y = 0, a centrifugal load. Timoshenko and Goodier:
σ_r = (3 + ν)/8 ρω² (b² + a² − a²b²/r² − r²),
σ_θ = (3 + ν)/8 ρω² (b² + a² + a²b²/r² − (1 + 3ν)/(3 + ν) r²).
@@ -0,0 +1,76 @@
{
"title": "Rotating disc with a central hole, plane stress",
"kind": "theory",
"source": "Timoshenko and Goodier, Theory of Elasticity, 3rd ed., McGraw-Hill 1970, §32 (rotating disc of uniform thickness with a hole)",
"quantities": [
{
"id": "hoop_bore",
"quantity": "hoop stress σ_θ = σ_yy at the bore (20, 0)",
"measure": {
"command": "solve.probe",
"params": {
"step": "Spin",
"at": [
[
20.0,
0,
0
]
]
},
"pointer": "/nodes/0/stress/1"
},
"value": 65.312,
"tolerance": {
"relative": 0.01
},
"reason": "stress extrapolated to the bore surface, where the a²b²/r² term is steepest: 16 radial quadratic elements graded towards the bore leave about 0.2% (8 uniform: −2.4%; 32 graded: −0.05%)"
},
{
"id": "radial_max",
"quantity": "radial stress σ_r = σ_xx at r = √(ab), its maximum",
"measure": {
"command": "solve.probe",
"params": {
"step": "Spin",
"at": [
[
44.721359549995796,
0,
0
]
]
},
"pointer": "/nodes/0/stress/0"
},
"value": 20.724,
"tolerance": {
"relative": 0.01
},
"reason": "the nearest node to √(ab) is within half an element of it, where σ_r is stationary (an error of order (h/r)², under 0.5%), and nodal averaging adds a few tenths of a percent"
},
{
"id": "hoop_rim",
"quantity": "hoop stress σ_θ = σ_yy at the rim (100, 0)",
"measure": {
"command": "solve.probe",
"params": {
"step": "Spin",
"at": [
[
100.0,
0,
0
]
]
},
"pointer": "/nodes/0/stress/1"
},
"value": 16.328,
"tolerance": {
"relative": 0.01
},
"reason": "as at the bore"
}
]
}
@@ -0,0 +1,17 @@
{
"note": "ModelCraft's accepted results for this case, written by `cargo xtask oracle --bless`. A result outside its band fails CI.",
"values": {
"hoop_bore": {
"band": 6.5312e-8,
"value": 65.18766671256753
},
"hoop_rim": {
"band": 1.6352371809556562e-8,
"value": 16.352371809556562
},
"radial_max": {
"band": 2.0724e-8,
"value": 20.682642297503843
}
}
}
@@ -0,0 +1,13 @@
[
{"command": "mesh.block", "params": {"body": "Disc", "kind": "quad8", "corners": [[20.0, 0, 0], [100.0, 0, 0], [0, 100.0, 0], [0, 20.0, 0]], "divisions": [16, 32], "bias": [4, 1], "edges": [{"corners": [2, 3], "arc": {"center": [0, 0, 0]}}, {"corners": [1, 4], "arc": {"center": [0, 0, 0]}}, {"corners": [1, 2], "name": "y0"}, {"corners": [3, 4], "name": "x0"}]}},
{"command": "model.set.create", "params": {"name": "all", "geometry": [{"body": "Disc", "face": "area"}]}},
{"command": "model.set.create", "params": {"name": "x0", "geometry": [{"body": "Disc", "edge": "x0"}]}},
{"command": "model.set.create", "params": {"name": "y0", "geometry": [{"body": "Disc", "edge": "y0"}]}},
{"command": "model.material.create", "params": {"name": "Steel", "elastic": {"type": "isotropic", "young": 210000.0, "poisson": 0.3}, "density": 7.85e-09}},
{"command": "model.section.create", "params": {"name": "disc", "set": "all", "material": "Steel", "kind": {"type": "plane_stress", "thickness": 5.0}}},
{"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.load.create", "params": {"name": "spin", "type": "centrifugal", "angular_velocity": 1000.0, "point": [0, 0, 0], "axis": [0, 0, 1]}},
{"command": "model.step.create", "params": {"name": "Spin", "procedure": {"type": "static"}, "boundary_conditions": ["sx", "sy"], "loads": ["spin"]}},
{"command": "solve.static", "params": {}, "id": "solve"}
]