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

See student projects for the day-to-day commands.