Software development
We actively develop and maintain a small open-source toolchain that underpins the group’s research. Most of it is part of, or builds on, the OOFEM object-oriented finite-element code — day-to-day work happens on our fork at github.com/githubgrasp/oofem, with curated reproducible examples in github.com/githubgrasp/oofem-examples that run against a public Docker image (no compilation needed). Three stand-alone tools (a C++ random-field generator, a Python SDOF blast solver, and a MATLAB thick-walled cylinder solver) are used for student projects, random-field input to OOFEM analyses, and specific publication-driven studies.
Active components
OOFEM (fork)
Our fork of OOFEM contains the features we use day-to-day, including the lattice and transport-lattice elements, CDPM2, the mass-transport modules, and the supporting infrastructure for the four tools below. Most of what’s here is intended to be upstreamed. Fork on GitHub · Upstream OOFEM
Aggregate
Random disk and sphere packer for generating heterogeneous specimens
(matrix + low-permeability or stiff inclusions). Inputs a target
volume fraction and a grading curve; outputs a packing that the
mesh generator can respect. Periodic and non-periodic packings,
inter-aggregate clearance for the mesh discretisation.
Lives at src/aggregate/ in the OOFEM fork.
Generator
Random-node distribution tool used to seed Voronoi/Delaunay lattice
meshes. Supports periodic and non-periodic domains, vertex/edge/face
anchors so the generated mesh respects geometric features (boundaries,
inclusion outlines, notches), and grading control via per-vertex
refinement.
Lives at src/generator/ in the OOFEM fork.
Converter
Assembles OOFEM input files (oofem.in) from a control template, a
node distribution (mesh.nodes), a Voronoi tessellation
(mesh.voronoi), and optional inclusion / notch / periodic-pair
metadata. Handles the lattice/transport-lattice topology, boundary
conditions, sets, and material tagging through a unified #@
directive syntax.
Lives at src/converter/ in the OOFEM fork.
Genran
Stand-alone C++ generator for non-Gaussian random fields in 1D, 2D
or 3D, with a prescribed marginal distribution (Gaussian, Weibull, or
grafted Weibull–Gaussian) and a Gaussian-shaped autocorrelation. Uses
the Shinozuka–Deodatis spectral representation, with optional
Shields–Deodatis–Bocchini (2011) iterative refinement so the
prescribed autocorrelation is also recovered for non-Gaussian targets.
Originally written in 2006, since modernised. Plain g++, no external
dependencies. Used as input to OOFEM lattice analyses where each
element gets a spatially-correlated random material property (see e.g.
the random e0 example).
genran on GitHub
Blast (SDOF)
Stand-alone Python library (not OOFEM-based) for single-degree-of-freedom dynamic analysis of structural elements (beams, two-way slabs) under transient loading such as a blast pulse — central-difference time integration with a Masing-rule hysteretic constitutive model (elastic unloading from the plastic branch and plasticity activated on the other side under reverse loading). Geometry-agnostic: a single solver and constitutive model handle any element class whose factory provides an equivalent mass and a piecewise resistance backbone. Used for student projects. BlastCode on GitHub
Thick-walled cylinder
Stand-alone MATLAB code (not OOFEM-based) for thick-walled hollow cylinder and sphere problems with coupled hydro-mechanical and transport–structural action. Used in studies of hydraulic fracture (Grassl et al., 2015), corrosion-induced cracking (Fahy et al., 2017), fluid-induced fracture of permeable spheres (Grassl et al., 2019), and creep effects on corrosion-induced cracking (Aldellaa et al., 2022). Kept up to date and used for student projects. thickwalledcylinder on GitHub
Reproducible examples
A curated set of two-command examples covering CDPM2 verification, lattice fracture, unsaturated lattice transport, and heterogeneous matrices: github.com/githubgrasp/oofem-examples. Each example has an accompanying blog post.
Distribution
- Public Docker image (
ghcr.io/githubgrasp/oofem-public) — ships OOFEM, aggregate, converter, generator, plus Python / gnuplot / ffmpeg for post-processing. Anonymous pull from ghcr.io. Multi-arch (Apple Silicon, Intel, Linux). - Private Docker image — bundles T3D (academic-licensed, not redistributable). Distributed to students by their supervisor.
See student projects for the day-to-day commands.