This post will contain a strategy for building current (UM13.X) UM executables on Gadi. Roughly, the goal is to be able to use Spack to build all relevant UM13.X executables from source code controlled by private GitHub repositories. Milestones towards this goal will be described below.
The current situation
Currently, UM executables are usually built on Gadi starting from a Rose/Cylc suite or a Rose-Stem test from a UM source directory. Rose is used to select configuration options, and FCM is the main tool used to build the executables, using toolchains and libraries that are configured via environment variables. These environment variables are usually defined by environment modules. An FCM configuration file in the suite or test (e.g. app/fcm_make_um/file/fcm-make.cfg) uses the FCM include command to include an FCM configuration from the UM source code, such as fcm-make/nci-x86-ifort/um-atmos-safe.cfg. This file usually includes a file such as fcm-make/inc/um-atmos-common.cfg, which is the main FCM configuration file used to build the requested UM executables.
For example, the ACCESS-Regional Nesting Suite software inventory contains a description of the FCM configuration that is used to build the um-atmos.exe and um-recon.exe executables for the u-dg768 regional nesting suite.
In the case of um-atmos.exe and um-recon.exe, the FCM build defined by fcm-make/inc/um-atmos-common.cfg uses components from six separate Subversion source code repositories, configured via FCM keywords as MOSRS mirror repositories. These are: fcm:casim.xm, fcm:jules.xm, fcm:shumlib.xm, fcm:socrates.xm, fcm:ukca.xm, and fcm:um.xm. These six components are not used to build separate libraries but are instead treated as a single source code base. THE FCM build also uses diff locations, one for casim and three for um. These diff locations point to different branches in the casim and um repositories respectively.
The FCM build also uses the eccodes, eccodes_f90, gcom, netcdf, and netcdff libraries. The eccodes/2.8.0 and gcom/7.7_ompi.4.0.2 modules from /g/data/access, and the netcdf/4.7.1 module from /apps define the environment variables that FCM and the Fortran compiler need in order to use these libraries.
The overall strategy
The main idea would be to perform the following two steps in parallel — if possible.
- Create Spack packages for
um-atmos.exe,um-recon.exe, and relevant related UM executables. - Migrate the
casim,jules,shumlib,socrates,ukca,umand relevant related MOSRS Subversion repositories to GitHub Git repositories.
Spack packages
The overall strategy implies that initially the Spack packages would use the existing FCM keywords and MOSRS Subversion mirror repositories. A single Spack package currently cannot use multiple Subversion repositories, so the FCM extract steps performed in the case of the build of um-atmos.exe and um-recon.exe would have to be retained. The steps towards creating Spack package definitions that build from GitHub repositories would then be something like:
- Configure each Spack package definition to build using current FCM configurations with fixed set of configuration options obtained from (e.g.) suite Rose configuration files. This would include
config_root_pathand the revisions anddifflocations of components. Each Spack package definition would configure libraries similarly to the way that theum7Spack package currently does it. - Change some relevant FCM configuration options into variants within each Spack package definition.
- Move the FCM
extractanddiffsteps into each Spack package definition, and somehow support multiple Subversion repositories (?) - When a set of consolidated Git branches is available via GitHub, change each Spack package definition so that it uses a single GitHub URL.
The question mark after step 3 indicates that is not clear how this step would be done, if at all.
GitHub repositories
ACCESS-NRI already has two active projects working on UM sources.
- The ACCESS-AM3 project includes updating CABLE within the UM. This project currently targets UM13.1. The project includes three private repositories:
- The ACCESS-CM3 project includes adding the NUOPC coupler to the UM. This project currently targets UM13.0. The project includes a MOSRS UM Trac ticket and two UM branches:
- https://code.metoffice.gov.uk/trac/um/ticket/6904 Examine feasibility of coupling with NUOPC
- https://code.metoffice.gov.uk/trac/um/log/main/branches/dev/martindix/vn13.0_nuopc
- https://code.metoffice.gov.uk/trac/um/log/main/branches/dev/kieranricardo/vn13.0_nuopc
To be completed.