Skip to content

Commit

Permalink
Merge branch 'mahf708/ig/standalone-ghci-oci' (PR #6637)
Browse files Browse the repository at this point in the history
Adds support for running eamxx standalone testing in the gh/ci containers, for now only single-precision tests due to a 
mix of issues. Addresses two issues that have already been fixed in the scream fork. Adds flexibility to build cprnc in 
eamxx.

[BFB]
  • Loading branch information
rljacob authored Oct 4, 2024
2 parents 169448a + b33da8c commit 6920f5e
Show file tree
Hide file tree
Showing 7 changed files with 113 additions and 29 deletions.
55 changes: 55 additions & 0 deletions .github/workflows/eamxx-gh-ci-standalone.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: gh-standalone

on:
pull_request:
branches: [ master ]
paths:
# first, yes to these
- '.github/workflows/eamxx-gh-ci-standalone.yml'
- 'cime_config/machine/config_machines.xml'
- 'components/eamxx/**'
- 'components/homme/**'
# second, no to these
- '!components/eamxx/docs/**'
- '!components/eamxx/mkdocs.yml'

workflow_dispatch:

jobs:

ci:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
test:
- sp
- opt
- dbg
- fpe
container:
image: ghcr.io/e3sm-project/containers-standalone-ghci:standalone-ghci-0.1.0

steps:
-
name: Checkout
uses: actions/checkout@v4
with:
show-progress: false
submodules: recursive
-
name: standalone
env:
SHELL: sh
run: |
# TODO: get rid of this extra line if we can?
git config --global safe.directory '*'
./components/eamxx/scripts/test-all-scream -m ghci-oci -t ${{ matrix.test }}
-
name: Artifacts
uses: actions/upload-artifact@v4
if: ${{ always() }}
with:
name: ${{ matrix.test }}
path: |
components/eamxx/ctest-build/*/Testing/Temporary/Last*.log
4 changes: 2 additions & 2 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
branch = scorpio_classic
[submodule "cosp2"]
path = components/eam/src/physics/cosp2/external
url = git@github.com:CFMIP/COSPv2.0.git
branch = CESM_v2.1.4
url = git@github.com:bartgol/COSPv2.0.git
branch = bartgol/fix-cosp_optical_inputs
[submodule "cime"]
path = cime
url = git@github.com:ESMCI/cime.git
Expand Down
2 changes: 1 addition & 1 deletion components/eam/src/physics/cosp2/external
62 changes: 37 additions & 25 deletions components/eamxx/cmake/BuildCprnc.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -8,32 +8,44 @@
include (EkatUtils)
macro(BuildCprnc)

# Make sure this is built only once
if (NOT TARGET cprnc)
if (SCREAM_CIME_BUILD)
string (CONCAT MSG
"WARNING! By default, scream should not build tests in a CIME build,\n"
"and cprnc should only be built by scream in case tests are enabled.\n"
"If you explicitly requested tests to be on in a CIME build,\n"
"then you can discard this warning. Otherwise, please, contact developers.\n")
message("${MSG}")
endif()
set(BLDROOT ${PROJECT_BINARY_DIR}/externals/cprnc)
file(WRITE ${BLDROOT}/Macros.cmake
"
set(SCC ${CMAKE_C_COMPILER})
set(SFC ${CMAKE_Fortran_COMPILER})
set(FFLAGS \"${CMAKE_Fortran_FLAGS}\")
set(NETCDF_PATH ${NetCDF_Fortran_PATH})
"
)
set(SRC_ROOT ${SCREAM_BASE_DIR}/../..)
add_subdirectory(${SRC_ROOT}/cime/CIME/non_py/cprnc ${BLDROOT})
EkatDisableAllWarning(cprnc)

set(CPRNC_BINARY ${BLDROOT}/cprnc CACHE INTERNAL "")

# TODO: handle this more carefully and more gracefully in the future
# TODO: For now, it is just a hack to get going...
# find cprnc defined in machine entries
set(CCSM_CPRNC $ENV{CCSM_CPRNC})
if(EXISTS "${CCSM_CPRNC}")
message(STATUS "Path ${CCSM_CPRNC} exists, so we will use it")
set(CPRNC_BINARY ${CCSM_CPRNC} CACHE INTERNAL "")
configure_file (${SCREAM_BASE_DIR}/cmake/CprncTest.cmake.in
${CMAKE_BINARY_DIR}/bin/CprncTest.cmake @ONLY)
else()
message(WARNING "Path ${CCSM_CPRNC} does not exist, so we will try to build it")
# Make sure this is built only once
if (NOT TARGET cprnc)
if (SCREAM_CIME_BUILD)
string (CONCAT MSG
"WARNING! By default, scream should not build tests in a CIME build,\n"
"and cprnc should only be built by scream in case tests are enabled.\n"
"If you explicitly requested tests to be on in a CIME build,\n"
"then you can discard this warning. Otherwise, please, contact developers.\n")
message("${MSG}")
endif()
set(BLDROOT ${PROJECT_BINARY_DIR}/externals/cprnc)
file(WRITE ${BLDROOT}/Macros.cmake
"
set(SCC ${CMAKE_C_COMPILER})
set(SFC ${CMAKE_Fortran_COMPILER})
set(FFLAGS \"${CMAKE_Fortran_FLAGS}\")
set(NETCDF_PATH ${NetCDF_Fortran_PATH})
"
)
set(SRC_ROOT ${SCREAM_BASE_DIR}/../..)
add_subdirectory(${SRC_ROOT}/cime/CIME/non_py/cprnc ${BLDROOT})
EkatDisableAllWarning(cprnc)

set(CPRNC_BINARY ${BLDROOT}/cprnc CACHE INTERNAL "")

configure_file (${SCREAM_BASE_DIR}/cmake/CprncTest.cmake.in
${CMAKE_BINARY_DIR}/bin/CprncTest.cmake @ONLY)
endif()
endif()
endmacro()
13 changes: 13 additions & 0 deletions components/eamxx/cmake/machine-files/ghci-oci.cmake
Original file line number Diff line number Diff line change
@@ -1,2 +1,15 @@
include(${CMAKE_CURRENT_LIST_DIR}/common.cmake)
common_setup()

set(CMAKE_Fortran_FLAGS "-Wno-maybe-uninitialized -Wno-unused-dummy-argument -fallow-argument-mismatch" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS "-fvisibility-inlines-hidden -fmessage-length=0 -Wno-use-after-free -Wno-unused-variable -Wno-maybe-uninitialized" CACHE STRING "" FORCE)

# TODO: figure out a better way to handle this, e.g.,
# TODO: --map-by ppr:1:node:pe=1 doesn't work with mpich,
# TODO: but -map-by core:1:numa:hwthread=1 may work well?
# TODO: this will need to be handled in EKAT at some point
set(EKAT_MPI_NP_FLAG "-np" CACHE STRING "-np")

# TODO: hack in place to get eamxx to recognize CPRNC
# TODO: See note in BuildCprnc.cmake...
set(ENV{CCSM_CPRNC} "/usr/local/packages/bin/cprnc")
4 changes: 4 additions & 0 deletions components/eamxx/scripts/machines_specs.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,10 @@
["mpicxx","mpifort","mpicc"],
"",
""),
"ghci-oci" : ([f"eval $({CIMEROOT}/CIME/Tools/get_case_env -c SMS.ne4pg2_ne4pg2.F2010-SCREAMv1.ghci-oci_gnu)"],
["mpicxx","mpifort","mpicc"],
"",
""),
"linux-generic" : ([],["mpicxx","mpifort","mpicc"],"", ""),
"linux-generic-debug" : ([],["mpicxx","mpifort","mpicc"],"", ""),
"linux-generic-serial" : ([],["mpicxx","mpifort","mpicc"],"", ""),
Expand Down
2 changes: 1 addition & 1 deletion components/eamxx/src/share/tests/atm_process_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,7 @@ TEST_CASE("atm_proc_dag", "") {

using strvec_t = std::vector<std::string>;
auto params = create_test_params();
auto p1 = params.sublist("BarBaz");
auto& p1 = params.sublist("BarBaz");

// Make sure there's a missing piece (whatever Baz computes);
p1.set<strvec_t>("atm_procs_list",{"Bar"});
Expand Down

0 comments on commit 6920f5e

Please sign in to comment.