Difference between revisions of "Setting Up the GCHP Environment"
(→Create an Environment File) |
(→Create an Environment File) |
||
Line 17: | Line 17: | ||
You must load all necessary libraries and export certain environment variables before compiling GCHP. The GCHP environment is different from GEOS-Chem Classic and is often considered the largest obstacle to getting GCHP up and running for the first time. We have tried to make setting libraries and variables as automatic as possible to minimize problems. However, libraries will always be specific to your local compute cluster which presents challenges for compatibility. We recommend simplifying the environment setup process by customizing a GCHP-specific environment file that works on your system and saving it for future work. | You must load all necessary libraries and export certain environment variables before compiling GCHP. The GCHP environment is different from GEOS-Chem Classic and is often considered the largest obstacle to getting GCHP up and running for the first time. We have tried to make setting libraries and variables as automatic as possible to minimize problems. However, libraries will always be specific to your local compute cluster which presents challenges for compatibility. We recommend simplifying the environment setup process by customizing a GCHP-specific environment file that works on your system and saving it for future work. | ||
− | Sample environment files are included in the run directory, several for the [https://www.rc.fas.harvard.edu/resources/odyssey-architecture/ Harvard University Odyssey cluster] and one for a more generic Linux system. These are located | + | Sample environment files are included in the run directory, several for the [https://www.rc.fas.harvard.edu/resources/odyssey-architecture/ Harvard University Odyssey cluster] and one for a more generic Linux system. These are located in the <tt>environmentFileSamples</tt> subdirectory. You can use these to develop one compatible with your system. Each sample environment file is customized for a specific combination of Fortran compiler, MPI implementation, netCDF libraries, and compute cluster. For clarity we recommend using the naming format <tt>gchp.compiler_mpi_cluster.env</tt>. For example, <tt>gchp.ifort17_openmpi3_computecanada.env</tt>. We recommend opening several of the sample environment files and getting familiar with the environment variables set. |
− | + | ||
− | We recommend opening several of the sample environment files and getting familiar with the environment variables set | + | |
An example of environment variables needed for GCHP are as follows: | An example of environment variables needed for GCHP are as follows: | ||
Line 48: | Line 46: | ||
file locks (-x) unlimited | file locks (-x) unlimited | ||
− | All example environment files for GCHP explicitly set several of these to unlimited. If you run into a memory issue be sure to check your limits against the list above to see if anything may be limiting your run. | + | All example environment files for GCHP explicitly set several of these to unlimited. If you run into a memory issue be sure to check your limits against the list above to see if anything may be limiting your run. Our current recommendations are as follows: |
− | + | ||
− | + | ||
− | + | ulimit -c unlimited # coredumpsize | |
+ | ulimit -l unlimited # memorylocked | ||
+ | ulimit -u 50000 # maxproc | ||
+ | ulimit -v unlimited # vmemoryuse | ||
+ | ulimit -s unlimited # stacksize | ||
== Expanding MPI Options == | == Expanding MPI Options == |
Revision as of 16:02, 26 April 2019
Previous | Next | User Manual Home | GCHP Home
- Hardware and Software Requirements
- Downloading Source Code and Data Directories
- Obtaining a Run Directory
- Setting Up the GCHP Environment
- Compiling
- Running GCHP: Basics
- Running GCHP: Configuration
- Output Data
- Developing GCHP
- Run Configuration Files
Create an Environment File
You must load all necessary libraries and export certain environment variables before compiling GCHP. The GCHP environment is different from GEOS-Chem Classic and is often considered the largest obstacle to getting GCHP up and running for the first time. We have tried to make setting libraries and variables as automatic as possible to minimize problems. However, libraries will always be specific to your local compute cluster which presents challenges for compatibility. We recommend simplifying the environment setup process by customizing a GCHP-specific environment file that works on your system and saving it for future work.
Sample environment files are included in the run directory, several for the Harvard University Odyssey cluster and one for a more generic Linux system. These are located in the environmentFileSamples subdirectory. You can use these to develop one compatible with your system. Each sample environment file is customized for a specific combination of Fortran compiler, MPI implementation, netCDF libraries, and compute cluster. For clarity we recommend using the naming format gchp.compiler_mpi_cluster.env. For example, gchp.ifort17_openmpi3_computecanada.env. We recommend opening several of the sample environment files and getting familiar with the environment variables set.
An example of environment variables needed for GCHP are as follows:
System memory limits and stack size should be set to unlimited to avoid memory problems. Such problems would manifest as sudden termination upon file read or a segmentation fault during advection. You can find out what you system limits are by typing the following at the command prompt:
ulimit -a
You will see something like this:
core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 1030083 max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 100000 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) unlimited cpu time (seconds, -t) unlimited max user processes (-u) 4096 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
All example environment files for GCHP explicitly set several of these to unlimited. If you run into a memory issue be sure to check your limits against the list above to see if anything may be limiting your run. Our current recommendations are as follows:
ulimit -c unlimited # coredumpsize ulimit -l unlimited # memorylocked ulimit -u 50000 # maxproc ulimit -v unlimited # vmemoryuse ulimit -s unlimited # stacksize
Expanding MPI Options
GCHP is compatible with MPICH, OpenMPI, and MVAPICH2 MPI implementations. However, you may want to use a different implementation, possibly out of necessity. To do this, follow the steps below.
- Specify environment variable ESMF_COMM to match the MPI implementation. Options are currently in place for MVAPICH2 (ESMF_COMM=mvapich2), OpenMPI (ESMF_COMM=openmpi), and a generic MPI implementation. (ESMF_COMM=mpi). The generic option is sufficient when, for example, running with the SGI MPI implementation on NASA's Pleiades servers. If you are using a new MPI implementation not covered by one of these options, we recommend running first with ESMF_COMM=mpi.
- Specify the environment variable MPI_ROOT to point to the MPI root directory, such that $MPI_ROOT/bin/mpirun points to the correct MPI run binary.
- Ensure that you have valid mpif90 and mpifort executables. These almost always perform the same role but both names are invoked in the build sequence. If you have one but not the other, we strongly recommend that you make a symbolic link to the working binary with the name of the missing binary in a dedicated folder, and then add that folder to your path at the command line and in your .bashrc. For example, if you have a mpifort binary but not an mpif90 binary, run the following commands:
mkdir $HOME/mpi_extra cd $HOME/mpi_extra ln -s $( which mpifort ) mpif90 export PATH=${PATH}:${HOME}/mpi_extra
You should now try to compile GCHP. If the generic option does not work then you will need to implement a new option. This involves updating GCHP source code. An example of how to do this for Intel MPI is as follows:
- Decide a new name, such as ESMF_COMM=intel for the Intel MPI implementation.
- Determine the relevant include path and linker commands for your MPI implementation. In this example for Intel MPI they are $(MPI_ROOT)/include and -L$(MPI_ROOT)/lib -lmpi -lmpi++ respectively.
- Update source code files CodeDir/GCHP/GIGC.mk and CodeDir/GCHP/Shared/Config/ESMA_base.mk. In both files, search for environment variable ESMF_COMM in the file. You should find a small set of occurrences in a single "if..else.." block. Add a new clause below the one for mvapich2 as follows.
In GIGC.mk:
else ifeq ($(ESMF_COMM),intel) # %%%%% Intel MPI %%%%% MPI_LIB := -L$(MPI_ROOT)/lib -lmpi -lmpi++
In ESMA_base.mk:
else ifeq ($(ESMF_COMM),intel) INC_MPI := $(MPI_ROOT)/include LIB_MPI := -L$(MPI_ROOT)/lib -lmpi -lmpi++