Installing and Running OpenGGCM#
System Requirements#
OpenGGCM has fairly minimal dependencies:
Required dependencies:
Fortran90 compiler (recommended:
gfortran)MPI
perl
autotools
Optional dependencies:
HDF5 (if using XDMF/HDF5 output)
ADIOS2 (for code coupling)
cmake
Todo
A devcontainer can be a convenient way of getting everything in place to build / run / develop OpenGGCM, but needs documentation and unfortunately is not usually a feasible way of running production.
Marvin#
On UNH’s Cray “Marvin”, I set up the environment for OpenGGCM using conda. (This should work on other machines, too, if one opts to use conda. Most machines are going to have a way to set up environments, it’s generally probably best to stick with that.)
Todo
Add how to installing (mini-)conda.
Create a .condarc in your home directory with the following content:
channels:
- conda-forge
- defaults
channel_priority: strict
Create an environment for OpenGGCM:
conda create -n ggcm
conda activate ggcm
conda install openmpi-mpifort
conda install "adios2=*=mpi_openmpi_*"
conda install cmake
conda install hdf5
conda install jupyter
conda install xarray
conda install dask
conda install matplotlib
pip install ggcmpy
You also want to set the environment variable OPENGGCMDIR to the location of
the OpenGGCM source you cloned from github above, e.g. by adding the following
to your .bashrc or .zshrc.
export OPENGGCMDIR=$HOME/src/openggcm # adjust for your OpenGGCM source location
Activate your environment.
[kaig@ln-0001 openggcm]$ conda activate ggcm
(ggcm) [kaig@ln-0001 openggcm]$
Obtaining OpenGGCM#
Repository Access#
OpenGGCM is maintained in a private github repository. Please contact Kai kai.germaschewski@unh.edu or Doug william.cramer@unh.edu to be given access.
Cloning the repository#
Todo
Setting up ssh or alternative github authentication
forking the repo if planning to do development
(ggcm) [kaig@ln-0001 ~]$ mkdir src
(ggcm) [kaig@ln-0001 ~]$ cd src
(ggcm) [kaig@ln-0001 src]$ git clone git@github.com:unh-hpc/openggcm.git
Cloning into 'openggcm'...
remote: Enumerating objects: 70227, done.
remote: Counting objects: 100% (940/940), done.
remote: Compressing objects: 100% (316/316), done.
remote: Total 70227 (delta 682), reused 756 (delta 621), pack-reused 69287 (from 2)
Receiving objects: 100% (70227/70227), 86.08 MiB | 42.67 MiB/s, done.
Resolving deltas: 100% (54561/54561), done.
Updating files: 100% (1615/1615), done.
This should get you a copy of the OpenGGCM source in src/openggcm.
Have the autotools prepare the code for building:
(ggcm) [kaig@ln-0001 src]$ cd openggcm
(ggcm) [kaig@ln-0001 openggcm]$ ./autogen.sh
Building and Installing OpenGGCM Utilities#
Compile the utilities:
(ggcm) [kaig@ln-0001 openggcm]$ cd util
(ggcm) [kaig@ln-0001 util]$ ./configure --prefix=$HOME
[...]
(ggcm) [kaig@ln-0001 util]$ make
[...]
(ggcm) [kaig@ln-0001 util]$ make install
[...]
This compiles and install the utilities into $PREFIX/bin, so with the prefix
set to $HOME into the bin/ folder in your home directory. Add that folder to
your path (again, something you may want to do in .bashrc or similar to
persist it).
(ggcm) [kaig@ln-0001 util]$ export PATH=$HOME/bin:$PATH
(ggcm) [kaig@ln-0001 util]$ fppn # make sure the fppn tool is now available
usage: fppn [-q] [-c] [-v1] [-v2] [-v3] [-v4] [-longout] [-fold] file
Setting up a run#
Let’s set up a sample run, and run it.
(ggcm) [kaig@ln-0001 work]$ mkdir test0003
(ggcm) [kaig@ln-0001 work]$ cp -a $OPENGGCMDIR/run-template/test0003/{runme,swdata} test0003/
(ggcm) [kaig@ln-0001 work]$ cd test0003
(ggcm) [kaig@ln-0001 test0003]$ ./runme
[...]
Get a coffee and cross your fingers…
Once the build successfully finishes, one should make a batch script and submit a job.
Todo
Really, the runme should be adapted to make a batch script for Marvin here.
But for now, we’ll just run the code by hand.
(ggcm) [kaig@ln-0001 test0003]$ cd target
(ggcm) [kaig@ln-0001 target]$ srun -n 6 ./openggcm
srun: job 27370 queued and waiting for resources
Well, since the queue is full, I just ran on the head node:
(ggcm) [kaig@ln-0001 target]$ mpirun -n 6 ./openggcm
[...]
This run is set up to be a tiny test case, so it only runs for a minute or so. But it should produce some MHD and ionosphere output files that can be plotted using ggcmpy as shown in the sample notebook.