The GEMINI model (Geospace Environment Model of Ion-Neutral Interactions) is a three-dimensional ionospheric fluid-electrodynamic model written (mostly) in object-oriented fortran (2008+ standard). GEMINI is used for various scientific studies including:
The detailed mathematical formulation of GEMINI is included in GEMINI-docs. A subroutine-level set of inline generated documentation describing functions of individual program units is given via source code comments which are rendered as webpages. GEMINI uses generalized orthogonal curvilinear coordinates and has been tested with dipole and Cartesian coordinates.
Generally, the Git main branch has the current development version and is the best place to start, while more thoroughly-tested releases happen regularly.
Specific releases corresponding to published results are generally noted in the corresponding journal article.
The GEMINI development teams values input from our user community, particulary in the form of reporting of errors. These allow us to insure that the code functions properly for a wider range of conditions, platforms, and use cases than we are otherwise able to directly test.
Please open a GitHub Issue if you experience difficulty with GEMINI. Try to provide as much detail as possible so we can try to reproduce your error.
Gemini is intended to be OS / CPU arch / platform / compiler agnostic. Operating system support includes: Linux, MacOS, and Windows. CPU arch support includes: Intel, AMD, ARM, IBM POWER, Cray and more. GEMINI can run on hardware ranging from a Raspberry Pi to laptop to a high-performance computing (HPC) cluster. Generally speaking one can run large 2D or modest resolution 3D simulations (less than 10 million grid points) on a quad-core workstation, with some patience.
For large 3D simulations (many tens-to-hundreds of millions of grid points), GEMINI is best run in a cluster environment or a very “large” multi-core workstation (e.g. 16 or more cores). Runtime depends heavily on the grid spacing used, which determines the time step needed to insure stability, For example we have found that a 20M grid point simulations takes about 4 hours on 72 Xeon E5 cores. 200M grid point simulations can take up to a week on 256 cores. It has generally been found that acceptable performance requires > 1GB memory per core; moreover, a large amount of storage (hundreds of GB to several TB) is needed to store results from large simulations.
To build Gemini and run self-tests takes about 10 minutes on a laptop. Gemini3D uses several external libraries that are built as a required one-time procedure. Gemini3D works “offline” that is without internet once initially setup.
Requirements:
python -m pip install cmakeInstall Gemini3D prerequisite libraries. This is a one-time process used by any Gemini3D builds you do (or other programs). If your Python is too old, it will also install a local Python interpreter.
git clone https://github.com/gemini3d/external.git
cmake -B external/build -S external -DCMAKE_INSTALL_PREFIX=~/libgem
# the libgem name/location is arbitrary
cmake --build external/build
Note: if the external build fails and you don’t see the error message, run the build command cmake --build external/build once or twice more see if you can scroll back to it.
The build is massively in parallel and so sometimes the error is many screens back up.
Set environment variables CMAKE_PREFIX_PATH and edit PATH environment variable as follows.
On Linux add to ~/.bashrc, or on MacOS add to ~/.zshrc:
export CMAKE_PREFIX_PATH=~/libgem
export PATH=$HOME/libgem/bin:$PATH
On Windows from Windows Terminal / Command Prompt:
rundll32 sysdm.cpl,EditEnvironmentVariables
Then add “New” variable CMAKE_PREFIX_PATH with value ~/libgem.
“Edit” variable Path with New value %USERPROFILE%\libgem\bin.
Build the Gemini3D code
```sh
git clone https://github.com/gemini3d/gemini3d.git
cd gemini3d
cmake -B build -DCMAKE_PREFIX_PATH=~/libgem
cmake --build build --parallel
```
Non-default build options may be used.
GEMINI has self tests that compare the output from a “known” test problem to a reference output. To verify your GEMINI build, run the self-tests:
ctest --test-dir build
Note: some HPC systems only have internet when on a login node, but cannot run MPI simulations on the login node. Batch sessions, including interactive, may be offline. To run CTest in such an environment, download the data once from the login node:
ctest --test-dir build --preset download
then from an interactive batch session, run the tests:
ctest --test-dir build --preset offline
For various numerical solutions Gemini relies on:
For file input/output we also use:
For basic operations the GEMINI main program simply needs to be run from the command line with arguments corresponding to to the number of processes to be used for the simulation, the location where the input files are and where the output files are to be written:
mpiexec -np <number of processors> build/gemini.bin <output directory>
for example:
mpiexec -np 4 build/gemini.bin ~/mysim3d/arecibo
GEMINI can also be run via scripting frontends, e.g. python -m gemini3d.run -np options.
By default, only the current simulation time and a few other messages are shown to keep logs uncluttered. gemini.bin command line options include:
-d | -debug-nooutput-manual_grid <# x2 images> <# x3 images>-dryrunIf you prefer to issue the GEMINI run command through a scripting environment you may do so (via python) in the following way:
run the equilibrium sim:
python -m gemini3d.run /path_to/config_eq.nml /path_to/sim_eq/
create a new config.nml for the actual simulation and run
python -m gemini3d.run /path_to/config.nml /path_to/sim_out/
See Readme_input for details on how to prepare input data for GEMINI. Generally speaking there are python and MATLAB scripts available in the mat_gemini and pygemini repositories that will save data in the appropriate format once generated.
GEMINI uses Python for essential interfaces, plotting and analysis. Matlab scripts relevant to Gemini to mat_gemini repo.
Only the essential scripts needed to setup a simple example, and plot the results are included in the main GEMINI repository. The Gemini-scripts and Gemini-examples contain scripts used for various published and ongoing analyses.
See Readme_output for a description of how to load the simulation output files and the different variable names, meanings, and units.
An auxiliary program, magcalc.f90, can be used to compute magnetic field perturbations from a complete disturbance simulation. See Readme_magcalc for a full description of how this program works.
Occasionally MUMPS will throw an error because it underestimated the amount of memory needed for a solve. If this happens a workaround is to add this line of code to the potential solver being used for your simulations. If the problem persists try changing the number to 100.
mumps_par%ICNTL(14)=50
0xc0000005 when trying to run Gemini.
This typically requires rebooting the Windows computer.
If this is annoying, please let us know–it happens rarely enough that we’re not sure if it’s a Microsoft MPI bug or something else.