1 |
|
Example: Labrador Sea Region with Sea-Ice |
2 |
|
========================================= |
3 |
|
|
4 |
|
This example sets up a small (20x16x23) Labrador Sea experiment |
5 |
|
coupled to a dynamic thermodynamic sea-ice model. |
6 |
|
A brief description of the sea-ice model is in "seaice.ps". |
7 |
|
|
8 |
|
The domain of integration spans 280E to 320E and 46N to 78N. |
9 |
|
Horizontal grid spacing is 2 degrees. |
10 |
|
The 23 vertical levels and the bathymetry file |
11 |
|
bathyFile = 'bathy.labsea' |
12 |
|
are obtained from the the 2-degree ECCO configuration. |
13 |
|
|
14 |
|
Integration is initialized from annual-mean Levitus climatology |
15 |
|
hydrogThetaFile = 'LevCli_temp.labsea' |
16 |
|
hydrogSaltFile = 'LevCli_salt.labsea' |
17 |
|
|
18 |
|
Surface salinity relaxation is to the monthly mean Levitus climatology |
19 |
|
saltClimFile = 'SSS.labsea' |
20 |
|
|
21 |
|
Forcing files are a 1979-1999 monthly climatology computed from the |
22 |
|
NCEP reanalysis (see pkg/seaice/SEAICE_FFIELDS.h for units and signs) |
23 |
|
uwindFile = 'u10m.labsea79' # 10-m zonal wind |
24 |
|
vwindFile = 'v10m.labsea79' # 10-m meridional wind |
25 |
|
atempFile = 'tair.labsea1979' # 2-m air temperature |
26 |
|
aqhFile = 'qa.labsea1979' # 2-m specific humidity |
27 |
|
lwdownFile = 'flo.labsea1979' # downward longwave radiation |
28 |
|
swdownFile = 'fsh.labsea1979' # downward shortwave radiation |
29 |
|
precipFile = 'prate.labsea1979' # precipitation |
30 |
|
evapFile = 'evap.labsea1979' # evaporation |
31 |
|
|
32 |
|
|
33 |
|
Using testscript to test sea-ice code |
34 |
|
===================================== |
35 |
|
|
36 |
|
Running the testscript experiment: |
37 |
|
cd verification |
38 |
|
./testscript -force lab_sea |
39 |
|
The default experiment is Experiment 8, below. |
40 |
|
It uses pkg/gmredi, pkg/kpp, pkg/seaice, and pkg/exf. |
41 |
|
|
42 |
|
Note that fairly large differences in accuracy occur across different |
43 |
|
platforms. For example, testscript comparisons between g77 (Linux) |
44 |
|
and f77 (SGI) generated output gives: |
45 |
|
|
46 |
|
T S U V |
47 |
|
C D M c m s m s m s m s |
48 |
|
n p a R g m m e . m m e . m m e . m m e . |
49 |
|
f n k u 2 i a a d i a a d i a a d i a a d |
50 |
|
g d e n d n x n . n x n . n x n . n x n . |
51 |
|
|
52 |
|
Y Y Y Y 8 10 9 11 10 9 11 13 10 9 8 8 9 8 9 8 9 FAIL lab_sea |
53 |
|
|
54 |
|
|
55 |
|
Instructions for generating 1-CPU and 2-CPU executables |
56 |
|
======================================================= |
57 |
|
|
58 |
|
Generating 1-CPU executable: |
59 |
|
cd verification/lab_sea/input |
60 |
|
ln -sf ../code/SIZE.h . |
61 |
|
ln -sf ../code/CPP_EEOPTIONS.h . |
62 |
|
ln -sf ../code/CPP_OPTIONS.NOEXF.h CPP_OPTIONS.h |
63 |
|
rm -f SEAICE_OPTIONS.h |
64 |
|
../../../tools/genmake -makefile |
65 |
|
==> on alhena use: |
66 |
|
../../../tools/genmake -platform=o2k_noopt -makefile |
67 |
|
make clean |
68 |
|
make depend |
69 |
|
make |
70 |
|
mv mitgcmuv mitgcmuv_1 |
71 |
|
|
72 |
|
Generating 1-CPU executable with SEAICE_EXTERNAL_FORCING: |
73 |
|
cd ../../../verification/lab_sea/input |
74 |
|
ln -sf ../code/SIZE.h . |
75 |
|
ln -sf ../code/CPP_EEOPTIONS.h . |
76 |
|
ln -sf ../code/CPP_OPTIONS.h . |
77 |
|
ln -sf ../code/ECCO_CPPOPTIONS.h . |
78 |
|
ln -sf ../code/SEAICE_OPTIONS.h . |
79 |
|
../../../tools/genmake -makefile |
80 |
|
==> on alhena use: |
81 |
|
../../../tools/genmake -platform=o2k_noopt -makefile |
82 |
|
make clean |
83 |
|
make depend |
84 |
|
make |
85 |
|
mv mitgcmuv mitgcmuv_exf_forcing |
86 |
|
|
87 |
|
Generating 1-CPU executable with SEAICE_EXTERNAL_FLUXES: |
88 |
|
cd ../../../verification/lab_sea/input |
89 |
|
ln -sf ../code/SIZE.h . |
90 |
|
ln -sf ../code/CPP_EEOPTIONS.h . |
91 |
|
ln -sf ../code/CPP_OPTIONS.h . |
92 |
|
ln -sf ../code/ECCO_CPPOPTIONS.BULK.h ECCO_CPPOPTIONS.h |
93 |
|
ln -sf ../code/SEAICE_OPTIONS.EXF_FLUXES.h SEAICE_OPTIONS.h |
94 |
|
../../../tools/genmake -makefile |
95 |
|
==> on alhena use: |
96 |
|
../../../tools/genmake -platform=o2k_noopt -makefile |
97 |
|
make clean |
98 |
|
make depend |
99 |
|
make |
100 |
|
mv mitgcmuv mitgcmuv_exf_fluxes |
101 |
|
|
102 |
|
Generating 2-CPU executable: |
103 |
|
cd ../../../verification/lab_sea/input |
104 |
|
ln -sf ../code/SIZE.2x1.h SIZE.h |
105 |
|
ln -sf ../code/CPP_EEOPTIONS.MPI.h CPP_EEOPTIONS.h |
106 |
|
ln -sf ../code/CPP_OPTIONS.NOEXF.h CPP_OPTIONS.h |
107 |
|
rm -f SEAICE_OPTIONS.h |
108 |
|
../../../tools/genmake -mpi -makefile |
109 |
|
==> on alhena for comparison purposes use: |
110 |
|
../../../tools/genmake -mpi -platform=o2k_noopt -makefile |
111 |
|
==> on alhena for fast execution use: |
112 |
|
../../../tools/genmake -mpi -platform=o2k -makefile |
113 |
|
make clean |
114 |
|
make depend |
115 |
|
make |
116 |
|
mv mitgcmuv mitgcmuv_2x1 |
117 |
|
|
118 |
|
|
119 |
|
Instructions for running Experiment 1 |
120 |
|
===================================== |
121 |
|
|
122 |
|
This is a 1-cpu, 10-hour integration used to make sure that all |
123 |
|
the files are available and that the sea-ice model compiles and |
124 |
|
runs. The reading of atmospheric forcing files and the computation |
125 |
|
of open-water bulk fluxes are carried out within pkg/seaice. |
126 |
|
|
127 |
|
To run Experiment 1: |
128 |
|
cd ../../../verification/lab_sea/input |
129 |
|
ln -sf DATA.10hours data |
130 |
|
ln -sf DATA.SEAICE.adi data.seaice |
131 |
|
mitgcmuv_1 >&! output.txt |
132 |
|
mkdir exp1 |
133 |
|
mv *tave.0000000010.data exp1 |
134 |
|
|
135 |
|
Use matlab script lookat_exp1.m to compare the output |
136 |
|
of exp1 with that from release1_p10 sea-ice code: |
137 |
|
cd ../../../verification/lab_sea/matlab |
138 |
|
matlab |
139 |
|
lookat_exp1 |
140 |
|
|
141 |
|
|
142 |
|
Instructions for running Experiment 2 |
143 |
|
===================================== |
144 |
|
|
145 |
|
This is a 1-cpu test of the LSR solver. The solution is |
146 |
|
compared to that of experiment 1, which used the ADI solver. |
147 |
|
|
148 |
|
To run Experiment 2: |
149 |
|
cd ../../../verification/lab_sea/input |
150 |
|
ln -sf DATA.10hours data |
151 |
|
ln -sf DATA.SEAICE.lsr data.seaice |
152 |
|
mitgcmuv_1 >&! output.txt |
153 |
|
mkdir exp2 |
154 |
|
mv *tave.0000000010.data exp2 |
155 |
|
|
156 |
|
Use matlab script lookat_exp2.m to compare |
157 |
|
the output of exp2 to that of exp1: |
158 |
|
cd ../../../verification/lab_sea/matlab |
159 |
|
matlab |
160 |
|
lookat_exp2 |
161 |
|
|
162 |
|
|
163 |
|
Instructions for running Experiment 3 |
164 |
|
===================================== |
165 |
|
|
166 |
|
This is a test of periodic boundary conditions for LSR |
167 |
|
and ADI solvers. The domain has a flat bottom and |
168 |
|
is periodic both in the x and the y directions. |
169 |
|
All forcing files are null or constant (u10m = v10m = 5 m/s). |
170 |
|
|
171 |
|
To run Experiment 3: |
172 |
|
cd ../../../verification/lab_sea/input |
173 |
|
ln -sf DATA.1hour data |
174 |
|
ln -sf DATA.SEAICE.testadi data.seaice |
175 |
|
mitgcmuv_1 >&! output.txt |
176 |
|
mkdir exp3a |
177 |
|
mv *tave.0000000001.data exp3a |
178 |
|
ln -sf DATA.SEAICE.testlsr data.seaice |
179 |
|
mitgcmuv_1 >&! output.txt |
180 |
|
mkdir exp3b |
181 |
|
mv *tave.0000000001.data exp3b |
182 |
|
|
183 |
|
Use matlab script lookat_exp3.m to compare |
184 |
|
the output of exp2 to that of exp1: |
185 |
|
cd ../../../verification/lab_sea/matlab |
186 |
|
matlab |
187 |
|
lookat_exp3 |
188 |
|
|
189 |
|
If the dynamic ice solvers are correct, they should converge to a |
190 |
|
constant solution. The tests above show that both the ADI and the LSR |
191 |
|
solver are unable to handle periodic domains and therefore that they |
192 |
|
cannot be "correctly" parallelized. |
193 |
|
|
194 |
|
|
195 |
|
Instructions for running Experiment 4 |
196 |
|
===================================== |
197 |
|
|
198 |
|
This is a 2-cpu, 10-hour integration used to test |
199 |
|
tile edges for sea-ice dynamic solvers. |
200 |
|
|
201 |
|
To run Experiment 4: |
202 |
|
cd ../../../verification/lab_sea/input |
203 |
|
ln -sf DATA.10hours data |
204 |
|
ln -sf DATA.SEAICE.adi data.seaice |
205 |
|
mpirun -np 2 mitgcmuv_2x1 |
206 |
|
mkdir exp4 |
207 |
|
mv *tave.0000000010.data exp4 |
208 |
|
|
209 |
|
Use the matlab script lookat_exp4.m to compare |
210 |
|
the 2-cpu output to that of exp1: |
211 |
|
cd ../../../verification/lab_sea/matlab |
212 |
|
matlab |
213 |
|
lookat_exp4 |
214 |
|
|
215 |
|
The inaccuracy at the tile boundary can be decreased by increasing |
216 |
|
NPSEUDO in data.seaice at the expense of computation time. |
217 |
|
Also as sea-ice ages (thickens) the difference at the tiles becomes |
218 |
|
increasingly small. For solver pkg/seaice/adi.F a value of NPSEUDO=10 |
219 |
|
appears adequate for forward integrations but cannot be used for sea-ice |
220 |
|
adjoint model. Work is underway to fix this problem. |
221 |
|
|
222 |
|
|
223 |
|
Instructions for running Experiment 5 |
224 |
|
===================================== |
225 |
|
|
226 |
|
This is a 2-cpu, 2-year, test integration. It illustrates |
227 |
|
convention used by seaice_get_forcing.F for multi-year forcing. |
228 |
|
|
229 |
|
To run Experiment 5: |
230 |
|
cd ../../../verification/lab_sea/input |
231 |
|
ln -sf DATA.2years data |
232 |
|
ln -sf DATA.SEAICE.adi data.seaice |
233 |
|
ln -sf evap.labsea1979 evap.labsea1980 |
234 |
|
ln -sf flo.labsea1979 flo.labsea1980 |
235 |
|
ln -sf fsh.labsea1979 fsh.labsea1980 |
236 |
|
ln -sf prate.labsea1979 prate.labsea1980 |
237 |
|
ln -sf qa.labsea1979 qa.labsea1980 |
238 |
|
ln -sf tair.labsea1979 tair.labsea1980 |
239 |
|
ln -sf u10m.labsea79 u10m.labsea80 |
240 |
|
ln -sf v10m.labsea79 v10m.labsea80 |
241 |
|
mpirun -np 2 mitgcmuv_2x1 |
242 |
|
|
243 |
|
Use the matlab script lookat_exp5.m to compare |
244 |
|
the 2-cpu output to SMMR-SSM/I data: |
245 |
|
cd ../../../verification/lab_sea/matlab |
246 |
|
matlab |
247 |
|
lookat_exp5 |
248 |
|
|
249 |
|
Disclaimer: |
250 |
|
The comparison here is just for fun, not really supposed |
251 |
|
to look anything like the data. |
252 |
|
Otherwise it would put a lot of people out of business :-) |
253 |
|
|
254 |
|
Instructions for running Experiment 6 |
255 |
|
===================================== |
256 |
|
|
257 |
|
This is a 1-cpu test of sea-ice thermodynamics (no dynamics). |
258 |
|
The solution is compared to that of experiment 1. |
259 |
|
|
260 |
|
To run Experiment 6: |
261 |
|
cd ../../../verification/lab_sea/input |
262 |
|
ln -sf DATA.10hours data |
263 |
|
ln -sf DATA.SEAICE.nodynamics data.seaice |
264 |
|
mitgcmuv_1 >&! output.txt |
265 |
|
mkdir exp6 |
266 |
|
mv *tave.0000000010.data exp6 |
267 |
|
|
268 |
|
Use the matlab script lookat_exp6.m to compare |
269 |
|
the output of exp6 to that of exp1: |
270 |
|
cd ../verification/lab_sea/matlab |
271 |
|
matlab |
272 |
|
lookat_exp6 |
273 |
|
|
274 |
|
Instructions for running Experiment 7 |
275 |
|
===================================== |
276 |
|
|
277 |
|
This is a 2-cpu, 10-hour integration used to test |
278 |
|
tile edges for sea-ice thermodynamics (no dynamics). |
279 |
|
2-CPU executable from experiment 4 is required. |
280 |
|
|
281 |
|
To run Experiment 7: |
282 |
|
cd ../../../verification/lab_sea/input |
283 |
|
ln -sf DATA.10hours data |
284 |
|
ln -sf DATA.SEAICE.nodynamics data.seaice |
285 |
|
mpirun -np 2 mitgcmuv_2x1 |
286 |
|
mkdir exp7 |
287 |
|
mv *tave.0000000010.data exp7 |
288 |
|
|
289 |
|
Use the matlab script lookat_exp7.m to compare |
290 |
|
the output of exp7 to that of exp6: |
291 |
|
cd ../verification/lab_sea/matlab |
292 |
|
matlab |
293 |
|
lookat_exp7 |
294 |
|
|
295 |
|
|
296 |
|
Instructions for running Experiment 8 |
297 |
|
===================================== |
298 |
|
|
299 |
|
This is the default experiment which is executed by |
300 |
|
verification/testscript. It is a 1-cpu, 10-hour integration |
301 |
|
used to test CPP option SEAICE_EXTERNAL_FORCING. Atmospheric |
302 |
|
state is read-in using pkg/exf, rather than pkg/seaice routines. |
303 |
|
This experiment uses pkg/gmredi, pkg/kpp, pkg/seaice, and pkg/exf. |
304 |
|
|
305 |
|
To run Experiment 8: |
306 |
|
cd ../../../verification/lab_sea/input |
307 |
|
ln -sf DATA.10hours_exf data |
308 |
|
ln -sf DATA.SEAICE.adi_exf data.seaice |
309 |
|
mitgcmuv_exf_forcing >&! output.txt |
310 |
|
mkdir exp8 |
311 |
|
mv *tave.0000000010.data exp8 |
312 |
|
|
313 |
|
Use matlab script lookat_exp8.m to compare |
314 |
|
the output of exp8 to that of exp1: |
315 |
|
cd ../../../verification/lab_sea/matlab |
316 |
|
matlab |
317 |
|
lookat_exp8 |
318 |
|
|
319 |
|
|
320 |
|
Instructions for running Experiment 9 |
321 |
|
===================================== |
322 |
|
|
323 |
|
This is a 1-cpu, 10-hour integration used to test CPP option |
324 |
|
SEAICE_EXTERNAL_FLUXES. Both the atmospheric state and the |
325 |
|
open-water surface fluxes are provided by pkg/exf. |
326 |
|
|
327 |
|
To run Experiment 9: |
328 |
|
cd ../../../verification/lab_sea/input |
329 |
|
ln -sf DATA.10hours_exf data |
330 |
|
ln -sf DATA.SEAICE.adi_exf data.seaice |
331 |
|
mitgcmuv_exf_fluxes >&! output.txt |
332 |
|
mkdir exp9 |
333 |
|
mv *tave.0000000010.data exp9 |
334 |
|
|
335 |
|
Use matlab script lookat_exp9.m to compare |
336 |
|
the output of exp9 to that of exp8: |
337 |
|
cd ../../../verification/lab_sea/matlab |
338 |
|
matlab |
339 |
|
lookat_exp9 |