Software development
We develop and maintain a small set of open-source tools for our research. Most of it is part of, or builds on, the OOFEM object-oriented finite-element code. The work is done on our fork at github.com/githubgrasp/oofem, with curated reproducible examples in github.com/githubgrasp/oofem-examples that run with 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 (lattice and transport-lattice elements, CDPM2, mass-transport modules) together with three command-line tools: the aggregate packer, the mesh generator, and the input converter. Fork on GitHub | Manuals and tool documentation
Enumeration references (IDs referenced in input files, straight from the OOFEM
source headers):
DOF IDs (dofiditem.h) |
primary variables for primvars (unknowntype.h) |
internal state variables for cellvars (internalstatetype.h)
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. It uses 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). The same solver and constitutive model work for any element type for which an equivalent mass and a piecewise resistance curve are provided. 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 set of examples, each run with two commands, 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): contains 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: includes T3D (academic-licensed, not redistributable). Distributed to students by their supervisor.
See student projects for the commands.