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

See student projects for the commands.