Getting Started
This page covers everything needed to go from a fresh checkout to a running ExaGOOP simulation: system requirements, obtaining the source, building with CMake or GNUmake, and verifying the installation.
System Requirements
ExaGOOP runs on macOS and Linux. Windows is not officially supported; Windows users should use the Windows Subsystem for Linux (WSL).
Compiler. A C++17-capable compiler is required:
GCC 8 or newer
Clang 3.6 or newer
Microsoft Visual C++ (MSVC) is not offcially supported. However, the developers are not aware of any potential issues preventing Windows 11 builds on non-GPU architectures.
Build system. Either of:
CMake 3.20 or newer (recommended)
GNU Make 3.81 or newer
MPI. An MPI-2 implementation (e.g. OpenMPI, MPICH) is required for
multi-process runs. Single-process CPU builds can be compiled without MPI by
setting EXAGOOP_ENABLE_MPI=OFF (CMake) or USE_MPI=FALSE (GNUmake).
GPU (optional).
NVIDIA GPUs: CUDA 11 or newer
AMD GPUs: ROCm 5.2 or newer
The AMReX framework (bundled as a submodule) handles the low-level GPU portability layer.
Obtaining the Source
Clone the repository with its AMReX submodule in a single step:
git clone --recurse-submodules https://github.com/NatLabRockies/Exagoop.git
This creates an Exagoop/ directory. The AMReX sources reside under
Exagoop/Submodules/amrex.
Next, set the two environment variables that the build system and test scripts
rely on. Add these to your ~/.bashrc or ~/.zshrc to make them
persistent:
export MPM_HOME=/path/to/Exagoop
export AMREX_HOME=${MPM_HOME}/Submodules/amrex
Building with CMake
The Build_Cmake/cmake.sh script
contains a template cmake invocation; edit it to match your environment
before running it.
cd $MPM_HOME/Build_Cmake
# Edit cmake.sh as described below, then:
sh cmake.sh
Key options in cmake.sh:
Option |
Default |
Description |
|---|---|---|
|
|
Enable MPI parallelism |
|
|
Enable NVIDIA GPU support (requires CUDA ≥ 11) |
|
|
Enable AMD GPU support (requires ROCm ≥ 5.2) |
|
|
CUDA compute capability, e.g. |
|
|
ROCm target architecture |
|
|
Compile in the heat-transfer module |
|
|
Floating-point precision: |
|
|
Enable HDF5 output |
EXAGOOP_DIMis fixed at2in the CMake build. Users should set these variables corresponding to the dimensionalityof the problem they intend to solve.
On a successful build the executable ExaGOOP<dim>d.*.exe is placed in
$MPM_HOME/Build_Cmake. The executable name is determined by the dimensionality used as well other build variables.
Building with GNUmake
Open $MPM_HOME/Build_Gnumake/GNUmakefile and set the options near the
top of the file:
Variable |
Default |
Description |
|---|---|---|
|
|
Spatial dimension: |
|
|
Compiler: |
|
|
Enable MPI |
|
|
Enable OpenMP threading |
|
|
Enable NVIDIA GPU (CUDA) |
|
|
Enable AMD GPU (ROCm/HIP) |
|
|
Compile in the heat-transfer module |
|
|
Compile in embedded boundary support (requires |
|
|
Build in debug mode |
|
|
Floating-point precision: |
Then build:
cd $MPM_HOME/Build_Gnumake
make -j$(nproc)
The executable is named ExaGOOP<dim>d.<comp>[.<parallel>].ex and is
placed in the same directory.
Verifying the Build
The quickest verification is to run the 1-D axial bar vibration test, which has no physics-module dependencies and produces a known analytical solution:
cd $MPM_HOME/Tests/1D_Axial_Bar_Vibration
sh Generate_MPs_and_InputFiles.sh
# This creates an initial material point file (mpm_particles.dat or mpm_particles.h5) and an input file- Inputs_1DAxialBarVibration.inp
# Now copy the ExaGOOP executable from the build folder and run the solver
./ExaGOOP1d.*.ex Inputs_1DAxialBarVibration.ex
If the run completes without errors, the build is working correctly. For a richer check, the tutorials section walks through two multi-physics test cases end-to-end.
Visualizing Output
ExaGOOP writes output in the AMReX plotfile format. Two types of output files are produced:
plt*files — particle (material point) datanplt*files — nodal grid data
Both can be loaded directly in ParaView using
the built-in AMReX/BoxLib reader. Open the top-level plt*/ or nplt*/
directory as a dataset.
Getting Help
For questions and discussion: GitHub Discussions
To report a bug: GitHub Issues (include your compiler version, MPI implementation, and the build flags used)