Examples

Runnable inputs live under examples/, grouped by time integrator. Each directory contains a YAML input and its mesh, so any of them can be run directly:

bin/carina examples/mechanics/quasistatic/cube/cube.yaml

Paths inside an input file resolve relative to that file, so examples work from any working directory.

Quasi-static

ExampleDemonstrates
quasistatic/cube/cube.yamlBaseline Newton + direct solve
quasistatic/cube/cube_gpu.yamlSame problem on GPU (CG + Jacobi)
quasistatic/cube/cube_lbfgs.yamlMatrix-free L-BFGS linear solve
quasistatic/cube/cube_nlcg.yamlNonlinear CG, no linear solver
quasistatic/cube/cube_sd.yamlSteepest descent
quasistatic/cube-linear-elastic/cube.yamlLinear elastic material and its caching path
quasistatic/cube-neumann-bc/cube.yamlSurface traction
quasistatic/cube-gravity/cube.yamlBody force
quasistatic/two-block/two-block.yamlTwo element blocks with different materials
quasistatic/tension-specimen/tension-specimen.yamlTension specimen, elastic
quasistatic/tension-specimen-j2/tension-specimen.yamlFinite-deformation J2 plasticity
quasistatic/tension-specimen-j2/tension-specimen-dt001.yamlThe same, with a smaller step for path accuracy

Implicit dynamics (Newmark)

ExampleDemonstrates
implicit-dynamic/cube/cube.yamlBaseline Newmark
implicit-dynamic/cube/cube_direct.yamlDirect linear solve
implicit-dynamic/cube/cube_gpu.yamlGPU
implicit-dynamic/cube/cube_lbfgs.yamlL-BFGS
implicit-dynamic/cube/cube_nlcg.yamlNonlinear CG
implicit-dynamic/cube-rigid-body/cube.yamlUnconstrained rigid-body motion
implicit-dynamic/cantilever/cantilever.yamlCantilever vibration
implicit-dynamic/clamped/clamped.yamlClamped wave, verified against theory
implicit-dynamic/clamped-bc/clamped-bc.yamlWave driven by a boundary pulse
implicit-dynamic/sphere/sphere_implicit.yamlLarge-deformation sphere torsion
implicit-dynamic/sphere/sphere_lbfgs.yamlThe same with L-BFGS
implicit-dynamic/torsion/torsion_lbfgs.yamlTorsion bar
implicit-dynamic/tension-specimen/tension-specimen.yamlDynamic tension

Explicit dynamics (central difference)

ExampleDemonstrates
explicit-dynamic/cube/cube.yamlBaseline explicit run
explicit-dynamic/cube/cube_gpu.yamlGPU explicit — the matrix-free path
explicit-dynamic/cantilever/cantilever.yamlCantilever
explicit-dynamic/clamped/clamped.yamlClamped wave with an initial pulse
explicit-dynamic/clamped-bc/clamped-bc.yamlBoundary-driven pulse
explicit-dynamic/sphere/sphere_explicit.yamlSphere
explicit-dynamic/torsion/torsion_explicit.yamlTorsion bar — the front-page animation

Suggested reading order

If you are new to the input format, work through these four:

  1. quasistatic/cube/cube.yaml — the smallest complete input: mesh, material, integrator, one Dirichlet condition, one solver.
  2. quasistatic/cube-neumann-bc/cube.yaml — adds loading, and shows the traction sign convention.
  3. implicit-dynamic/cube/cube.yaml — adds mass, initial conditions, and the termination-criteria block.
  4. explicit-dynamic/torsion/torsion_explicit.yaml — the explicit path: CFL-driven step, output-interval subcycling, and no solver section at all.

Running on GPU

Examples ending in _gpu.yaml set device: in the input. Any example can be moved to a GPU from the command line instead:

bin/carina examples/mechanics/explicit-dynamic/torsion/torsion_explicit.yaml --device rocm

The explicit examples benefit most — that path is matrix-free and scales to millions of degrees of freedom. Implicit examples run on GPU too: cg with either amg or jacobi is supported. Only direct linear solves and the ic preconditioner are CPU-only, so implicit examples using those will fail on GPU; see Solvers.