Installing E3SM on a cluster or HPC platform

These instructions assume the machine you're using has already installed all the necessary software such as fortran compilers, MPI libraries, netcdf libraries, pnetcdf libraries, etc.  See Hardware/Software Configuration for a list of necessary software to build/run E3SM.

Installing on a supported cluster.

If you intend to do E3SM development, you should instead follow steps 1-12 in the Development Getting Started Guide and return to step 7 here.


  1. Sign up for a free account at http://github.com
  2. "fork" the model to your own github account.
  3. Log on to the platform on which you want to run E3SM.  

  4. Install an ssh key from that platform to your github account.  See these instructions and note you can skip step 2 if you already have an ssh key on your machine.
  5. Clone the repository to your local account with:  git clone  --recursive git@github.com:E3SM-Project/E3SM.git  This will create a directory called "E3SM" with the code.
  6. cd to the E3SM/cime/scripts directory.
  7. You are now ready to create a case, build and run following the CIME quick guide By default, you will be running the latest version of "master".

Installing on an un-supported cluster or machine.

If you don't want to do a complete port of E3SM to your machine, you can use a "container" which has everything you need to develop and run.   We have development containers for docker and singularity.

Follow steps 1-6 above to get access to the code.

To port your machine, you first have to describe it to the CIME Case Control System.  Complete instructions are in CIME Porting Guide and summarized here.  The best way is to copy the entries for a machine similar to yours and then modify.

  1. Add your machine to <E3SM>/cime_config/machines/config_machines.xml where <E3SM> refers to the repository root.
    1. The easiest approach is probably to copy the configuration for some other machine and then replace all the values
    2. Choose a directory to serve as the inputdata store called DIN_LOC_ROOT in config_machines.xml.   Ideally, this should be readable by all E3SM developers on your platform.
    3. Most of the values should be obvious. You can look at the "userdefined" block to see which items are required and to see documentation on each item.
  2. Add compiler-specific information for each compiler supported by your machine to <E3SM>/cime_config/machines/config_compilers.xml
    1. Here, for each compiler you want to support, you'll need to create a block <compiler COMPILER="<toolset>" MACH="<machine>">
    2. This block will inherit the properties of the primary block for that toolset and allow you to add/override values for your machine.
      1. The most common thing you'll need to do is add link flags with the ADD_SLIBS item.
      2. You may also need to define NETCDF_PATH and PNETCDF_PATH
  3. Add batch settings for your machine by editing <E3SM>/cime_config/machines/config_machines.xml
    1. Machines with similar batch systems should serve a good example of what to add.
    2. If you need a batch system that doesn't exit or special settings, you may have to edit <E3SM>/cime_config/machines/config_batch.xml
    3. You may need to add a machine specific section in config_batch.xml that inherits from the global section for a specified batch system (e.g., pbs).
  4. In certain special cases, you may wish to add/edit <E3SM>/cime_config/machines/Depends.<platform>.<compiler> to tweak compilation options for specific files.
  5. Verify the install is working by building and running a simple X case.
    1. <E3SM>/cime/scripts/create_newcase --case <yourcasename> --compset X --res f19_g16 --mach <yourmachine>
  6. If the X case works, try more complex cases.
    1. <E3SM>/cime/scripts/create_newcase --case <yourcasename> --compset I1850CLM45CN --res f09_g16 --mach <yourmachine>
    2. <E3SM>/cime/scripts/create_newcase --case <yourcasename> --compset FC5 --res ne30_ne30 --mach <yourmachine>
      1. If you have more then one compiler, add -compiler <compiler> to the above.
      2. The above should run for 5 days successfully.
      3. All tests will download input data as needed the first time they are run.