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 <noreply@anthropic.com>
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

+1 -1
View File
@@ -41,7 +41,7 @@ pressure) is a degree of freedom of the existing DOF framework, not a separate s
| M12 CFD: lattice Boltzmann | D3Q19/D3Q27 on grids voxelised from the face-tagged surface; TRT, regularised and cumulant collision; interpolated walls, inlets and outlets; LES (Smagorinsky, WALE) with wall models; thermal LBM and conjugate heat transfer with the structure's thermal solver; non-Newtonian viscosity (power-law, Carreau–Yasuda, Cross, Herschel–Bulkley, Bingham) and temperature-dependent viscosity; porous media (Brinkman, Darcy–Forchheimer); multiphase and free surface (M13); validation by the lid-driven cavity, backward-facing step, cylinder wake (Strouhal) and turbulent channel; octree refinement shared with the hex mesher; wgpu backend (deterministic per device, checked against the CPU) (CPU core: done — `fieldcraft-lbm` with D3Q19 TRT and Guo forcing, halfway bounce-back and moving walls, slip and periodic faces, Zou–He velocity and pressure faces, exact voxelisation of obstacle bodies, momentum-exchange forces per face; fluid materials, fluid domains and fluid steps in the model; `model.fluid_domain.*`, `solve.fluid`; verified by Poiseuille channel and pipe, Couette, Taylor–Green decay, sphere-array Stokes drag and mass conservation; Schäfer–Turek 2D-1 as a benchmark) | started |
| M13 Fluid–structure interaction | Immersed-boundary coupling of the lattice Boltzmann fluid with the explicit or implicit structure; interface force transfer; sub-cycling; Aitken then interface quasi-Newton coupling; free-surface flow | planned |
| M14 Blast and impact fluids | EOS-driven fluids in the explicit solver: ALE multi-material or SPH, with fluid–structure contact | planned |
| M15 Nonlinear implicit core | Newton–Raphson with line search, automatic increments and cutbacks, convergence on force, displacement and energy; geometric nonlinearity (total and updated Lagrangian, large rotations for shells and beams, follower pressure); every `fem` material behind one interface with its consistent tangent (plasticity, damage and thermal strain from the explicit solver reused implicitly); arc-length (Riks) for snap-through; linear buckling (eigen) with preload stress stiffening, and imperfections from buckling modes; nonlinear stabilisation; restart. Verified by the elastica, Lee's frame, the snap-through arch, the hinged cylindrical shell and plastic collapse loads (solids core: done — `nonlinear_static` steps with automatic increments and cutbacks, Newton–Raphson with the consistent tangent, force, displacement and energy convergence and an optional line search; a material point interface (Kirchhoff stress and spatial tangent from F, with history) with St Venant–Kirchhoff and compressible neo-Hookean; total Lagrangian tet4, tet10, wedge6, hex8, hex20 (full and reduced), hybrid hex8/hex20/tet10 by the three-field mixed form, plane strain and axisymmetric elements; follower pressure with its symmetrised load stiffness; Cauchy stress and logarithmic strain, increment history and frames, `solve.nonlinear`; Abaqus and LS-DYNA decks; verified by the patch and objectivity tests, uniaxial stretch, the elastica and tube inflation by a follower pressure (finite-strain Cook's membrane pending its transcribed reference; J2 plasticity on the interface: Simo's exponential return map at finite strain and the radial return at small strain, both with consistent tangents and the return shared with explicit dynamics, bilinear isotropic and kinematic (small strain), tabulated and Johnson–Cook (rate-independent) hardening, hybrid elements included, load paths for cyclic loading, a tangent predictor for path-dependent materials, verified by uniaxial tension to large strain, Hill's thick cylinder (plastic zone and collapse pressure), a cantilever's collapse and the Bauschinger effect, with quadratic Newton convergence; Mooney–Rivlin and Yeoh options (decoupled, hybrid elements), verified in Treloar's three modes and by a stretched tube's inflation; thermal strain by the multiplicative split at finite strain and the additive one at small strain, with temperatures from temperature loads or the step's own conduction, verified by free and constrained expansion and a heated bar held past yield. a supernodal symmetric indefinite LDLᵀ factorization (bounded Bunch–Kaufman within supernodes, inertia) on which Newton continues through indefinite tangents, so nearly incompressible hybrid elements (ν = 0.4999) converge under prescribed displacement. Next: linear buckling, arc-length, incompatible modes (EAS), kinematic hardening at finite strain, shells and beams) | started |
| M15 Nonlinear implicit core | Newton–Raphson with line search, automatic increments and cutbacks, convergence on force, displacement and energy; geometric nonlinearity (total and updated Lagrangian, large rotations for shells and beams, follower pressure); every `fem` material behind one interface with its consistent tangent (plasticity, damage and thermal strain from the explicit solver reused implicitly); arc-length (Riks) for snap-through; linear buckling (eigen) with preload stress stiffening, and imperfections from buckling modes; nonlinear stabilisation; restart. Verified by the elastica, Lee's frame, the snap-through arch, the hinged cylindrical shell and plastic collapse loads (solids core: done — `nonlinear_static` steps with automatic increments and cutbacks, Newton–Raphson with the consistent tangent, force, displacement and energy convergence and an optional line search; a material point interface (Kirchhoff stress and spatial tangent from F, with history) with St Venant–Kirchhoff and compressible neo-Hookean; total Lagrangian tet4, tet10, wedge6, hex8, hex20 (full and reduced), hybrid hex8/hex20/tet10 by the three-field mixed form, plane strain and axisymmetric elements; follower pressure with its symmetrised load stiffness; Cauchy stress and logarithmic strain, increment history and frames, `solve.nonlinear`; Abaqus and LS-DYNA decks; verified by the patch and objectivity tests, uniaxial stretch, the elastica and tube inflation by a follower pressure (finite-strain Cook's membrane pending its transcribed reference; J2 plasticity on the interface: Simo's exponential return map at finite strain and the radial return at small strain, both with consistent tangents and the return shared with explicit dynamics, bilinear isotropic and kinematic (small strain), tabulated and Johnson–Cook (rate-independent) hardening, hybrid elements included, load paths for cyclic loading, a tangent predictor for path-dependent materials, verified by uniaxial tension to large strain, Hill's thick cylinder (plastic zone and collapse pressure), a cantilever's collapse and the Bauschinger effect, with quadratic Newton convergence; Mooney–Rivlin and Yeoh options (decoupled, hybrid elements), verified in Treloar's three modes and by a stretched tube's inflation; thermal strain by the multiplicative split at finite strain and the additive one at small strain, with temperatures from temperature loads or the step's own conduction, verified by free and constrained expansion and a heated bar held past yield. a supernodal symmetric indefinite LDLᵀ factorization (bounded Bunch–Kaufman within supernodes, inertia) on which Newton continues through indefinite tangents, so nearly incompressible hybrid elements (ν = 0.4999) converge under prescribed displacement; linear buckling steps (linear preload, initial-stress stiffness of solids and 2D elements, block Lanczos in the K inner product, the shifted buckling transformation on LDLᵀ with an inertia count, `solve.buckle`, Abaqus `*BUCKLE`), verified by Euler columns and Bryan's plate. Next: arc-length, incompatible modes (EAS), kinematic hardening at finite strain, shells and beams) | started |
| M16 Structural dynamics | Implicit transient (Newmark, HHT-α, generalised-α); modal superposition transient; steady-state harmonic (direct and modal), with Rayleigh, modal, structural and material damping; random vibration from PSDs and response spectrum (SRSS, CQC); complex eigenvalues with damping; rotating machinery (Campbell diagrams, gyroscopic terms); substructures (Craig–Bampton) | planned |
| M17 Constitutive library and material library | Elastic: transversely isotropic, fully anisotropic (21 constants), temperature-dependent. Elastomers: hyperelastic neo-Hookean, Mooney–Rivlin, Yeoh (these three done, in nonlinear steps), Ogden, Arruda–Boyce, Gent, Marlow, with Mullins softening and finite-strain viscoelasticity (Prony series; parallel networks after Bergström–Boyce), foams. Viscoelasticity: small- and finite-strain Prony series, time–temperature superposition (WLF, Arrhenius), storage and loss moduli for harmonic steps. Viscoplasticity and creep: Norton power law, time and strain hardening, Perzyna, Anand, Chaboche combined hardening. Plasticity: Hill anisotropic, Drucker–Prager, Mohr–Coulomb, Cam-clay, crushable foam, concrete damaged plasticity, Gurson. Fluids: Newtonian and non-Newtonian viscosity shared with M12. Material library: curated, cited data sets (steels, aluminium and titanium alloys, polymers, elastomers, composites, tissues) with units and temperature dependence; calibration from test data (uniaxial, biaxial, shear, relaxation, DMA) by least squares with Drucker stability checks; user materials as a safe Rust trait | planned |
| M18 Composites and anisotropy | Material orientations (rectangular, cylindrical, spherical, from geometry edges and faces, per-element fields, draping of fibres over curved parts); layups on shells and continuum shells, ply stacks on swept hex; classical lamination theory checks; ply stresses and strains through the thickness; failure indices (Tsai–Wu, Tsai–Hill, Hashin, Puck, LaRC) and progressive damage; homogenisation (rule of mixtures, Mori–Tanaka, RVEs with periodic boundary conditions); delamination through M20's cohesive zones. Verified by laminate closed forms and the NAFEMS composite benchmarks | planned |
+7 -1
View File
@@ -2,7 +2,7 @@
Generated by `cargo xtask oracle` from [`tests/oracle/`](../tests/oracle/); the policy is [verification.md](verification.md). Every case is our own model, built with FieldCraft commands from the problem's published description, and compared with the reference value its `expected.json` cites, within the stated tolerance and for the stated reason. Accepted results are frozen in each case's `fixture.json`: a later change that moves one beyond its band (10⁻⁹ of its size) fails CI even while the reference still passes. No reference value was produced with a commercial product.
**193 of 199 quantities pass** (6 known failure(s)) in 57 active cases: 48 theory, 9 published benchmark, 0 experiment; 10 pending cases wait for capabilities still being built.
**196 of 202 quantities pass** (6 known failure(s)) in 60 active cases: 51 theory, 9 published benchmark, 0 experiment; 10 pending cases wait for capabilities still being built.
## Theory: closed-form solutions, patch tests and mesh invariants
@@ -14,6 +14,9 @@ Generated by `cargo xtask oracle` from [`tests/oracle/`](../tests/oracle/); the
| [bar-rigid-wall-impact](../tests/oracle/bar-rigid-wall-impact/) | displacement of the struck end at t = 0.3 (in contact until 2L/c = 0.2, then leaving at v₀) | 0.01 | 0.0099541 | -0.459% | 3% | pass | matches |
| [bar-rigid-wall-impact](../tests/oracle/bar-rigid-wall-impact/) | displacement of the far end at t = 0.3 (−v₀L/c, then +v₀ after the reflection) | 0.01 | 0.0099488 | -0.512% | 3% | pass | matches |
| [bar-rigid-wall-impact](../tests/oracle/bar-rigid-wall-impact/) | kinetic energy after the rebound over the initial ½mv₀² | 1 | 0.99463 | -0.537% | 2% | pass | matches |
| [buckle-euler-cantilever](../tests/oracle/buckle-euler-cantilever/) | first buckling stress (load factor of a unit end pressure) | 2.0461 | 2.0424 | -0.181% | 0.5% | pass | matches |
| [buckle-euler-pinned](../tests/oracle/buckle-euler-pinned/) | first buckling stress (load factor of a unit end pressure) | 2.0461 | 2.0424 | -0.179% | 0.5% | pass | matches |
| [buckle-plate-square](../tests/oracle/buckle-plate-square/) | buckling stress of a unit edge pressure | 0.36152 | 0.36013 | -0.386% | 1% | pass | matches |
| [cantilever-frequencies](../tests/oracle/cantilever-frequencies/) | first bending frequency (modes 1 and 2 are the y and z pair) | 0.012771 | 0.012751 | -0.158% | 1% | pass | matches |
| [cantilever-frequencies](../tests/oracle/cantilever-frequencies/) | the other first bending frequency | 0.012771 | 0.012751 | -0.158% | 1% | pass | matches |
| [cantilever-frequencies](../tests/oracle/cantilever-frequencies/) | second bending frequency | 0.080034 | 0.079167 | -1.08% | 2% | pass | matches |
@@ -217,6 +220,9 @@ Generated by `cargo xtask oracle` from [`tests/oracle/`](../tests/oracle/); the
- **[bar-pressure-wave](../tests/oracle/bar-pressure-wave/)** (theory): Elastic wave in a bar from a pressure step (explicit). Source: d'Alembert's solution of the one-dimensional wave equation: c = √(E/ρ), particle velocity v = p/(ρc); Graff, Wave Motion in Elastic Solids, Dover 1991, §2.1. Tolerances — u_end: the end moves at the particle velocity p/(ρc) from the start; the discrete wave's ringing behind the front changes the end's displacement by well under 1%; v_mid: central differences ring behind a step front (dispersion); bulk viscosity damps it within a few elements, leaving about 1% twenty elements behind; balance: external work = kinetic + internal + dissipated energy; the solver warns above 1%
- **[bar-rigid-wall-impact](../tests/oracle/bar-rigid-wall-impact/)** (theory): Elastic bar striking a rigid wall (explicit). Source: One-dimensional elastic impact on a rigid wall: contact time 2L/c, rebound at the impact speed, contact stress ρcv₀; Graff, Wave Motion in Elastic Solids, Dover 1991, §2.3; Johnson, Impact Strength of Materials, Arnold 1972, §1.6. Tolerances — u_front: the contact ends at 2L/c in the elastic theory; the discrete release front is spread over a few elements, a few tenths of a percent of the time, and the rebound speed is v₀ to about 1%; u_back: as for the struck end; ke: an elastic impact keeps the kinetic energy; quadratic bulk viscosity in the compression front and the vibration left in the bar take about 1%
- **[buckle-euler-cantilever](../tests/oracle/buckle-euler-cantilever/)** (theory): Euler buckling of a clamped–free column of solids. 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. Tolerances — lambda: 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
- **[buckle-euler-pinned](../tests/oracle/buckle-euler-pinned/)** (theory): Euler buckling of a pinned column of solids. 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. Tolerances — lambda: 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
- **[buckle-plate-square](../tests/oracle/buckle-plate-square/)** (theory): Buckling of a simply supported square plate in uniaxial compression. 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. Tolerances — lambda: 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
- **[cantilever-frequencies](../tests/oracle/cantilever-frequencies/)** (theory): Natural frequencies of a cantilever (Euler–Bernoulli). Source: Euler–Bernoulli beam: f_n = (β_n L)²/(2π L²)·√(EI/ρA), β₁L = 1.8751, β₂L = 4.6941; Timoshenko, Young and Weaver, Vibration Problems in Engineering, 4th ed., Wiley 1974, §5.3. Tolerances — f1: Euler–Bernoulli neglects shear and rotary inertia, which lower f1 by about 0.2% at L/h = 20; f1_pair: as f1: a square section bends alike in y and z; f2: shear and rotary inertia lower the second mode by about 1% at L/h = 20 (Timoshenko)
- **[cantilever-hex20](../tests/oracle/cantilever-hex20/)** (theory): Cantilever under a tip load, Timoshenko deflection (hex20). Source: Timoshenko and Gere, Mechanics of Materials (beam with shear deformation: δ = PL³/3EI + PL/κGA, κ = 5/6 for a rectangle); Cowper, J. Appl. Mech. 33 (1966) 335–340 for the shear coefficient. Tolerances — tip_uz: beam theory vs 3D elasticity: the shear coefficient and the fully clamped end change the tip deflection by a few tenths of a percent at L/h = 10; reaction: equilibrium holds to rounding
- **[cantilever-hex8-incompatible](../tests/oracle/cantilever-hex8-incompatible/)** (theory): Cantilever under a tip load, Timoshenko deflection (hex8-incompatible). Source: Timoshenko and Gere, Mechanics of Materials (beam with shear deformation: δ = PL³/3EI + PL/κGA, κ = 5/6 for a rectangle); Cowper, J. Appl. Mech. 33 (1966) 335–340 for the shear coefficient. Tolerances — tip_uz: beam theory vs 3D elasticity (a few tenths of a percent at L/h = 10); incompatible modes represent the bending exactly in the constant-moment part; reaction: equilibrium holds to rounding
+1 -1
View File
@@ -63,7 +63,7 @@ products are run, no documentation text is copied). Status: **done**, **started*
| Decks | LS-DYNA keyword writer (implicit; explicit in M8) | M3 | | done (implicit static and eigenvalue; beam sections planned) |
| Decks | Readers keeping unknown keywords | M9 | | planned |
| Solve | Own linear static and modal solver, verified against analytic solutions | M4 | yes | started (solid elements: tet4, tet10, wedge6, hex8, hex20; 2D plane stress, plane strain and axisymmetric tri3, tri6, quad4 (full, incompatible modes), quad8 (full, reduced); quad4/tri3 MITC shells and Timoshenko beams with profiles, mixed with solids; reference points, kinematic and distributing couplings, moments; centrifugal loads) |
| Solve | Own nonlinear implicit solver: Newton–Raphson with line search and automatic increments, total Lagrangian solids and 2D elements, mixed u–p at finite strain, follower pressure | M15 | yes | started (solids, plane strain, axisymmetric; St Venant–Kirchhoff, neo-Hookean and J2 plasticity (Simo's exponential return map at finite strain, radial return at small strain, consistent tangents, the return shared with explicit dynamics); verified by the elastica, tube inflation, patch and objectivity tests, uniaxial tension to large strain, Hill's thick cylinder, a cantilever's collapse and the Bauschinger effect; Mooney–Rivlin and Yeoh; thermal strain at finite and small strain; a symmetric indefinite LDLᵀ factorization with inertia, Newton through indefinite tangents (hybrid elements at ν = 0.4999 under prescribed displacement); shells, contact, buckling, arc-length next) |
| Solve | Own nonlinear implicit solver: Newton–Raphson with line search and automatic increments, total Lagrangian solids and 2D elements, mixed u–p at finite strain, follower pressure | M15 | yes | started (solids, plane strain, axisymmetric; St Venant–Kirchhoff, neo-Hookean and J2 plasticity (Simo's exponential return map at finite strain, radial return at small strain, consistent tangents, the return shared with explicit dynamics); verified by the elastica, tube inflation, patch and objectivity tests, uniaxial tension to large strain, Hill's thick cylinder, a cantilever's collapse and the Bauschinger effect; Mooney–Rivlin and Yeoh; thermal strain at finite and small strain; a symmetric indefinite LDLᵀ factorization with inertia, Newton through indefinite tangents (hybrid elements at ν = 0.4999 under prescribed displacement); linear buckling of solids (Euler columns, Bryan's plate); shells, contact, arc-length next) |
| Solve | Own explicit dynamics solver (central differences, one-point hex8 with hourglass control, nodal-pressure tet4, bulk viscosity, energy balance), verified against analytic wave and impact solutions | M10 | yes | started (X1 core and X2: large deformation, objective rates, J2 and Johnson–Cook plasticity, damage, erosion; X3: deformable contact and friction, verified by bar collision, sliding blocks, the contact patch test and Hertz) |
| Results | Deformed shape, contours, mode shapes, probes, reaction sums | M4 | | started (results in the session, `solve.probe`, reaction sums; display planned) |
| Results | XY and path plots, cuts, display groups, free-body forces, animation | M9 | | planned |
@@ -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"}
]