forked from 1b-agent/fieldcraft-upstream
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 <[email protected]> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
This commit is contained in:
1 parent
84e81acf3a
commit
96c9992c92
31 files changed
+686
-13
No files matched your search
@@ -0,0 +1,6 @@
|
||||
# Uniaxial tension of a J2 bilinear-hardening cube to large strain (explicit)
|
||||
|
||||
A unit cube of one hex8 (one-point, hourglass control), steel-like (E = 200000, ν = 0.3,
|
||||
σ_y = 250, H = 2000, ρ = 7.8e-9), held by symmetry on three faces and stretched on the fourth to
|
||||
λ = e^0.2 over 0.01 s (quasi-static), lateral faces free: uniaxial stress at a logarithmic
|
||||
strain of 0.2.
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"title": "Uniaxial tension of a J2 bilinear-hardening cube to large strain (explicit)",
|
||||
"kind": "theory",
|
||||
"source": "von Mises plasticity with linear isotropic hardening under uniaxial stress (Simo and Hughes, Computational Inelasticity, Springer 1998, §2.3); logarithmic strain for a hypoelastic–plastic law under coaxial stretching",
|
||||
"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"
|
||||
},
|
||||
"value": 643.5643564356436,
|
||||
"tolerance": {
|
||||
"relative": 0.01
|
||||
},
|
||||
"reason": "uniaxial J2 with linear hardening: σ = σ_y + E_t (ε − σ_y/E) in logarithmic strain; the stretch takes 10⁴ wave transits, so inertia and the ringing of the start (ρcv ≈ 0.1% of σ) stay well under 1%"
|
||||
},
|
||||
{
|
||||
"id": "plastic_strain",
|
||||
"quantity": "equivalent plastic strain",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Pull",
|
||||
"elements": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"pointer": "/elements/0/plastic_strain"
|
||||
},
|
||||
"value": 0.1967821782178218,
|
||||
"tolerance": {
|
||||
"relative": 0.01
|
||||
},
|
||||
"reason": "ε_p = ε − σ/E, as for the stress"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"note": "ModelCraft's accepted results for this case, written by `cargo xtask oracle --bless`. A result outside its band fails CI.",
|
||||
"values": {
|
||||
"plastic_strain": {
|
||||
"band": 1.967821782178218e-10,
|
||||
"value": 0.1967821759864614
|
||||
},
|
||||
"sigma": {
|
||||
"band": 6.435654787724778e-7,
|
||||
"value": 643.5654787724778
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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}, "density": 7.8e-09, "plastic": {"type": "bilinear", "yield_stress": 250.0, "hardening_modulus": 2000.0}}},
|
||||
{"command": "model.section.create", "params": {"name": "cube", "set": "all", "material": "Steel", "kind": {"type": "solid"}, "formulation": {"integration": "reduced"}}},
|
||||
{"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": "explicit_dynamic", "end_time": 0.01}, "boundary_conditions": ["sx", "sy", "sz", "pull"], "loads": []}},
|
||||
{"command": "solve.explicit", "params": {"step": "Pull"}, "id": "solve"}
|
||||
]
|
||||
@@ -0,0 +1,5 @@
|
||||
# Plate with a circular hole in tension, 2D plane stress (Kirsch)
|
||||
|
||||
The plate of `kirsch-plate` as a 2D plane stress model: a quarter of half-width 30 with a hole of
|
||||
radius 1, two quad8 patches around the hole (40 × 16 each, graded 40 : 1 towards it, mid-side
|
||||
nodes on the arc), symmetry on x = 0 and y = 0, a traction of 1 on x = 30.
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"title": "Plate with a circular hole in tension, 2D plane stress (Kirsch)",
|
||||
"kind": "theory",
|
||||
"source": "Kirsch, Zeitschrift des VDI 42 (1898) 797–807; Timoshenko and Goodier, Theory of Elasticity, 3rd ed., 1970, §35",
|
||||
"quantities": [
|
||||
{
|
||||
"id": "kt",
|
||||
"quantity": "σ_xx at the top of the hole (0, 1) over the remote stress",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Tension",
|
||||
"at": [
|
||||
[
|
||||
0,
|
||||
1.0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
"pointer": "/nodes/0/stress/0"
|
||||
},
|
||||
"value": 3.0,
|
||||
"tolerance": {
|
||||
"relative": 0.02
|
||||
},
|
||||
"reason": "the reference is the infinite plate; the finite plate (W = 60a, loaded ends 30a away) raises the peak by a few tenths of a percent, and the stress extrapolated to the hole surface adds up to about 1%"
|
||||
},
|
||||
{
|
||||
"id": "side",
|
||||
"quantity": "σ_yy at the side of the hole (1, 0) over the remote stress",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Tension",
|
||||
"at": [
|
||||
[
|
||||
1.0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
"pointer": "/nodes/0/stress/1"
|
||||
},
|
||||
"value": -1.0,
|
||||
"tolerance": {
|
||||
"relative": 0.03
|
||||
},
|
||||
"reason": "infinite-plate value −S; finite width and extrapolation as for Kt, on a smaller value"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"note": "ModelCraft's accepted results for this case, written by `cargo xtask oracle --bless`. A result outside its band fails CI.",
|
||||
"values": {
|
||||
"kt": {
|
||||
"band": 3.0028789592374985e-9,
|
||||
"value": 3.0028789592374983
|
||||
},
|
||||
"side": {
|
||||
"band": 1.0018737796236792e-9,
|
||||
"value": -1.0018737796236792
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
[
|
||||
{"command": "mesh.block", "params": {"body": "Plate", "kind": "quad8", "corners": [[1.0, 0, 0], [30.0, 0, 0], [30.0, 30.0, 0], [0.7071067811865476, 0.7071067811865476, 0]], "divisions": [40, 16], "bias": [40, 1], "edges": [{"corners": [1, 4], "arc": {"center": [0, 0, 0]}}, {"corners": [1, 2], "name": "y0"}, {"corners": [2, 3], "name": "load"}]}},
|
||||
{"command": "mesh.block", "params": {"body": "Plate", "kind": "quad8", "corners": [[0.7071067811865476, 0.7071067811865476, 0], [30.0, 30.0, 0], [0, 30.0, 0], [0, 1.0, 0]], "divisions": [40, 16], "bias": [40, 1], "edges": [{"corners": [1, 4], "arc": {"center": [0, 0, 0]}}, {"corners": [3, 4], "name": "x0"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "all", "geometry": [{"body": "Plate", "face": "area"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "x0", "geometry": [{"body": "Plate", "edge": "x0"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "y0", "geometry": [{"body": "Plate", "edge": "y0"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "load", "geometry": [{"body": "Plate", "edge": "load"}]}},
|
||||
{"command": "model.material.create", "params": {"name": "Mat", "elastic": {"type": "isotropic", "young": 1000.0, "poisson": 0.3}}},
|
||||
{"command": "model.section.create", "params": {"name": "plate", "set": "all", "material": "Mat", "kind": {"type": "plane_stress", "thickness": 0.1}}},
|
||||
{"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": "S", "type": "traction", "set": "load", "vector": [1, 0, 0]}},
|
||||
{"command": "model.step.create", "params": {"name": "Tension", "procedure": {"type": "static"}, "boundary_conditions": ["sx", "sy"], "loads": ["S"]}},
|
||||
{"command": "solve.static", "params": {}, "id": "solve"}
|
||||
]
|
||||
@@ -0,0 +1,5 @@
|
||||
# Thick-walled cylinder under internal pressure, axisymmetric (Lamé)
|
||||
|
||||
The same cylinder as an axisymmetric slice r ∈ [10, 20], 0 ≤ y ≤ 1 (y is the axis), held axially
|
||||
on both faces so ε_z = 0 (the plane strain state of a long cylinder); one quad8 patch of 8 × 1
|
||||
elements.
|
||||
@@ -0,0 +1,99 @@
|
||||
{
|
||||
"title": "Thick-walled cylinder under internal pressure, axisymmetric (Lamé)",
|
||||
"kind": "theory",
|
||||
"source": "Lamé's solution, Timoshenko and Goodier, Theory of Elasticity, 3rd ed., McGraw-Hill 1970, §28",
|
||||
"quantities": [
|
||||
{
|
||||
"id": "ur_a",
|
||||
"quantity": "radial displacement at the bore (r = 10)",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Pressure",
|
||||
"at": [
|
||||
[
|
||||
10.0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
"pointer": "/nodes/0/displacement/0"
|
||||
},
|
||||
"value": 0.00907936507936508,
|
||||
"tolerance": {
|
||||
"relative": 0.001
|
||||
},
|
||||
"reason": "quadratic elements on 8 radial divisions resolve u_r = A r + B/r to well under 0.1%"
|
||||
},
|
||||
{
|
||||
"id": "ur_b",
|
||||
"quantity": "radial displacement outside (r = 20)",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Pressure",
|
||||
"at": [
|
||||
[
|
||||
20.0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
"pointer": "/nodes/0/displacement/0"
|
||||
},
|
||||
"value": 0.005777777777777778,
|
||||
"tolerance": {
|
||||
"relative": 0.001
|
||||
},
|
||||
"reason": "as at the bore"
|
||||
},
|
||||
{
|
||||
"id": "hoop_a",
|
||||
"quantity": "hoop stress σ_θ at the bore (stress component 3 of an axisymmetric element)",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Pressure",
|
||||
"at": [
|
||||
[
|
||||
10.0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
"pointer": "/nodes/0/stress/2"
|
||||
},
|
||||
"value": 166.66666666666666,
|
||||
"tolerance": {
|
||||
"relative": 0.01
|
||||
},
|
||||
"reason": "stress extrapolated to the bore surface: about 0.5%"
|
||||
},
|
||||
{
|
||||
"id": "axial",
|
||||
"quantity": "axial stress σ_z = 2νA at the bore (held ends)",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Pressure",
|
||||
"at": [
|
||||
[
|
||||
10.0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
"pointer": "/nodes/0/stress/1"
|
||||
},
|
||||
"value": 20.0,
|
||||
"tolerance": {
|
||||
"relative": 0.01
|
||||
},
|
||||
"reason": "as for the hoop stress"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"note": "ModelCraft's accepted results for this case, written by `cargo xtask oracle --bless`. A result outside its band fails CI.",
|
||||
"values": {
|
||||
"axial": {
|
||||
"band": 2.0083926981151736e-8,
|
||||
"value": 20.083926981151734
|
||||
},
|
||||
"hoop_a": {
|
||||
"band": 1.6666666666666668e-7,
|
||||
"value": 165.98051836613928
|
||||
},
|
||||
"ur_a": {
|
||||
"band": 9.07936507936508e-12,
|
||||
"value": 0.009079327300818625
|
||||
},
|
||||
"ur_b": {
|
||||
"band": 5.777777777777779e-12,
|
||||
"value": 0.005777758888504408
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
[
|
||||
{"command": "mesh.block", "params": {"body": "Pipe", "kind": "quad8", "corners": [[10.0, 0, 0], [20.0, 0, 0], [20.0, 1, 0], [10.0, 1, 0]], "divisions": [8, 1], "bias": [1, 1], "edges": [{"corners": [1, 4], "name": "bore"}, {"corners": [1, 2], "name": "bottom"}, {"corners": [3, 4], "name": "top"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "all", "geometry": [{"body": "Pipe", "face": "area"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "bore", "geometry": [{"body": "Pipe", "edge": "bore"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "ends", "geometry": [{"body": "Pipe", "edge": "bottom"}, {"body": "Pipe", "edge": "top"}]}},
|
||||
{"command": "model.material.create", "params": {"name": "Steel", "elastic": {"type": "isotropic", "young": 210000.0, "poisson": 0.3}}},
|
||||
{"command": "model.section.create", "params": {"name": "pipe", "set": "all", "material": "Steel", "kind": {"type": "axisymmetric"}}},
|
||||
{"command": "model.boundary_condition.create", "params": {"name": "ends", "type": "symmetry", "target": {"set": "ends"}, "plane": "y"}},
|
||||
{"command": "model.load.create", "params": {"name": "p", "type": "pressure", "set": "bore", "magnitude": 100.0}},
|
||||
{"command": "model.step.create", "params": {"name": "Pressure", "procedure": {"type": "static"}, "boundary_conditions": ["ends"], "loads": ["p"]}},
|
||||
{"command": "solve.static", "params": {}, "id": "solve"}
|
||||
]
|
||||
@@ -0,0 +1,5 @@
|
||||
# Thick-walled cylinder under internal pressure, 2D plane strain (Lamé)
|
||||
|
||||
The cylinder of `lame-cylinder` (a = 10, b = 20, p = 100, E = 210000, ν = 0.3) as a 2D plane
|
||||
strain quarter: one quad8 patch (8 × 16) with mid-side nodes on the arcs, symmetry on x = 0 and
|
||||
y = 0.
|
||||
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"title": "Thick-walled cylinder under internal pressure, 2D plane strain (Lamé)",
|
||||
"kind": "theory",
|
||||
"source": "Lamé's solution, Timoshenko and Goodier, Theory of Elasticity, 3rd ed., McGraw-Hill 1970, §28",
|
||||
"quantities": [
|
||||
{
|
||||
"id": "ur_a",
|
||||
"quantity": "radial displacement at the bore (10, 0)",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Pressure",
|
||||
"at": [
|
||||
[
|
||||
10.0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
"pointer": "/nodes/0/displacement/0"
|
||||
},
|
||||
"value": 0.00907936507936508,
|
||||
"tolerance": {
|
||||
"relative": 0.001
|
||||
},
|
||||
"reason": "quadratic elements on 8 radial divisions resolve u_r = A r + B/r to well under 0.1%"
|
||||
},
|
||||
{
|
||||
"id": "hoop_a",
|
||||
"quantity": "hoop stress σ_θ = σ_yy at the bore (10, 0)",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Pressure",
|
||||
"at": [
|
||||
[
|
||||
10.0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
"pointer": "/nodes/0/stress/1"
|
||||
},
|
||||
"value": 166.66666666666666,
|
||||
"tolerance": {
|
||||
"relative": 0.01
|
||||
},
|
||||
"reason": "stress extrapolated to the bore surface and averaged over two elements: about 0.5%"
|
||||
},
|
||||
{
|
||||
"id": "szz",
|
||||
"quantity": "axial stress σ_zz = 2νA at the bore (plane strain)",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Pressure",
|
||||
"at": [
|
||||
[
|
||||
10.0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
"pointer": "/nodes/0/stress/2"
|
||||
},
|
||||
"value": 20.0,
|
||||
"tolerance": {
|
||||
"relative": 0.01
|
||||
},
|
||||
"reason": "σ_zz = ν(σ_r + σ_θ) follows the in-plane stresses, extrapolated as they are"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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_a": {
|
||||
"band": 1.6666666666666668e-7,
|
||||
"value": 166.36121907829184
|
||||
},
|
||||
"szz": {
|
||||
"band": 2.0083065355856494e-8,
|
||||
"value": 20.083065355856494
|
||||
},
|
||||
"ur_a": {
|
||||
"band": 9.07936507936508e-12,
|
||||
"value": 0.009079340794556473
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
[
|
||||
{"command": "mesh.block", "params": {"body": "Pipe", "kind": "quad8", "corners": [[10.0, 0, 0], [20.0, 0, 0], [0, 20.0, 0], [0, 10.0, 0]], "divisions": [8, 16], "edges": [{"corners": [2, 3], "arc": {"center": [0, 0, 0]}}, {"corners": [1, 4], "arc": {"center": [0, 0, 0]}, "name": "bore"}, {"corners": [1, 2], "name": "y0"}, {"corners": [3, 4], "name": "x0"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "all", "geometry": [{"body": "Pipe", "face": "area"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "bore", "geometry": [{"body": "Pipe", "edge": "bore"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "x0", "geometry": [{"body": "Pipe", "edge": "x0"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "y0", "geometry": [{"body": "Pipe", "edge": "y0"}]}},
|
||||
{"command": "model.material.create", "params": {"name": "Steel", "elastic": {"type": "isotropic", "young": 210000.0, "poisson": 0.3}}},
|
||||
{"command": "model.section.create", "params": {"name": "pipe", "set": "all", "material": "Steel", "kind": {"type": "plane_strain", "thickness": 1.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": "p", "type": "pressure", "set": "bore", "magnitude": 100.0}},
|
||||
{"command": "model.step.create", "params": {"name": "Pressure", "procedure": {"type": "static"}, "boundary_conditions": ["sx", "sy"], "loads": ["p"]}},
|
||||
{"command": "solve.static", "params": {}, "id": "solve"}
|
||||
]
|
||||
@@ -1,3 +1,4 @@
|
||||
# NAFEMS LE1 elliptic membrane with 2D plane stress elements
|
||||
# NAFEMS LE1 elliptic membrane with 2D plane stress elements (quad8)
|
||||
|
||||
The membrane of `nafems-le1` meshed with plane stress quadrilaterals.
|
||||
The membrane of `nafems-le1` with plane stress quad8 elements (thickness 0.1): one patch between the
|
||||
two ellipses, 24 × 48 elements graded 4 : 1 towards the hole, mid-side nodes on the ellipses.
|
||||
@@ -1,14 +1,30 @@
|
||||
{
|
||||
"title": "NAFEMS LE1 elliptic membrane with 2D plane stress elements",
|
||||
"title": "NAFEMS LE1 elliptic membrane with 2D plane stress elements (quad8)",
|
||||
"kind": "benchmark",
|
||||
"source": "NAFEMS, The Standard NAFEMS Benchmarks, TNSB Rev. 3, October 1990, test LE1",
|
||||
"status": "pending",
|
||||
"requires": "2D plane stress elements (docs/elements.md)",
|
||||
"source": "NAFEMS, The Standard NAFEMS Benchmarks, TNSB Rev. 3, October 1990, test LE1 (target σ_yy = 92.7 MPa at D); as reproduced in the Abaqus 2017 Benchmarks Guide, 'LE1: Plane stress elements—elliptic membrane'",
|
||||
"quantities": [
|
||||
{
|
||||
"id": "syy_D",
|
||||
"quantity": "σ_yy at D (2, 0)",
|
||||
"value": 92.7
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Load",
|
||||
"at": [
|
||||
[
|
||||
2,
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
"pointer": "/nodes/0/stress/1"
|
||||
},
|
||||
"value": 92.7,
|
||||
"tolerance": {
|
||||
"relative": 0.01
|
||||
},
|
||||
"reason": "the target is published to three figures; the stress extrapolated to the edge on a converged mesh adds a few tenths of a percent"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"note": "ModelCraft's accepted results for this case, written by `cargo xtask oracle --bless`. A result outside its band fails CI.",
|
||||
"values": {
|
||||
"syy_D": {
|
||||
"band": 9.27e-8,
|
||||
"value": 92.64813637353794
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
[
|
||||
{"command": "mesh.block", "params": {"body": "Membrane", "kind": "quad8", "corners": [[2, 0, 0], [3.25, 0, 0], [0, 2.75, 0], [0, 1, 0]], "divisions": [24, 48], "bias": [4, 1], "edges": [{"corners": [1, 4], "ellipse": {"center": [0, 0, 0], "axes": [[2, 0, 0], [0, 1, 0]]}}, {"corners": [2, 3], "ellipse": {"center": [0, 0, 0], "axes": [[3.25, 0, 0], [0, 2.75, 0]]}, "name": "BC"}, {"corners": [1, 2], "name": "CD"}, {"corners": [3, 4], "name": "AB"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "all", "geometry": [{"body": "Membrane", "face": "area"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "AB", "geometry": [{"body": "Membrane", "edge": "AB"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "CD", "geometry": [{"body": "Membrane", "edge": "CD"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "BC", "geometry": [{"body": "Membrane", "edge": "BC"}]}},
|
||||
{"command": "model.material.create", "params": {"name": "Steel", "elastic": {"type": "isotropic", "young": 210000.0, "poisson": 0.3}}},
|
||||
{"command": "model.section.create", "params": {"name": "membrane", "set": "all", "material": "Steel", "kind": {"type": "plane_stress", "thickness": 0.1}}},
|
||||
{"command": "model.boundary_condition.create", "params": {"name": "ab", "type": "symmetry", "target": {"set": "AB"}, "plane": "x"}},
|
||||
{"command": "model.boundary_condition.create", "params": {"name": "cd", "type": "symmetry", "target": {"set": "CD"}, "plane": "y"}},
|
||||
{"command": "model.load.create", "params": {"name": "p", "type": "pressure", "set": "BC", "magnitude": -10.0}},
|
||||
{"command": "model.step.create", "params": {"name": "Load", "procedure": {"type": "static"}, "boundary_conditions": ["ab", "cd"], "loads": ["p"]}},
|
||||
{"command": "solve.static", "params": {}, "id": "solve"}
|
||||
]
|
||||
@@ -3,7 +3,7 @@
|
||||
"kind": "theory",
|
||||
"source": "Hill, The Mathematical Theory of Plasticity, Oxford 1950, ch. V §2: plane strain von Mises collapse pressure p = (2/√3)σ_y ln(b/a)",
|
||||
"status": "pending",
|
||||
"requires": "J2 plasticity (M8/M10 X2)",
|
||||
"requires": "implicit (static) J2 plasticity: explicit J2 is in, a collapse load needs the static solver",
|
||||
"quantities": [
|
||||
{
|
||||
"id": "p_collapse",
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
# Long rotating solid cylinder, axisymmetric
|
||||
|
||||
A solid cylinder of radius 1 (E = 1000, ν = 0.3, ρ = 10⁻³) spinning at 30 rad/s about its axis y,
|
||||
as an axisymmetric slice 0 ≤ y ≤ 0.2 held axially on both faces (ε_z = 0): one quad8 patch of
|
||||
16 × 2. σ_r = (3 − 2ν)/(8(1 − ν)) ρω²(b² − r²), σ_θ = ρω²/(8(1 − ν)) ((3 − 2ν)b² − (1 + 2ν)r²).
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"title": "Long rotating solid cylinder, axisymmetric",
|
||||
"kind": "theory",
|
||||
"source": "Timoshenko and Goodier, Theory of Elasticity, 3rd ed., McGraw-Hill 1970, §32 (long rotating cylinder, ε_z = 0)",
|
||||
"quantities": [
|
||||
{
|
||||
"id": "radial_axis",
|
||||
"quantity": "radial stress σ_r on the axis (r = 0)",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Spin",
|
||||
"at": [
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
"pointer": "/nodes/0/stress/0"
|
||||
},
|
||||
"value": 0.3857142857142857,
|
||||
"tolerance": {
|
||||
"relative": 0.01
|
||||
},
|
||||
"reason": "stress extrapolated to the axis, where σ_r = σ_θ: under 1% with sixteen quadratic elements across"
|
||||
},
|
||||
{
|
||||
"id": "hoop_rim",
|
||||
"quantity": "hoop stress σ_θ at the surface (r = 1)",
|
||||
"measure": {
|
||||
"command": "solve.probe",
|
||||
"params": {
|
||||
"step": "Spin",
|
||||
"at": [
|
||||
[
|
||||
1.0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
"pointer": "/nodes/0/stress/2"
|
||||
},
|
||||
"value": 0.12857142857142853,
|
||||
"tolerance": {
|
||||
"relative": 0.01
|
||||
},
|
||||
"reason": "stress extrapolated to the surface: under 1%"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"note": "ModelCraft's accepted results for this case, written by `cargo xtask oracle --bless`. A result outside its band fails CI.",
|
||||
"values": {
|
||||
"hoop_rim": {
|
||||
"band": 1.2872894568377547e-10,
|
||||
"value": 0.12872894568377546
|
||||
},
|
||||
"radial_axis": {
|
||||
"band": 3.8608385213197527e-10,
|
||||
"value": 0.38608385213197527
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
[
|
||||
{"command": "mesh.block", "params": {"body": "Shaft", "kind": "quad8", "corners": [[0, 0, 0], [1.0, 0, 0], [1.0, 0.2, 0], [0, 0.2, 0]], "divisions": [16, 2], "edges": [{"corners": [1, 2], "name": "bottom"}, {"corners": [3, 4], "name": "top"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "all", "geometry": [{"body": "Shaft", "face": "area"}]}},
|
||||
{"command": "model.set.create", "params": {"name": "ends", "geometry": [{"body": "Shaft", "edge": "bottom"}, {"body": "Shaft", "edge": "top"}]}},
|
||||
{"command": "model.material.create", "params": {"name": "Mat", "elastic": {"type": "isotropic", "young": 1000.0, "poisson": 0.3}, "density": 0.001}},
|
||||
{"command": "model.section.create", "params": {"name": "shaft", "set": "all", "material": "Mat", "kind": {"type": "axisymmetric"}}},
|
||||
{"command": "model.boundary_condition.create", "params": {"name": "ends", "type": "symmetry", "target": {"set": "ends"}, "plane": "y"}},
|
||||
{"command": "model.load.create", "params": {"name": "spin", "type": "centrifugal", "angular_velocity": 30.0, "point": [0, 0, 0], "axis": [0, 1, 0]}},
|
||||
{"command": "model.step.create", "params": {"name": "Spin", "procedure": {"type": "static"}, "boundary_conditions": ["ends"], "loads": ["spin"]}},
|
||||
{"command": "solve.static", "params": {}, "id": "solve"}
|
||||
]
|
||||
@@ -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"}
|
||||
]
|
||||
@@ -3,7 +3,7 @@
|
||||
"kind": "experiment",
|
||||
"source": "Wilkins and Guinan, 'Impact of cylinders on a rigid boundary', Journal of Applied Physics 44 (1973) 1200–1206 (final length and mushroom diameter vs impact speed)",
|
||||
"status": "pending",
|
||||
"requires": "large-deformation plasticity and contact (M10 X2/X3)",
|
||||
"requires": "the measured final shapes, to be transcribed from the paper (explicit Johnson–Cook plasticity is in)",
|
||||
"quantities": [
|
||||
{
|
||||
"id": "final_length",
|
||||
|
||||
Reference in new issue
Block a user