Example: Labrador Sea Region with Sea-Ice ========================================= This example sets up a small (20x16x23) Labrador Sea experiment coupled to a dynamic thermodynamic sea-ice model. A brief description of the sea-ice model is in "seaice.ps". The domain of integration spans 280E to 320E and 46N to 78N. Horizontal grid spacing is 2 degrees. The 23 vertical levels and the bathymetry file bathyFile = 'bathy.labsea' are obtained from the the 2-degree ECCO configuration. Integration is initialized from annual-mean Levitus climatology hydrogThetaFile = 'LevCli_temp.labsea' hydrogSaltFile = 'LevCli_salt.labsea' Surface salinity relaxation is to the monthly mean Levitus climatology saltClimFile = 'SSS.labsea' Forcing files are a 1979-1999 monthly climatology computed from the NCEP reanalysis (see pkg/seaice/SEAICE_FFIELDS.h for units and signs) gairxFile = 'u10m.labsea79' # 10-m zonal wind gairyFile = 'v10m.labsea79' # 10-m meridional wind tairFile = 'tair.labsea1979' # 2-m air temperature qaFile = 'qa.labsea1979' # 2-m specific humidity floFile = 'flo.labsea1979' # longwave radiation fshFile = 'fsh.labsea1979' # shortwave radiation rainFile = 'prate.labsea1979' # precipitation evapFile = 'evap.labsea1979' # evaporation Using testscript to test sea-ice code ===================================== Running the testscript experiment: cd verification ./testscript -force lab_sea Note that fairly large differences in accuracy occur across different platforms. For example, testscript comparisons between g77 (Linux) and f77 (SGI) generated output gives: T S U V C D M c m s m s m s m s n p a R g m m e . m m e . m m e . m m e . f n k u 2 i a a d i a a d i a a d i a a d g d e n d n x n . n x n . n x n . n x n . Y Y Y Y 5 5 7 7 7 8 10 9 6 6 6 6 7 5 7 5 7 FAIL lab_sea Instructions for generating 1-CPU and 2-CPU executables ======================================================= Generating 1-CPU executable: cd ../verification/lab_sea/input ln -sf ../code/SIZE.h . ln -sf ../code/CPP_OPTIONS.h . ln -sf ../code/CPP_EEOPTIONS.h . ../../../tools/genmake -makefile ==> on alhena use: ../../../tools/genmake -platform=o2k_noopt -makefile make clean make depend make mv mitgcmuv mitgcmuv_1 Generating 2-CPU executable: cd ../../../verification/lab_sea/input ln -sf ../code/SIZE_2x1.h SIZE.h ln -sf ../code/CPP_OPTIONS.h . ln -sf ../code/CPP_EEOPTIONS_MPI.h CPP_EEOPTIONS.h ../../../tools/genmake -mpi -makefile ==> on alhena for comparison purposes use: ../../../tools/genmake -mpi -platform=o2k_noopt -makefile ==> on alhena for fast execution use: ../../../tools/genmake -mpi -platform=o2k -makefile make clean make depend make mv mitgcmuv mitgcmuv_2x1 Instructions for running Experiment 1 ===================================== This is a 1-cpu, 10-hour integration used to make sure that all the files are available and that the model compiles and integrates. It is the default experiment of "verification/testscript lab_sea". To run Experiment 1: cd ../../../verification/lab_sea/input ln -sf data.10hours data ln -sf data.seaice.adi data.seaice mitgcmuv_1 >&! output.txt mkdir exp1 mv *tave.0000000010.data exp1 Use matlab script lookat_exp1.m to compare the output of exp1 with that from release1_patch5 sea-ice code: cd ../../../verification/lab_sea/matlab matlab lookat_exp1 Instructions for running Experiment 2 ===================================== This is a 1-cpu test of the LSR solver. The solution is compared to that of experiment 1, which used the ADI solver. To run Experiment 2: cd ../../../verification/lab_sea/input ln -sf data.10hours data ln -sf data.seaice.lsr data.seaice mitgcmuv_1 >&! output.txt mkdir exp2 mv *tave.0000000010.data exp2 Use matlab script lookat_exp2.m to compare the output of exp2 to that of exp1: cd ../../../verification/lab_sea/matlab matlab lookat_exp2 Instructions for running Experiment 3 ===================================== This is a test of periodic boundary conditions for LSR and ADI solvers. The domain has a flat bottom and is periodic both in the x and the y directions. All forcing files are null or constant (u10m = v10m = 5 m/s). To run Experiment 3: cd ../../../verification/lab_sea/input ln -sf data.1hour data ln -sf data.seaice.testadi data.seaice mitgcmuv_1 >&! output.txt mkdir exp3a mv *tave.0000000001.data exp3a ln -sf data.seaice.testlsr data.seaice mitgcmuv_1 >&! output.txt mkdir exp3b mv *tave.0000000001.data exp3b Use matlab script lookat_exp3.m to compare the output of exp2 to that of exp1: cd ../../../verification/lab_sea/matlab matlab lookat_exp3 If the dynamic ice solvers are correct, they should converge to a constant solution. The tests above show that both the ADI and the LSR solver are unable to handle periodic domains and therefore that they cannot be "correctly" parallelized. Instructions for running Experiment 4 ===================================== This is a 2-cpu, 10-hour integration used to test tile edges for sea-ice dynamic solvers. To run Experiment 4: cd ../../../verification/lab_sea/input ln -sf data.10hours data ln -sf data.seaice.adi data.seaice mpirun -np 2 mitgcmuv_2x1 mkdir exp4 mv *tave.0000000010.data exp4 Use the matlab script lookat_exp4.m to compare the 2-cpu output to that of exp1: cd ../../../verification/lab_sea/matlab matlab lookat_exp4 The inaccuracy at the tile boundary can be decreased by increasing NPSEUDO in data.seaice at the expense of computation time. Also as sea-ice ages (thickens) the difference at the tiles becomes increasingly small. For solver pkg/seaice/adi.F a value of NPSEUDO=10 appears adequate for forward integrations but cannot be used for sea-ice adjoint model. Work is underway to fix this problem. Instructions for running Experiment 5 ===================================== This is a 2-cpu, 2-year, test integration. It illustrates convention used by seaice_get_forcing.F for multi-year forcing. To run Experiment 5: cd ../../../verification/lab_sea/input ln -sf data.2years data ln -sf data.seaice.adi data.seaice ln -sf evap.labsea1979 evap.labsea1980 ln -sf flo.labsea1979 flo.labsea1980 ln -sf fsh.labsea1979 fsh.labsea1980 ln -sf prate.labsea1979 prate.labsea1980 ln -sf qa.labsea1979 qa.labsea1980 ln -sf tair.labsea1979 tair.labsea1980 ln -sf u10m.labsea79 u10m.labsea80 ln -sf v10m.labsea79 v10m.labsea80 mpirun -np 2 mitgcmuv_2x1 Use the matlab script lookat_exp5.m to compare the 2-cpu output to SMMR-SSM/I data: cd ../../../verification/lab_sea/matlab matlab lookat_exp5 Disclaimer: The comparison here is just for fun, not really supposed to look anything like the data. Otherwise it would put a lot of people out of business :-) Instructions for running Experiment 6 ===================================== This is a 1-cpu test of sea-ice thermodynamics (no dynamics). The solution is compared to that of experiment 1. To run Experiment 6: cd ../../../verification/lab_sea/input ln -sf data.10hours data ln -sf data.seaice.nodynamics data.seaice mitgcmuv_1 >&! output.txt mkdir exp6 mv *tave.0000000010.data exp6 Use the matlab script lookat_exp6.m to compare the output of exp6 to that of exp1: cd ../verification/lab_sea/matlab matlab lookat_exp6 Instructions for running Experiment 7 ===================================== This is a 2-cpu, 10-hour integration used to test tile edges for sea-ice thermodynamics (no dynamics). 2-CPU executable from experiment 4 is required. To run Experiment 7: cd ../../../verification/lab_sea/input ln -sf data.10hours data ln -sf data.seaice.nodynamics data.seaice mpirun -np 2 mitgcmuv_2x1 mkdir exp7 mv *tave.0000000010.data exp7 Use the matlab script lookat_exp7.m to compare the output of exp7 to that of exp6: cd ../verification/lab_sea/matlab matlab lookat_exp7