Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: update.

Some of the subdirectories in the ACME E3SM code contain code that was brought in from another repository.  List them all.

Terms

  • external any subdirectory in ACME E3SM whose entire content is from another repository
  • upstream master  the repository everyone is sending their changes to.  Only one so that everyone pulling from the same source is working with all the same changes.   The source of an external.

Methods for including externals

ACME Rules for new externals

...


  • monorepo the entire repo is added once (usally with subtree) and developed within E3SM.  Might maintain a separate build/test system.
  • buildtime  the repo is checked out to the $CIME_OUTPUT_ROOT/$CASE/bld when compiling a case for the first time.  Code does not exist in E3SM repo.

Rules for adding externals

  1. Group leads must approve adding a new external.  The group needing the external can decide on the method on of inclusion.  A POC for the upstream master must be identified and the IG group leads notified.
  2. The upstream master for the external must be build-able and testable on its own.
  3. For submodules, the linked repo must be readable by all ACME E3SM developers.  If the upstream master can not be made readable, a clone fork must be maintained in ACMEE3SM-Climate Project github and ACME E3SM then links to that clonefork.

Development in externals

In general, there are several ways to develop with external code in ACME

  • strict 1-way:  all development is merged to the upstream master first and flows down to ACMEE3SM.  No exceptions.
  • mostly 1-way:  prefer strict 1-way but some exceptions can be made for emergency fixes
  • 2-way:  developers can make changes in ACME E3SM or the upstream master.  POC keeps them in sync.

More specific instructions for externals are below.

Table of Externals currently in ACME

NameSubdirectory in ACMEexternal methodupstream masterdevelopment methodPOCNotes
CIMEcimesubtreehttps://github.com/ESMCI/cime

2-way


MCTcime/externals/MCTsubtreehttps://github.com/MCSclimate/MCT

mostly 1-way

usually brought in with CIME
PIOcime/externals/pio*subtreehttps://github.com/NCAR/ParallelIO

mostly 1-way

usually brought in with CIME
SCORPIO
components/mpas-o/model

externals/scorpio

externals/scorpio_classic

submodulehttps://github.com
/ACME-Climate/MPAS clone of
/E3SM-Project/scorpiostrict 1-wayJayesh KrishnaE3SM uses this and ignores cime/externals/pio
Kokkosexternals/kokkossubmodulegit@github.com:E3SM-Project/kokkos.git branch e3sm/kokkosstrict 1-wayJames Foucar
MPAS-Source

components/mpas-source

submodule

https://github.com/MPAS-Dev/MPAS-Model

strict 1-way
Mark Petersen
MPAS-Ocean, Seaice and land ice all use code from here.
RRTMGPcomponents/
mpasli/model
cam/src/physics/rrtmgp/externalsubmodule
https
git@github.com:RobertPincus/
/github.com/ACME-Climate/MPAS clone of
rte-rrtmgp.git branch developstrict 1-wayBen Hillman
COSP2components/cam/src/physics/cosp2/externalsubmodule

git@github.com:CFMIP/COSPv2.0.git branch CESM_v2.1.4

strict 1-way

MPP

components/clm/src/external_models/mpp

submodulehttps://github.com/
MPAS-Dev/MPAS
MPP-LSM/MPP branch alm/developstrict 1-wayGautam Bisht
Matt Hoffman

FATES

components

/mpas-cice/model

/clm/src/external_models/fates

submodule

https://github.com/NGEET/fates

strict 1-way
SBETrcomponents/clm/src/external_models/sbetrsubmodulegit@github.com
/ACME-Climate/MPAS clone of
:BeTR-biogeochemistry-modeling/sbetr.gitstrict 1-wayGautam Bisht
CVMixcomponents/mpas-source/src/core_ocean/cvmixrescursive submodulehttps://github.com/CVMix/
MPAS-Dev/MPAS: branch cice/develop
CVMix-srcstrict 1-way
Adrian Turner
Jon Wolfeused to be not in-source and fetched at build time.
ocean BGCcomponents/
clm
mpas-source/src/
external
core_
models
ocean/
fates
BGCrecursive submodulehttps://github.com/
ACME
E3SM-
Climate/fates clone of
Project/Ocean-BGCstrict 1-wayJon Wolfeused to be not in-source and fetched at build time.


 Externals planned for E3SM

...

NameSubdirectory in ACMEexternal methodupstream masterdevelopment methodPOCNotes
CICE column physicsTBDTBD?

?

?


GCAMTBDsubmodule?https://github.com/
NGEET
JGCRI/
fates
gcam-corestrict 1-way
?Gautam Bisht

 

 


Specific external development instructions

CIME:

Code location:  E3SM/cime

Any code development in E3SM/cime/config/acme can be committed directly to E3SM through the normal PR process.

Code development in other parts of CIME should be committed first with a PR in https://github.com/ESMCI/cime.  It will be then brought to E3SM by a subtree merge as in Maintaining the CIME subtree in ACME.

Report issues about the Case Control System, driver or coupler directly to  https://github.com/ESMCI/cime.   config file issues can be reported to E3SM gitub.