Skip to content

Commit edb848d

Browse files
authored
Add ESMF development tests (#286)
* fix non-exhaustive tests in ESMF_FieldIOUTest.F90 * development tests automatically execute for PR into develop * development tests can be executed manually * development tests will execute on Wednesdays at 08:15 UTC
1 parent 0788ac8 commit edb848d

File tree

2 files changed

+254
-0
lines changed

2 files changed

+254
-0
lines changed
Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
name: Development Tests
2+
3+
on:
4+
schedule:
5+
- cron: "15 8 * * 3"
6+
pull_request:
7+
branches:
8+
- develop
9+
workflow_dispatch:
10+
11+
jobs:
12+
development-test:
13+
name: ${{matrix.config.desc}}
14+
runs-on: ${{matrix.config.osys}}
15+
strategy:
16+
fail-fast: false
17+
matrix:
18+
config:
19+
- {
20+
desc: [email protected]@11-mpiuni-netcdf,
21+
osys: ubuntu-22.04,
22+
cors: 4,
23+
ropt: '',
24+
exhs: ON,
25+
cmpr: gfortran,
26+
cvrs: 11,
27+
bopt: 'O',
28+
comm: mpiuni,
29+
tlib: ON,
30+
ncdf: nc-config
31+
}
32+
- {
33+
desc: [email protected]@12-mpich-netcdf,
34+
osys: ubuntu-22.04,
35+
cors: 4,
36+
ropt: '',
37+
exhs: OFF,
38+
cmpr: gfortran,
39+
cvrs: 12,
40+
bopt: 'O',
41+
comm: mpich,
42+
tlib: ON,
43+
ncdf: nc-config
44+
}
45+
- {
46+
desc: macos@14-gfortran@13-mpiuni-netcdf,
47+
osys: macos-14,
48+
cors: 3,
49+
ropt: '',
50+
exhs: OFF,
51+
cmpr: gfortran,
52+
cvrs: 13,
53+
bopt: 'O',
54+
comm: mpiuni,
55+
tlib: OFF,
56+
ncdf: nc-config
57+
}
58+
- {
59+
desc: macos@14-clang-gfortran@14-openmpi-netcdf,
60+
osys: macos-14,
61+
cors: 3,
62+
ropt: '--oversubscribe',
63+
exhs: ON,
64+
cmpr: gfortranclang,
65+
cvrs: 14,
66+
bopt: 'g',
67+
comm: openmpi,
68+
tlib: ON,
69+
ncdf: nc-config
70+
}
71+
steps:
72+
- name: Set up system
73+
run: |
74+
if [[ "${{matrix.config.osys}}" == "ubuntu-"* ]]; then
75+
sudo apt-get -qq update
76+
sudo apt install -qq -y autoconf automake libtool
77+
elif [[ "${{matrix.config.osys}}" == "macos-"* ]]; then
78+
brew install autoconf automake libtool
79+
brew unlink libevent || true
80+
fi
81+
export STACK_ROOT=${HOME}/stack
82+
mkdir -p ${STACK_ROOT}/{include,lib,lib64,bin}
83+
export ARTIFACTS=${{runner.temp}}/esmf_tests
84+
mkdir -p ${ARTIFACTS}
85+
export LD_LIBRARY_PATH=${STACK_ROOT}/lib64:${STACK_ROOT}/lib:${LD_LIBRARY_PATH}
86+
echo "STACK_ROOT=${STACK_ROOT}" >> $GITHUB_ENV
87+
echo "ARTIFACTS=${ARTIFACTS}" >> $GITHUB_ENV
88+
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" >> $GITHUB_ENV
89+
echo "CPPFLAGS=-I${STACK_ROOT}/include" >> $GITHUB_ENV
90+
echo "LDFLAGS=-L${STACK_ROOT}/lib" >> $GITHUB_ENV
91+
echo "${STACK_ROOT}/bin" >> $GITHUB_PATH
92+
- name: Cache Libraries
93+
id: cache-libraries
94+
uses: actions/cache@v4
95+
with:
96+
path: ${{env.STACK_ROOT}}
97+
key: ${{matrix.config.desc}}
98+
- name: Set up GFORTRAN
99+
if: matrix.config.cmpr == 'gfortran'
100+
run: |
101+
command -v gcc-${{matrix.config.cvrs}} || { exit 1; }
102+
command -v g++-${{matrix.config.cvrs}} || { exit 1; }
103+
command -v gfortran-${{matrix.config.cvrs}} || { exit 1; }
104+
ln -fs `which gcc-${{matrix.config.cvrs}}` /usr/local/bin/gcc
105+
ln -fs `which g++-${{matrix.config.cvrs}}` /usr/local/bin/g++
106+
ln -fs `which gfortran-${{matrix.config.cvrs}}` /usr/local/bin/gfortran
107+
gcc --version; g++ --version; gfortran --version
108+
echo "CC=gcc" >> $GITHUB_ENV
109+
echo "CXX=g++" >> $GITHUB_ENV
110+
echo "F77=gfortran" >> $GITHUB_ENV
111+
echo "F90=gfortran" >> $GITHUB_ENV
112+
echo "FC=gfortran" >> $GITHUB_ENV
113+
- name: Set up GFORTRANCLANG
114+
if: matrix.config.cmpr == 'gfortranclang'
115+
run: |
116+
command -v gfortran-${{matrix.config.cvrs}} || { exit 1; }
117+
ln -fs `which gfortran-${{matrix.config.cvrs}}` /usr/local/bin/gfortran
118+
clang --version; clang++ --version; gfortran --version
119+
echo "CC=clang" >> $GITHUB_ENV
120+
echo "CXX=clang++" >> $GITHUB_ENV
121+
echo "F77=gfortran" >> $GITHUB_ENV
122+
echo "F90=gfortran" >> $GITHUB_ENV
123+
echo "FC=gfortran" >> $GITHUB_ENV
124+
- name: Install MPICH (CACHED)
125+
env:
126+
CACHE_HIT: ${{steps.cache-libraries.outputs.cache-hit}}
127+
if: matrix.config.comm == 'mpich'
128+
run: |
129+
if [[ "$CACHE_HIT" != 'true' ]]; then
130+
MPICH_URL="https://www.mpich.org/static/downloads/4.2.2/mpich-4.2.2.tar.gz"
131+
mkdir ${{runner.temp}}/mpich
132+
cd ${{runner.temp}}/mpich
133+
curl -L $MPICH_URL | tar --strip-components=1 -xz
134+
./configure --prefix=${{env.STACK_ROOT}}
135+
make -j ${{matrix.config.cors}} install
136+
fi
137+
mpichversion
138+
echo "CC=mpicc" >> $GITHUB_ENV
139+
echo "CXX=mpicxx" >> $GITHUB_ENV
140+
echo "F77=mpifort" >> $GITHUB_ENV
141+
echo "F90=mpifort" >> $GITHUB_ENV
142+
echo "FC=mpifort" >> $GITHUB_ENV
143+
- name: Install OPENMPI (CACHED)
144+
env:
145+
CACHE_HIT: ${{steps.cache-libraries.outputs.cache-hit}}
146+
if: matrix.config.comm == 'openmpi'
147+
run: |
148+
if [[ "$CACHE_HIT" != 'true' ]]; then
149+
OPENMPI_URL="https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.5.tar.gz"
150+
mkdir ${{runner.temp}}/openmpi
151+
cd ${{runner.temp}}/openmpi
152+
curl -L $OPENMPI_URL | tar --strip-components=1 -xz
153+
./configure --prefix=${{env.STACK_ROOT}}
154+
make -j ${{matrix.config.cors}} install
155+
fi
156+
ompi_info
157+
echo "CC=mpicc" >> $GITHUB_ENV
158+
echo "CXX=mpicxx" >> $GITHUB_ENV
159+
echo "F77=mpifort" >> $GITHUB_ENV
160+
echo "F90=mpifort" >> $GITHUB_ENV
161+
echo "FC=mpifort" >> $GITHUB_ENV
162+
- name: Install HDF5 (CACHED)
163+
env:
164+
CACHE_HIT: ${{steps.cache-libraries.outputs.cache-hit}}
165+
if: matrix.config.ncdf == 'nc-config'
166+
run: |
167+
if [[ "$CACHE_HIT" != 'true' ]]; then
168+
HDF5_URL="https://github.com/HDFGroup/hdf5/archive/refs/tags/hdf5_1.14.4.3.tar.gz"
169+
mkdir ${{runner.temp}}/hdf5
170+
cd ${{runner.temp}}/hdf5
171+
curl -L $HDF5_URL | tar --strip-components=1 -xz
172+
./configure --enable-fortran --prefix=${{env.STACK_ROOT}}
173+
make -j ${{matrix.config.cors}} install
174+
fi
175+
- name: Install NetCDF-C and NetCDF-Fortran (CACHED)
176+
env:
177+
CACHE_HIT: ${{steps.cache-libraries.outputs.cache-hit}}
178+
if: matrix.config.ncdf == 'nc-config'
179+
run: |
180+
if [[ "$CACHE_HIT" != 'true' ]]; then
181+
NETCDF_URL="https://github.com/Unidata/netcdf-c/archive/v4.9.0.tar.gz"
182+
NETCDFF_URL="https://github.com/Unidata/netcdf-fortran/archive/v4.5.4.tar.gz"
183+
mkdir ${{runner.temp}}/netcdf-c
184+
cd ${{runner.temp}}/netcdf-c
185+
curl -L $NETCDF_URL | tar --strip-components=1 -xz
186+
./configure --enable-netcdf-4 --disable-dap --prefix=${{env.STACK_ROOT}}
187+
make -j ${{matrix.config.cors}} install
188+
mkdir ${{runner.temp}}/netcdf-fortran
189+
cd ${{runner.temp}}/netcdf-fortran
190+
curl -L $NETCDFF_URL | tar --strip-components=1 -xz
191+
./configure --prefix=${{env.STACK_ROOT}}
192+
make -j ${{matrix.config.cors}} install
193+
fi
194+
- name: Checkout ESMF
195+
uses: actions/checkout@v4
196+
- name: ESMF Configuration
197+
run: |
198+
echo "ESMF_DIR=${GITHUB_WORKSPACE}" >> $GITHUB_ENV
199+
echo "ESMF_COMPILER=${{matrix.config.cmpr}}" >> $GITHUB_ENV
200+
echo "ESMF_COMM=${{matrix.config.comm}}" >> $GITHUB_ENV
201+
echo "ESMF_BOPT=${{matrix.config.bopt}}" >> $GITHUB_ENV
202+
echo "ESMF_NETCDF=${{matrix.config.ncdf}}" >> $GITHUB_ENV
203+
echo "ESMF_MPILAUNCHOPTIONS=${{matrix.config.ropt}}" >> $GITHUB_ENV
204+
echo "ESMF_TESTEXHAUSTIVE=${{matrix.config.exhs}}" >> $GITHUB_ENV
205+
echo "ESMF_TRACE_LIB_BUILD=${{matrix.config.tlib}}" >> $GITHUB_ENV
206+
- name: ESMF Info
207+
run: |
208+
make info | tee ${ARTIFACTS}/info.log
209+
- name: ESMF Build
210+
run: |
211+
make -j ${{matrix.config.cors}} > ${ARTIFACTS}/build.log 2>&1
212+
- name: ESMF All Tests
213+
timeout-minutes: 60
214+
run: |
215+
make all_tests > ${ARTIFACTS}/all_tests.log 2>&1
216+
{ grep "SYSTEM TESTS SUMMARY" -A1 ${ARTIFACTS}/all_tests.log > ${ARTIFACTS}/summary.log || true; }
217+
{ grep "EXAMPLES SUMMARY" -A1 ${ARTIFACTS}/all_tests.log >> ${ARTIFACTS}/summary.log || true; }
218+
{ grep "UNIT TESTS SUMMARY" -A1 ${ARTIFACTS}/all_tests.log >> ${ARTIFACTS}/summary.log || true; }
219+
echo >> ${ARTIFACTS}/summary.log
220+
{ grep "PASS:" ${ARTIFACTS}/all_tests.log >> ${ARTIFACTS}/summary.log || true; }
221+
echo >> ${ARTIFACTS}/summary.log
222+
{ grep "FAIL:" ${ARTIFACTS}/all_tests.log >> ${ARTIFACTS}/summary.log || true; }
223+
echo >> ${ARTIFACTS}/summary.log
224+
{ grep "CRASHED:" ${ARTIFACTS}/all_tests.log >> ${ARTIFACTS}/summary.log || true; }
225+
echo >> ${ARTIFACTS}/summary.log
226+
cat ${ARTIFACTS}/summary.log
227+
{ grep "FAIL:\|CRASHED:" ${ARTIFACTS}/summary.log > ${ARTIFACTS}/failures.log || true; }
228+
if [ -f ${ARTIFACTS}/failures.log ]; then
229+
error=$(wc -l < ${ARTIFACTS}/failures.log)
230+
else
231+
error=0
232+
fi
233+
if [ ${error} -gt 0 ]; then
234+
mkdir -p ${ARTIFACTS}/output
235+
find test -type f -name "*.Log" \
236+
-exec cp '{}' ${ARTIFACTS}/output/. ';'
237+
find test -type f -name "*.stdout" \
238+
-exec cp '{}' ${ARTIFACTS}/output/. ';'
239+
echo "Test Failures:" >> $GITHUB_STEP_SUMMARY
240+
echo "" >> $GITHUB_STEP_SUMMARY
241+
cat ${ARTIFACTS}/failures.log >> $GITHUB_STEP_SUMMARY
242+
echo '::error::${{matrix.config.desc}} failed, check artifacts.'
243+
exit 1
244+
fi
245+
- name: Archive Results
246+
if: ${{ failure() }}
247+
uses: actions/upload-artifact@v4
248+
with:
249+
name: logs-${{matrix.config.desc}}
250+
path: ${{env.ARTIFACTS}}

src/Infrastructure/Field/tests/ESMF_FieldIOUTest.F90

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1681,6 +1681,7 @@ program ESMF_FieldIOUTest
16811681
! Tests with both (a) multiple DEs per PET and (b) ungridded dimensions
16821682
! (Note that these are exhaustive-only unit tests.)
16831683
!------------------------------------------------------------------------
1684+
#ifdef ESMF_TESTEXHAUSTIVE
16841685

16851686
!------------------------------------------------------------------------
16861687
!EX_UTest_Multi_Proc_Only
@@ -1813,6 +1814,7 @@ program ESMF_FieldIOUTest
18131814
write(name, *) "Comparison of read-in Field from 2DE grid with 1 ungridded dim vs original, DE 1"
18141815
call ESMF_Test(allEqual, name, failMsg, result, ESMF_SRCLINE)
18151816
!------------------------------------------------------------------------
1817+
#endif
18161818

18171819
!------------------------------------------------------------------------
18181820
! Destroy all Fields and cleanup
@@ -1863,10 +1865,12 @@ program ESMF_FieldIOUTest
18631865
if (rc /= ESMF_SUCCESS) countfail = countfail + 1
18641866
call ESMF_FieldDestroy(field_ug2, rc=rc)
18651867
if (rc /= ESMF_SUCCESS) countfail = countfail + 1
1868+
#ifdef ESMF_TESTEXHAUSTIVE
18661869
call ESMF_FieldDestroy(field_ug_w2DE, rc=rc)
18671870
if (rc /= ESMF_SUCCESS) countfail = countfail + 1
18681871
call ESMF_FieldDestroy(field_ug_r2DE, rc=rc)
18691872
if (rc /= ESMF_SUCCESS) countfail = countfail + 1
1873+
#endif
18701874
call ESMF_FieldDestroy(elem_field, rc=rc)
18711875
if (rc /= ESMF_SUCCESS) countfail = countfail + 1
18721876
call ESMF_FieldDestroy(field_debl, rc=rc)

0 commit comments

Comments
 (0)