-
Notifications
You must be signed in to change notification settings - Fork 12
/
README
285 lines (212 loc) · 16 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
#########################################################################
##
## WRF TESTING FRAMEWORK
##
## INSTRUCTIONS FOR USE
##
## Author: Brian Bonnlander, NCAR
##
#########################################################################
The WRF Testing Framework is designed to build, test, and analyze test results for
one or more versions of the WRF model. It supports the testing of various "flavors"
of WRF, including the ARW model, NMM model, WRF-Chem, and WRFDA.
The WRF Testing Framework has been designed so that only a single "master control file",
from now on referred to as a "WRF Test File", needs to be modified by the user (though
most users can use the provided files without modifications). These file specify which
"flavors" of WRF should be built, which compiler options to use, whether to build WRF
with optimizations turned on, etc.
The file structure of the WRF Test Framework is as follows:
README -- This file
regTest_gnu_Darwin.wtf -- WTF config file for Apple desktop gfortran compiler regtests
regTest_gnu_Cheyenne.wtf -- WTF config file for Cheyenne gfortran compiler regtests
regTest_intel_Cheyenne.wtf -- WTF config file for Cheyenne Intel ifort regtests
regTest_pgi_Cheyenne.wtf -- WTF config file for Cheyenne PGI compiler regtests
scripts/ -- Control programs
tarballs/ -- User must place WRF source tar files here (initially empty)
Builds/ -- All WRF builds are performed here (initially empty)
Data/ -- Metgrid and other input files for tests (user can add files
for new tests)
Namelists/ -- Namelists for tests (user can add namelists for new tests)
Runs/ -- All WRF tests are performed here
clean -- Script for cleaning out old tests. run `./clean` or view
the script's comments for usage instructions
run_from_github.py -- Script for running the test directly from code on Github.
See below for instructions.
qsub_this_to_run_all_compilers.pbs.csh
-- Script for running tests for all compilers on Cheyenne. See
below for instructions.
=================================================================================================
TO RUN DIRECTLY FROM GITHUB ON CHEYENNE
=================================================================================================
1) View the script `scripts/run_all_for_qsub.csh` and make modifications if necessary. The most
common modification that may need to be made is to change the compiler versions. Note that
this script sets up each compiler as necessary, then submits each individual test as
described below.
2) In the top-level directory, run the script:
`./run_from_github.py`
This will prompt you to enter the URL of the repository you want to test (for example,
https://github.com/wrf-model/WRF), and the name of the branch you want to test (for example,
master). It will download the code, pack it into a tar file, and submit a test job using the
`qsub_this_to_run_all_compiler.csh` script described below.
3) When the test has completed, results will be summarized in the directory Runs/RESULTS.
=================================================================================================
TO RUN ON A LOCAL TAR FILE ON CHEYENNE
=================================================================================================
1) Place one or more WRF source tar files in the "tarballs" directory. Each file must end in
"*.tar" (case sensitive), and the tarfile names should not contain spaces. Each WRF tarfile
must create the directory "WRFV3" when unpacked. Otherwise, the script will fail. NOTE: IT
IS NOT RECOMMENDED TO RUN FOR MORE THAN ONE TAR FILE AT A TIME, unless you are running
overnight, as the process can take a long time and use a significant fraction of Cheyenne's
resources.
2) View the script `scripts/run_all_for_qsub.csh` and make modifications if necessary. Note
that this script sets up each compiler as necessary, then submits each individual test as
described belowcompiler This file must end in "*.wtf" (case sensitive).
Lengthy explanations are given in the existing WRF Test Files for each configuration.
The most important parameters to check are near the top of the file.
3) In the top-level directory, issue the command:
"qsub < qsub_this_to_run_all_compilers.pbs.csh"
This will run separate tests simultaneously for GNU, Intel, and PGI compilers, as well as
separate tests for WRFDA 4DVAR (since the configuration option numbers are different).
4) When the test has completed, results will be summarized in the directory Runs/RESULTS.
=================================================================================================
TO RUN MANUALLY FOR A SINGLE COMPILER
=================================================================================================
1) Place one or more WRF source tar files in the "tarballs" directory. Each file
must end in "*.tar" (case sensitive), and the tarfile names should not contain spaces.
IMPORTANT: each WRF tarfile must create the directory "WRFV3" when unpacked. Otherwise,
the script will fail.
2) Create or modify a WRF Test File. This file must end in "*.wtf" (case sensitive).
Lengthy explanations are given in the existing WRF Test Files for each configuration.
The most important parameters to check are near the top of the file.
3) Make sure that you have selected the proper compiler environment within your shell!
On Yellowstone, this means running "module list" and possibly "module swap intel pgi"
to use the PGI compiler instead of the default Intel compiler.
4) In the top-level directory, issue the command:
"scripts/run_WRF_Tests.ksh -R <WRF_Test_File>.wtf >& run.log &"
You can issue the command "tail -f run.log" to check the progress of the script. There
will be some long pauses in the log file output at two different times: while the WRF code
is unpacked and compiled (look in the build directories for compilation logs), and after all
WRF runs have completed when all the WRF output files are checked for invalid values (NaNs).
5) When the test has completed, results will be summarized in the directory Runs/RESULTS.
------------------------------------------------------------------------------------------------------
WHAT'S HAPPENING BEHIND THE SCENES
------------------------------------------------------------------------------------------------------
The WRF Test Framework (WTF) performs three major steps, in consecutive order, for each WRF
source tar file placed in "tarballs":
1) Unpacks and compiles all desired WRF flavors. On a computer with a batch queue, these
happen simultaneously. On a personal computer, each WRF build is performed consecutively.
2) Runs tests for all successfully built WRF executables. Again, if a batch queue is
available for testing, these tests are queued simultaneously; otherwise, tests are run
consecutively.
3) Evaluates which tests passed or failed and creates a time-stamped summary file in
"Runs/RESULTS".
WTF is designed for incremental development and testing, which means these steps can be repeated as
many times as the user wishes in the case that some builds or tests fail. If a compilation or test
fails, re-running WTF will attempt to recompile failed builds and re-run failed tests. Any successful
outcomes, whether in compiling WRF or in passing tests, are not retried on successive WTF invocations.
If a user wishes to repeat a successful build, it is sufficient to either delete the created source
directory or run "./clean -a" to remove the compilation output. If a user wishes to repeat a
successful test, it is sufficient to delete the "wrfout*" output file.
If one or more WRF builds fails, the source can be modified by hand and the WTF command run again in order
to retry a compilation. If one or more tests fail, re-running WTF will cause these tests to be
tried again. Each time the scripts are run, a PASS/FAIL summary file is created in Runs/RESULTS
with the current state of the compilation and test outcomes.
If a test fails because of a bug in a successfully built WRF program, the user can go into the
appropriate source directory, modify the code, and either recompile by hand or rerun the scripts to
generate a new wrf.exe file. For WTF to recompile the source, the old wrf.exe executable must be removed.
The scripts simply invoke the "configure" and "compile" commands to generate a wrf.exe file.
If "real.exe" and "wrf.exe" are both created, the compilation is deemed successful, and any
non-successful tests for this executable are later performed.
WTF performs checks on WRF output to see if forecasts look valid, and to see if the same output is
produced for serial and parallel versions of WRF. The serial vs. parallel output check (also
called a bit-for-bit check) is only performed if both the serial and parallel forecasts look valid.
Otherwise, the check is skipped. The summary file WILL contain information about the forecast
results being invalid.
------------------------------------------------------------------------------------------------------
WHERE TO FIND THE SOURCE FOR A WRF BUILD
------------------------------------------------------------------------------------------------------
WTF is designed to build many versions of WRF at once, so each WRF build takes place in its
own designated directory location. Each WRF source tarfile is unpacked in a directory with the name :
"Builds/<WRF_TARFILE_NAME>.<CONFIGURE_OPTION>/<WRF_FLAVOR>/WRFV3".
For example, suppose you place the WRF tarfile "wrf_Goober.tar" in the directory "tarballs", and
you intend to build WRF-ARW serially using the Intel compiler on Yellowstone. It turns out that
configure expects you to enter the number "17" (as of January 10, 2013) to build this version of WRF.
Then the WRF source will be unpacked in the directory "Builds/wrf_Goober.17/em_real/WRFV3".
As another example, suppose you place another WRF tarfile "wrf_trunk_122112_05_dg.tar" in the
directory "tarballs", and you intend to build WRF-CHEM with MPI using the PGI compiler on
Yellowstone. It turns out that configure expects you to enter the number "3" (as of January 10, 2013)
to build this version of WRF. Then the WRF source will be unpacked in the directory
"Builds/wrf_trunk_122112_05_dg.3/em_chem/WRFV3".
------------------------------------------------------------------------------------------------------
WHERE TO FIND THE TESTS FOR A WRF BUILD
------------------------------------------------------------------------------------------------------
WTF is designed to run many tests for each WRF executable. Each test is embodied in a single namelist
file of the form "namelist.input.<TAG>". The particular tests that are run depend on which
"namelist directory" the user chooses in the WTF configure file. Suppose the choice in the WTF
configuration file is:
export NAMELIST_DIR=$WRF_TEST_ROOT/Namelists/weekly
Then all ARW tests are located in $WRF_TEST_ROOT/Namelists/weekly/em_real. Tests that should
only be run serially are in the subdirectory $WRF_TEST_ROOT/Namelists/weekly/em_real/SERIAL.
The same convention exists for tests that should only be run under OpenMP or MPI.
The directories where tests are all performed,
perhaps to check output logs or re-run tests by
hand,
------------------------------------------------------------------------------------------------------
HOW TO INTERPRET JOB CODES FOR BATCH COMPILES AND TESTS
------------------------------------------------------------------------------------------------------
Eager users may want to monitor the progress of their batch jobs submitted for compiling WRF
or running tests. Each batch job is given a unique job string, which helps determine what
builds or tests remain unfinished. On Yellowstone, use the command "bjobs -w" to see all pending
and running jobs and their associated job code strings.
Build job strings have the form "bld.<WRF_TYPE_ABBREVATION>.<CONFIG#>", where <WRF_TYPE_ABBREVATION>
is a two-letter code, one for each flavor of WRF, and <CONFIG#> is the value given to the "configure"
script. Codes for different flavors or WRF are:
em_real) typeCode='er'
em_real8) typeCode='eR'
nmm_real) typeCode='nr'
nmm_nest) typeCode='nn'
nmm_hwrf) typeCode='nh'
em_chem) typeCode='ec'
em_chem_kpp) typeCode='ek'
em_b_wave) typeCode='eb'
em_quarter_ss) typeCode='eq'
em_quarter_ss8) typeCode='eQ'
em_hill2d_x) typeCode='eh'
em_move) typeCode='em'
wrfda_3dvar) typeCode='3d'
wrfplus) typeCode='wp'
wrfda_4dvar) typeCode='4d'
For example, the job string given for building the MPI version of "em_real" using the GNU compiler
on Cheyenne would be "bld.er.34", since "34" is the value passed to "configure" to select the GNU
compiler building the MPI version of WRF.
Test job strings have the form "t.<WRF_TYPE_ABBREVATION>.<PARALLEL_TYPE>.<NAMELIST_SUFFIX>". The
<WRF_TYPE_ABBREVIATION> codes are the same as for builds. The <PARALLEL_TYPE> is either "se" for
a serial test, "sm" for an OpenMP (shared memory) test, or "dm" for an MPI (distributed memory) test.
The <NAMELIST_SUFFIX> code is simply the string that appears at the end of the namelist file, which
always has the form "namelist.input.<SUFFIX>".
For example, the job string given for running an NMM MPI test on the file namelist.input.5A would
be "t.nr.dm.5A".
------------------------------------------------------------------------------------------------------
HOW TO ADD METEOROLOGICAL DATA FOR A NEW TEST DOMAIN
------------------------------------------------------------------------------------------------------
All meteorological data used for testing purposes is located in the directory "Data/<WRF_FLAVOR>".
For example, all WRF-CHEM data is in the directory "Data/em_chem". For each WRF-CHEM test, all
files found in this directory are linked into the test directory. As long as the new domain's
dates do not conflict with existing tests, adding new domain data is as simple as putting the files
in the Data/em_chem directory.
------------------------------------------------------------------------------------------------------
SOME IMPORTANT CAVEATS
------------------------------------------------------------------------------------------------------
WTF is "smart" when it comes to reusing compiled code for related WRF flavors: idealized
versions of ARW (em_b_wave and em_quarter_ss) are built in the same source directory as
regular WRF, and the nested version of NMM-WRF (nmm_nest) is built in the same directory as NMM.
However, this creates a conflict for the WRF preprocessor executable names: em_b_wave and
em_quarter_ss normally both create a preprocessor named "ideal.exe", and both versions of NMM
normally create a preprocessor named "real.exe". To prevent clobbering of preprocessor
executables, WTF renames each preprocessor executable to "prewrf_<WRF_FLAVOR>.exe". If you
try recompiling WRF source by hand, the scripts will expect this file to exist or will
perform this renaming for you.
Remember, WRF tarfiles must unpack the WRF source into a directory named "WRFV3".
WTF is not designed to build several revisions of WRF simultaneously where the options passed to
"configure" are different depending on the revision. If you run into this problem, please
lobby your local WRF developer committee to prevent changes to configure codes from being accepted.