verification: Euler columns and Bryan's plate in buckling steps

buckle-euler-pinned and buckle-euler-cantilever (hex20 columns, −0.18 % from Euler with
Engesser's shear correction) and buckle-plate-square (a simply supported square plate, b/t =
100, −0.39 % from k = 4; the support and thickness choices in its README). ROADMAP and parity
updated, docs/oracle.md regenerated.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
This commit is contained in:
jyvikoandClaude Opus 5.5 authored and Irakli Kourtis committed 2026-10-14 13:30:59 -04:00
1 parent 1b57e2e672
commit 788edbbddd
15 files changed
+161 -3

No files matched your search

@@ -0,0 +1,5 @@
# Euler buckling of a clamped–free column of solids
A square column, length 10, side 1, E = 1000, ν = 0 (2 × 2 × 10 hex20), clamped at its base and
pressed by a unit dead pressure on its free top: effective length 20. Reference: Euler with
Engesser's shear correction.
@@ -0,0 +1,20 @@
{
"title": "Euler buckling of a clamped–free column of solids",
"kind": "theory",
"source": "Euler's column with Engesser's shear correction P = P_e/(1 + P_e/(κ G A)), κ = 5/6 (S. P. Timoshenko, J. M. Gere, Theory of Elastic Stability, 2nd ed., McGraw-Hill 1961, §2.1, §2.17): square section 1 × 1, E = 1000, ν = 0, length 10 clamped–free, effective length 20, P_e = π² E I/20², so σ_cr = P/A = 2.046071",
"quantities": [
{
"id": "lambda",
"quantity": "first buckling stress (load factor of a unit end pressure)",
"measure": {
"from": "solve",
"pointer": "/modes/0/load_factor"
},
"value": 2.046070629714299,
"tolerance": {
"relative": 0.005
},
"reason": "hex20, 2 × 2 across and 10 along: the 3D solid's bending and shear against beam theory, and the preload concentrated at the held face"
}
]
}
@@ -0,0 +1,9 @@
{
"note": "FieldCraft's accepted results for this case, written by `cargo xtask oracle --bless`. A result outside its band fails CI.",
"values": {
"lambda": {
"band": 2.0460706297142995e-9,
"value": 2.042374584299829
}
}
}
@@ -0,0 +1,12 @@
[
{"command": "mesh.block", "params": {"body": "Column", "kind": "hex20", "corners": [[0, 0, 0], [10.0, 0, 0], [10.0, 1.0, 0], [0, 1.0, 0], [0, 0, 1.0], [10.0, 0, 1.0], [10.0, 1.0, 1.0], [0, 1.0, 1.0]], "divisions": [10, 2, 2], "faces": {"6": "x0", "4": "x1"}}},
{"command": "model.set.create", "params": {"name": "all", "geometry": [{"body": "Column"}]}},
{"command": "model.set.create", "params": {"name": "x0", "geometry": [{"body": "Column", "face": "x0"}]}},
{"command": "model.set.create", "params": {"name": "x1", "geometry": [{"body": "Column", "face": "x1"}]}},
{"command": "model.material.create", "params": {"name": "Mat", "elastic": {"type": "isotropic", "young": 1000.0, "poisson": 0.0}}},
{"command": "model.section.create", "params": {"name": "col", "set": "all", "material": "Mat", "kind": {"type": "solid"}}},
{"command": "model.boundary_condition.create", "params": {"name": "base", "type": "fixed", "target": {"set": "x0"}}},
{"command": "model.load.create", "params": {"name": "press", "type": "pressure", "set": "x1", "magnitude": 1.0}},
{"command": "model.step.create", "params": {"name": "Buckle", "procedure": {"type": "buckle", "modes": 2}, "boundary_conditions": ["base"], "loads": ["press"]}},
{"command": "solve.buckle", "params": {"step": "Buckle"}, "id": "solve"}
]
@@ -0,0 +1,6 @@
# Euler buckling of a pinned column of solids
A pinned–pinned square column, length 20, side 1, E = 1000, ν = 0, modelled as its half with a
symmetry plane at midspan (2 × 2 × 10 hex20). The pinned end is held laterally over its face,
which leaves its rotation free, and pressed by a unit pressure; the first load factor is the
buckling stress. Reference: Euler with Engesser's shear correction.
@@ -0,0 +1,20 @@
{
"title": "Euler buckling of a pinned column of solids",
"kind": "theory",
"source": "Euler's column with Engesser's shear correction P = P_e/(1 + P_e/(κ G A)), κ = 5/6 (S. P. Timoshenko, J. M. Gere, Theory of Elastic Stability, 2nd ed., McGraw-Hill 1961, §2.1, §2.17): square section 1 × 1, E = 1000, ν = 0, effective length 20, P_e = π² E I/20², so σ_cr = P/A = 2.046071",
"quantities": [
{
"id": "lambda",
"quantity": "first buckling stress (load factor of a unit end pressure)",
"measure": {
"from": "solve",
"pointer": "/modes/0/load_factor"
},
"value": 2.046070629714299,
"tolerance": {
"relative": 0.005
},
"reason": "hex20, 2 × 2 across and 10 along: the 3D solid's bending and shear against beam theory, and the preload concentrated at the held face"
}
]
}
@@ -0,0 +1,9 @@
{
"note": "FieldCraft's accepted results for this case, written by `cargo xtask oracle --bless`. A result outside its band fails CI.",
"values": {
"lambda": {
"band": 2.0460706297142995e-9,
"value": 2.042400056453741
}
}
}
@@ -0,0 +1,13 @@
[
{"command": "mesh.block", "params": {"body": "Column", "kind": "hex20", "corners": [[0, 0, 0], [10.0, 0, 0], [10.0, 1.0, 0], [0, 1.0, 0], [0, 0, 1.0], [10.0, 0, 1.0], [10.0, 1.0, 1.0], [0, 1.0, 1.0]], "divisions": [10, 2, 2], "faces": {"6": "x0", "4": "x1"}}},
{"command": "model.set.create", "params": {"name": "all", "geometry": [{"body": "Column"}]}},
{"command": "model.set.create", "params": {"name": "x0", "geometry": [{"body": "Column", "face": "x0"}]}},
{"command": "model.set.create", "params": {"name": "x1", "geometry": [{"body": "Column", "face": "x1"}]}},
{"command": "model.material.create", "params": {"name": "Mat", "elastic": {"type": "isotropic", "young": 1000.0, "poisson": 0.0}}},
{"command": "model.section.create", "params": {"name": "col", "set": "all", "material": "Mat", "kind": {"type": "solid"}}},
{"command": "model.boundary_condition.create", "params": {"name": "pin", "type": "displacement", "target": {"set": "x0"}, "values": [null, 0.0, 0.0, null, null, null]}},
{"command": "model.boundary_condition.create", "params": {"name": "mid", "type": "symmetry", "target": {"set": "x1"}, "plane": "x"}},
{"command": "model.load.create", "params": {"name": "press", "type": "pressure", "set": "x0", "magnitude": 1.0}},
{"command": "model.step.create", "params": {"name": "Buckle", "procedure": {"type": "buckle", "modes": 2}, "boundary_conditions": ["pin", "mid"], "loads": ["press"]}},
{"command": "solve.buckle", "params": {"step": "Buckle"}, "id": "solve"}
]
@@ -0,0 +1,10 @@
# Buckling of a simply supported square plate in uniaxial compression
A 50 × 50 × 0.5 plate (b/t = 100), E = 1000, ν = 0.3, modelled as its quarter (10 × 10 × 2 hex20)
with symmetry planes. The outer edges are held out of plane along their bottom edge lines, which
leaves their rotation and the plate's Poisson thickening free (simply supported), and they are
free in plane; one is pressed by a unit pressure. Reference: Bryan's k = 4.
Choices: holding the whole edge faces instead blocks the thickening there and lowers the load by
2 % at ν = 0.3; at b/t = 50 the solid stays 1.5 % below thin-plate theory with either support,
the difference falling as the plate thins.
@@ -0,0 +1,20 @@
{
"title": "Buckling of a simply supported square plate in uniaxial compression",
"kind": "theory",
"source": "Bryan's plate buckling stress σ_cr = k π² E/(12 (1 − ν²)) (t/b)² with k = 4 for a square plate simply supported on four edges (G. H. Bryan, Proc. London Math. Soc. 22:54–67, 1891; Timoshenko & Gere 1961, §9.2): b = 50, t = 0.5, E = 1000, ν = 0.3, σ_cr = 0.361524",
"quantities": [
{
"id": "lambda",
"quantity": "buckling stress of a unit edge pressure",
"measure": {
"from": "solve",
"pointer": "/modes/0/load_factor"
},
"value": 0.36152397073587395,
"tolerance": {
"relative": 0.01
},
"reason": "a quarter plate of 10 × 10 × 2 hex20 (b/t = 100) supported on its bottom edge lines: the solid against thin-plate theory (−1.5 % at b/t = 50, falling with t/b) and the discretisation"
}
]
}
@@ -0,0 +1,9 @@
{
"note": "FieldCraft's accepted results for this case, written by `cargo xtask oracle --bless`. A result outside its band fails CI.",
"values": {
"lambda": {
"band": 3.6152397073587395e-10,
"value": 0.3601281681211783
}
}
}
@@ -0,0 +1,19 @@
[
{"command": "mesh.block", "params": {"body": "Plate", "kind": "hex20", "corners": [[0, 0, 0], [25.0, 0, 0], [25.0, 25.0, 0], [0, 25.0, 0], [0, 0, 0.5], [25.0, 0, 0.5], [25.0, 25.0, 0.5], [0, 25.0, 0.5]], "divisions": [10, 10, 2], "faces": {"6": "x0", "3": "y0", "4": "x1", "5": "y1"}, "edges": [{"corners": [1, 4], "name": "sx"}, {"corners": [1, 2], "name": "sy"}]}},
{"command": "model.set.create", "params": {"name": "all", "geometry": [{"body": "Plate"}]}},
{"command": "model.set.create", "params": {"name": "x0", "geometry": [{"body": "Plate", "face": "x0"}]}},
{"command": "model.set.create", "params": {"name": "y0", "geometry": [{"body": "Plate", "face": "y0"}]}},
{"command": "model.set.create", "params": {"name": "x1", "geometry": [{"body": "Plate", "face": "x1"}]}},
{"command": "model.set.create", "params": {"name": "y1", "geometry": [{"body": "Plate", "face": "y1"}]}},
{"command": "model.set.create", "params": {"name": "sx", "geometry": [{"body": "Plate", "edge": "sx"}]}},
{"command": "model.set.create", "params": {"name": "sy", "geometry": [{"body": "Plate", "edge": "sy"}]}},
{"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": "solid"}}},
{"command": "model.boundary_condition.create", "params": {"name": "ssx", "type": "displacement", "target": {"set": "sx"}, "values": [null, null, 0.0, null, null, null]}},
{"command": "model.boundary_condition.create", "params": {"name": "ssy", "type": "displacement", "target": {"set": "sy"}, "values": [null, null, 0.0, null, null, null]}},
{"command": "model.boundary_condition.create", "params": {"name": "symx", "type": "symmetry", "target": {"set": "x1"}, "plane": "x"}},
{"command": "model.boundary_condition.create", "params": {"name": "symy", "type": "symmetry", "target": {"set": "y1"}, "plane": "y"}},
{"command": "model.load.create", "params": {"name": "press", "type": "pressure", "set": "x0", "magnitude": 1.0}},
{"command": "model.step.create", "params": {"name": "Buckle", "procedure": {"type": "buckle", "modes": 1}, "boundary_conditions": ["ssx", "ssy", "symx", "symy"], "loads": ["press"]}},
{"command": "solve.buckle", "params": {"step": "Buckle"}, "id": "solve"}
]