20 |
|
|
21 |
Forcing files are a 1979-1999 monthly climatology computed from the |
Forcing files are a 1979-1999 monthly climatology computed from the |
22 |
NCEP reanalysis (see pkg/seaice/SEAICE_FFIELDS.h for units and signs) |
NCEP reanalysis (see pkg/seaice/SEAICE_FFIELDS.h for units and signs) |
23 |
uwindFile = 'u10m.labsea79' # 10-m zonal wind |
gairxFile = 'u10m.labsea79' # 10-m zonal wind |
24 |
vwindFile = 'v10m.labsea79' # 10-m meridional wind |
gairyFile = 'v10m.labsea79' # 10-m meridional wind |
25 |
atempFile = 'tair.labsea1979' # 2-m air temperature |
tairFile = 'tair.labsea1979' # 2-m air temperature |
26 |
aqhFile = 'qa.labsea1979' # 2-m specific humidity |
qaFile = 'qa.labsea1979' # 2-m specific humidity |
27 |
lwdownFile = 'flo.labsea1979' # downward longwave radiation |
floFile = 'flo.labsea1979' # longwave radiation |
28 |
swdownFile = 'fsh.labsea1979' # downward shortwave radiation |
fshFile = 'fsh.labsea1979' # shortwave radiation |
29 |
precipFile = 'prate.labsea1979' # precipitation |
rainFile = 'prate.labsea1979' # precipitation |
30 |
evapFile = 'evap.labsea1979' # evaporation |
evapFile = 'evap.labsea1979' # evaporation |
31 |
|
|
32 |
|
|
36 |
Running the testscript experiment: |
Running the testscript experiment: |
37 |
cd verification |
cd verification |
38 |
./testscript -force lab_sea |
./testscript -force lab_sea |
|
The default experiment is Experiment 8, below. |
|
|
It uses pkg/gmredi, pkg/kpp, pkg/seaice, and pkg/exf. |
|
39 |
|
|
40 |
Note that fairly large differences in accuracy occur across different |
Note that fairly large differences in accuracy occur across different |
41 |
platforms. For example, testscript comparisons between g77 (Linux) |
platforms. For example, testscript comparisons between g77 (Linux) |
42 |
and f77 (SGI) generated output gives: |
and f77 (SGI) generated output gives: |
43 |
|
|
44 |
T S U V |
T S U V |
45 |
C D M c m s m s m s m s |
C D M c m s m s m s m s |
46 |
n p a R g m m e . m m e . m m e . m m e . |
n p a R g m m e . m m e . m m e . m m e . |
47 |
f n k u 2 i a a d i a a d i a a d i a a d |
f n k u 2 i a a d i a a d i a a d i a a d |
48 |
g d e n d n x n . n x n . n x n . n x n . |
g d e n d n x n . n x n . n x n . n x n . |
49 |
|
|
50 |
Y Y Y Y 8 10 9 11 10 9 11 13 10 9 8 8 9 8 9 8 9 FAIL lab_sea |
Y Y Y Y 5 5 7 7 7 8 10 9 6 6 6 6 7 5 7 5 7 FAIL lab_sea |
51 |
|
|
52 |
|
|
53 |
Instructions for generating 1-CPU and 2-CPU executables |
Instructions for generating 1-CPU and 2-CPU executables |
54 |
======================================================= |
======================================================= |
55 |
|
|
56 |
Generating 1-CPU executable: |
Generating 1-CPU executable: |
57 |
cd verification/lab_sea/input |
cd ../verification/lab_sea/input |
58 |
ln -sf ../code/SIZE.h . |
ln -sf ../code/SIZE.h . |
|
ln -sf ../code/CPP_EEOPTIONS.h . |
|
|
ln -sf ../code/CPP_OPTIONS.NOEXF.h CPP_OPTIONS.h |
|
|
rm -f SEAICE_OPTIONS.h |
|
|
../../../tools/genmake -makefile |
|
|
==> on alhena use: |
|
|
../../../tools/genmake -platform=o2k_noopt -makefile |
|
|
make clean |
|
|
make depend |
|
|
make |
|
|
mv mitgcmuv mitgcmuv_1 |
|
|
|
|
|
Generating 1-CPU executable with SEAICE_EXTERNAL_FORCING: |
|
|
cd ../../../verification/lab_sea/input |
|
|
ln -sf ../code/SIZE.h . |
|
|
ln -sf ../code/CPP_EEOPTIONS.h . |
|
59 |
ln -sf ../code/CPP_OPTIONS.h . |
ln -sf ../code/CPP_OPTIONS.h . |
|
ln -sf ../code/ECCO_CPPOPTIONS.h . |
|
|
ln -sf ../code/SEAICE_OPTIONS.h . |
|
|
../../../tools/genmake -makefile |
|
|
==> on alhena use: |
|
|
../../../tools/genmake -platform=o2k_noopt -makefile |
|
|
make clean |
|
|
make depend |
|
|
make |
|
|
mv mitgcmuv mitgcmuv_exf_forcing |
|
|
|
|
|
1-CPU executable with SEAICE_EXTERNAL_FORCING, without READ_EVAP |
|
|
cd ../../../verification/lab_sea/input |
|
|
ln -sf ../code/SIZE.h . |
|
60 |
ln -sf ../code/CPP_EEOPTIONS.h . |
ln -sf ../code/CPP_EEOPTIONS.h . |
|
ln -sf ../code/CPP_OPTIONS.h . |
|
|
ln -sf ../code/ECCO_CPPOPTIONS.BULK.h ECCO_CPPOPTIONS.h |
|
|
ln -sf ../code/SEAICE_OPTIONS.h . |
|
|
../../../tools/genmake -makefile |
|
|
==> on alhena use: |
|
|
../../../tools/genmake -platform=o2k_noopt -makefile |
|
|
make clean |
|
|
make depend |
|
|
make |
|
|
mv mitgcmuv mitgcmuv_compute_evap |
|
|
|
|
|
Generating 1-CPU executable with SEAICE_EXTERNAL_FLUXES: |
|
|
cd ../../../verification/lab_sea/input |
|
|
ln -sf ../code/SIZE.h . |
|
|
ln -sf ../code/CPP_EEOPTIONS.h . |
|
|
ln -sf ../code/CPP_OPTIONS.h . |
|
|
ln -sf ../code/ECCO_CPPOPTIONS.BULK.h ECCO_CPPOPTIONS.h |
|
|
ln -sf ../code/SEAICE_OPTIONS.EXF_FLUXES.h SEAICE_OPTIONS.h |
|
61 |
../../../tools/genmake -makefile |
../../../tools/genmake -makefile |
62 |
==> on alhena use: |
==> on alhena use: |
63 |
../../../tools/genmake -platform=o2k_noopt -makefile |
../../../tools/genmake -platform=o2k_noopt -makefile |
64 |
make clean |
make clean |
65 |
make depend |
make depend |
66 |
make |
make |
67 |
mv mitgcmuv mitgcmuv_exf_fluxes |
mv mitgcmuv mitgcmuv_1 |
68 |
|
|
|
Generating 1-CPU executable with SEAICE_MULTILEVEL: |
|
|
cd ../../../verification/lab_sea/input |
|
|
ln -sf ../code/SIZE.h . |
|
|
ln -sf ../code/CPP_EEOPTIONS.h . |
|
|
ln -sf ../code/CPP_OPTIONS.NOEXF.h CPP_OPTIONS.h |
|
|
ln -sf ../code/SEAICE_OPTIONS.MULTILEVEL.h SEAICE_OPTIONS.h |
|
|
../../../tools/genmake -makefile |
|
|
==> on alhena use: |
|
|
../../../tools/genmake -platform=o2k_noopt -makefile |
|
|
make clean |
|
|
make depend |
|
|
make |
|
|
mv mitgcmuv mitgcmuv_multilevel |
|
|
|
|
69 |
Generating 2-CPU executable: |
Generating 2-CPU executable: |
70 |
cd ../../../verification/lab_sea/input |
cd ../../../verification/lab_sea/input |
71 |
ln -sf ../code/SIZE.2x1.h SIZE.h |
ln -sf ../code/SIZE_2x1.h SIZE.h |
72 |
ln -sf ../code/CPP_EEOPTIONS.MPI.h CPP_EEOPTIONS.h |
ln -sf ../code/CPP_OPTIONS.h . |
73 |
ln -sf ../code/CPP_OPTIONS.NOEXF.h CPP_OPTIONS.h |
ln -sf ../code/CPP_EEOPTIONS_MPI.h CPP_EEOPTIONS.h |
|
rm -f SEAICE_OPTIONS.h |
|
74 |
../../../tools/genmake -mpi -makefile |
../../../tools/genmake -mpi -makefile |
75 |
==> on alhena for comparison purposes use: |
==> on alhena for comparison purposes use: |
76 |
../../../tools/genmake -mpi -platform=o2k_noopt -makefile |
../../../tools/genmake -mpi -platform=o2k_noopt -makefile |
85 |
Instructions for running Experiment 1 |
Instructions for running Experiment 1 |
86 |
===================================== |
===================================== |
87 |
|
|
88 |
This is a 1-cpu, 10-hour integration used to make sure that all |
This is a 1-cpu, 10-hour integration used to make sure that all the |
89 |
the files are available and that the sea-ice model compiles and |
files are available and that the model compiles and integrates. It |
90 |
runs. The reading of atmospheric forcing files and the computation |
is the default experiment of "verification/testscript lab_sea". |
|
of open-water bulk fluxes are carried out within pkg/seaice. |
|
91 |
|
|
92 |
To run Experiment 1: |
To run Experiment 1: |
93 |
cd ../../../verification/lab_sea/input |
cd ../../../verification/lab_sea/input |
94 |
ln -sf DATA.10hours data |
ln -sf data.10hours data |
95 |
ln -sf DATA.SEAICE.lsr data.seaice |
ln -sf data.seaice.adi data.seaice |
96 |
mitgcmuv_1 >&! output.txt |
mitgcmuv_1 >&! output.txt |
97 |
mkdir exp1 |
mkdir exp1 |
98 |
mv *tave.0000000010.data exp1 |
mv *tave.0000000010.data exp1 |
99 |
|
|
100 |
Use matlab script lookat_exp1.m to compare the output |
Use matlab script lookat_exp1.m to compare the output |
101 |
of exp1 with that from release1_p16 sea-ice code: |
of exp1 with that from release1_patch5 sea-ice code: |
102 |
cd ../../../verification/lab_sea/matlab |
cd ../../../verification/lab_sea/matlab |
103 |
matlab |
matlab |
104 |
lookat_exp1 |
lookat_exp1 |
107 |
Instructions for running Experiment 2 |
Instructions for running Experiment 2 |
108 |
===================================== |
===================================== |
109 |
|
|
110 |
This is a 1-cpu test of the ADI solver. The solution is |
This is a 1-cpu test of the LSR solver. The solution is |
111 |
compared to that of experiment 1, which used the LSR solver. |
compared to that of experiment 1, which used the ADI solver. |
112 |
|
|
113 |
To run Experiment 2: |
To run Experiment 2: |
114 |
cd ../../../verification/lab_sea/input |
cd ../../../verification/lab_sea/input |
115 |
ln -sf DATA.10hours data |
ln -sf data.10hours data |
116 |
ln -sf DATA.SEAICE.adi data.seaice |
ln -sf data.seaice.lsr data.seaice |
117 |
mitgcmuv_1 >&! output.txt |
mitgcmuv_1 >&! output.txt |
118 |
mkdir exp2 |
mkdir exp2 |
119 |
mv *tave.0000000010.data exp2 |
mv *tave.0000000010.data exp2 |
135 |
|
|
136 |
To run Experiment 3: |
To run Experiment 3: |
137 |
cd ../../../verification/lab_sea/input |
cd ../../../verification/lab_sea/input |
138 |
ln -sf DATA.1hour data |
ln -sf data.1hour data |
139 |
ln -sf DATA.SEAICE.testadi data.seaice |
ln -sf data.seaice.testadi data.seaice |
140 |
mitgcmuv_1 >&! output.txt |
mitgcmuv_1 >&! output.txt |
141 |
mkdir exp3a |
mkdir exp3a |
142 |
mv *tave.0000000001.data exp3a |
mv *tave.0000000001.data exp3a |
143 |
ln -sf DATA.SEAICE.testlsr data.seaice |
ln -sf data.seaice.testlsr data.seaice |
144 |
mitgcmuv_1 >&! output.txt |
mitgcmuv_1 >&! output.txt |
145 |
mkdir exp3b |
mkdir exp3b |
146 |
mv *tave.0000000001.data exp3b |
mv *tave.0000000001.data exp3b |
147 |
|
|
148 |
Use matlab script lookat_exp3.m to look at |
Use matlab script lookat_exp3.m to compare |
149 |
results from exp3a and exp3b: |
the output of exp2 to that of exp1: |
150 |
cd ../../../verification/lab_sea/matlab |
cd ../../../verification/lab_sea/matlab |
151 |
matlab |
matlab |
152 |
lookat_exp3 |
lookat_exp3 |
153 |
|
|
154 |
Both solvers should and do converge to solutions |
If the dynamic ice solvers are correct, they should converge to a |
155 |
that are constant at each latitude. But note that |
constant solution. The tests above show that both the ADI and the LSR |
156 |
the two solutions are not exactly the same because |
solver are unable to handle periodic domains and therefore that they |
157 |
the two solvers represent slightly different |
cannot be "correctly" parallelized. |
|
approximations of the viscous/plastic equations. |
|
158 |
|
|
159 |
|
|
160 |
Instructions for running Experiment 4 |
Instructions for running Experiment 4 |
165 |
|
|
166 |
To run Experiment 4: |
To run Experiment 4: |
167 |
cd ../../../verification/lab_sea/input |
cd ../../../verification/lab_sea/input |
168 |
ln -sf DATA.10hours data |
ln -sf data.10hours data |
169 |
ln -sf DATA.SEAICE.lsr data.seaice |
ln -sf data.seaice.adi data.seaice |
170 |
mpirun -np 2 mitgcmuv_2x1 |
mpirun -np 2 mitgcmuv_2x1 |
171 |
mkdir exp4 |
mkdir exp4 |
172 |
mv *tave.0000000010.data exp4 |
mv *tave.0000000010.data exp4 |
177 |
matlab |
matlab |
178 |
lookat_exp4 |
lookat_exp4 |
179 |
|
|
180 |
The accuracy of the dynamic solvers is increased by |
The inaccuracy at the tile boundary can be decreased by increasing |
181 |
reducing parameter LSR_ERROR for the LSR solver and |
NPSEUDO in data.seaice at the expense of computation time. |
182 |
by increasing parameter NPSEUDO for the ADI solver. |
Also as sea-ice ages (thickens) the difference at the tiles becomes |
183 |
The computational cost/accuracy trade-off is quite |
increasingly small. For solver pkg/seaice/adi.F a value of NPSEUDO=10 |
184 |
high for the ADI solver but relatively small for |
appears adequate for forward integrations but cannot be used for sea-ice |
185 |
the LSR solver, which is the default solver. |
adjoint model. Work is underway to fix this problem. |
186 |
|
|
187 |
|
|
188 |
Instructions for running Experiment 5 |
Instructions for running Experiment 5 |
193 |
|
|
194 |
To run Experiment 5: |
To run Experiment 5: |
195 |
cd ../../../verification/lab_sea/input |
cd ../../../verification/lab_sea/input |
196 |
ln -sf DATA.2years data |
ln -sf data.2years data |
197 |
ln -sf DATA.SEAICE.lsr data.seaice |
ln -sf data.seaice.adi data.seaice |
198 |
ln -sf evap.labsea1979 evap.labsea1980 |
ln -sf evap.labsea1979 evap.labsea1980 |
199 |
ln -sf flo.labsea1979 flo.labsea1980 |
ln -sf flo.labsea1979 flo.labsea1980 |
200 |
ln -sf fsh.labsea1979 fsh.labsea1980 |
ln -sf fsh.labsea1979 fsh.labsea1980 |
211 |
matlab |
matlab |
212 |
lookat_exp5 |
lookat_exp5 |
213 |
|
|
214 |
The comparison here is just for fun. |
Disclaimer: |
215 |
The configuration is too coarse and artificial |
The comparison here is just for fun, not really supposed |
216 |
to reproduce realistic sea-ice conditions. |
to look anything like the data. |
217 |
|
Otherwise it would put a lot of people out of business :-) |
218 |
|
|
219 |
Instructions for running Experiment 6 |
Instructions for running Experiment 6 |
220 |
===================================== |
===================================== |
224 |
|
|
225 |
To run Experiment 6: |
To run Experiment 6: |
226 |
cd ../../../verification/lab_sea/input |
cd ../../../verification/lab_sea/input |
227 |
ln -sf DATA.10hours data |
ln -sf data.10hours data |
228 |
ln -sf DATA.SEAICE.nodynamics data.seaice |
ln -sf data.seaice.nodynamics data.seaice |
229 |
mitgcmuv_1 >&! output.txt |
mitgcmuv_1 >&! output.txt |
230 |
mkdir exp6 |
mkdir exp6 |
231 |
mv *tave.0000000010.data exp6 |
mv *tave.0000000010.data exp6 |
236 |
matlab |
matlab |
237 |
lookat_exp6 |
lookat_exp6 |
238 |
|
|
|
|
|
239 |
Instructions for running Experiment 7 |
Instructions for running Experiment 7 |
240 |
===================================== |
===================================== |
241 |
|
|
245 |
|
|
246 |
To run Experiment 7: |
To run Experiment 7: |
247 |
cd ../../../verification/lab_sea/input |
cd ../../../verification/lab_sea/input |
248 |
ln -sf DATA.10hours data |
ln -sf data.10hours data |
249 |
ln -sf DATA.SEAICE.nodynamics data.seaice |
ln -sf data.seaice.nodynamics data.seaice |
250 |
mpirun -np 2 mitgcmuv_2x1 |
mpirun -np 2 mitgcmuv_2x1 |
251 |
mkdir exp7 |
mkdir exp7 |
252 |
mv *tave.0000000010.data exp7 |
mv *tave.0000000010.data exp7 |
256 |
cd ../verification/lab_sea/matlab |
cd ../verification/lab_sea/matlab |
257 |
matlab |
matlab |
258 |
lookat_exp7 |
lookat_exp7 |
|
|
|
|
|
|
|
Instructions for running Experiment 8 |
|
|
===================================== |
|
|
|
|
|
This is the default experiment which is executed by |
|
|
verification/testscript. It is a 1-cpu, 10-hour integration |
|
|
used to test CPP option SEAICE_EXTERNAL_FORCING. Atmospheric |
|
|
state is read-in using pkg/exf, rather than pkg/seaice routines. |
|
|
This experiment uses pkg/gmredi, pkg/kpp, pkg/seaice, and pkg/exf. |
|
|
|
|
|
To run Experiment 8: |
|
|
cd ../../../verification/lab_sea/input |
|
|
ln -sf DATA.10hours_exf data |
|
|
ln -sf DATA.SEAICE.exf data.seaice |
|
|
mitgcmuv_exf_forcing >&! output.txt |
|
|
mkdir exp8 |
|
|
mv *tave.0000000010.data exp8 |
|
|
|
|
|
Use matlab script lookat_exp8.m to compare |
|
|
the output of exp8 to that of exp1: |
|
|
cd ../../../verification/lab_sea/matlab |
|
|
matlab |
|
|
lookat_exp8 |
|
|
|
|
|
|
|
|
Instructions for running Experiment 9 |
|
|
===================================== |
|
|
|
|
|
This is a 1-cpu, 10-hour integration used to test CPP option |
|
|
SEAICE_EXTERNAL_FLUXES. Both the atmospheric state and the |
|
|
open-water surface fluxes are provided by pkg/exf. |
|
|
|
|
|
To run Experiment 9: |
|
|
cd ../../../verification/lab_sea/input |
|
|
ln -sf DATA.10hours_exf data |
|
|
ln -sf DATA.SEAICE.exf data.seaice |
|
|
mitgcmuv_exf_fluxes >&! output.txt |
|
|
mkdir exp9 |
|
|
mv *tave.0000000010.data exp9 |
|
|
|
|
|
Use matlab script lookat_exp9.m to compare |
|
|
the output of exp9 to that of exp8: |
|
|
cd ../../../verification/lab_sea/matlab |
|
|
matlab |
|
|
lookat_exp9 |
|
|
|
|
|
|
|
|
Instructions for running Experiment 10 |
|
|
====================================== |
|
|
|
|
|
This is a 1-cpu, 10-hour integration similar to exp8, but |
|
|
with bulk formula computation of evaporation fields. |
|
|
|
|
|
To run Experiment 10: |
|
|
cd ../../../verification/lab_sea/input |
|
|
ln -sf DATA.10hours_exf data |
|
|
ln -sf DATA.SEAICE.exf data.seaice |
|
|
mitgcmuv_compute_evap >&! output.txt |
|
|
mkdir exp10 |
|
|
mv *tave.0000000010.data exp10 |
|
|
|
|
|
Use matlab script lookat_exp10.m to compare |
|
|
the output of exp10 to that of exp8: |
|
|
cd ../../../verification/lab_sea/matlab |
|
|
matlab |
|
|
lookat_exp10 |
|
|
|
|
|
|
|
|
Instructions for running Experiment 11 |
|
|
====================================== |
|
|
|
|
|
This is a 1-cpu, 10-hour integration similar to exp1, but |
|
|
with multi-level sea-ice thermodynamics. |
|
|
|
|
|
To run Experiment 10: |
|
|
cd ../../../verification/lab_sea/input |
|
|
ln -sf DATA.10hours data |
|
|
ln -sf DATA.SEAICE.lsr data.seaice |
|
|
mitgcmuv_multilevel >&! output.txt |
|
|
mkdir exp11 |
|
|
mv *tave.0000000010.data exp11 |
|
|
|
|
|
Use matlab script lookat_exp11.m to compare |
|
|
the output of exp11 to that of exp1: |
|
|
cd ../../../verification/lab_sea/matlab |
|
|
matlab |
|
|
lookat_exp11 |
|