[MITgcm-devel] other problem in recent check-in

Dimitris Menemenlis menemenlis at sbcglobal.net
Tue Jan 29 13:15:42 EST 2008


Martin, exf_getffieldrec.F prior to Saturday's check-in had a problem in 
determining interpolation records and corresponding weights when the forcing 
field startdate was not start January 1, hour zero.  For example, some of the 
the NCEP and ECMWF forcing fields that we use start at hour 3 or hour 6.  So 
during the first 3 to 6 hours of each year, the forcing fields would have been 
wrong, not just that they were obtained from the end of the current year instead 
of the end of the previous year but also the interpolation weights were wrong so 
that we could end up with daytime forcing at night, etc.

Saturday's check-in fixed the above problem but it assumed that each year was 
exactly divisible by the forcing field period, which is the case, for example, 
if the forcing field period is six hours or one day.  Saturday's check-in did 
not, however, deal correctly with the special case when forcing field period is 
greater than one day, for example, monthly forcing fields with leap years, etc.

Last night's check-in does not change the forcing field records nor does it 
change the forcing field weights away from year-end transitions but it does 
change the weights that are computed during transition from one year to the next 
for forcing field periods greater than one day.  So yes last night's check-in is 
expected to affect your results if yearlyfields=true and if you are using 
monthly forcing fields.

The best way to find out for sure whether exf_getffieldrec.F does what you think 
it should do is to run your code with "#define EXF_VERBOSE" in EXF_OPTIONS.h and 
with "debuglevel=1" in data and then to look at a few exf_GetFFieldsRec and 
MDS_READ_FIELD output diagnostics to make sure that the file reading flags 
(first and changed), the forcing files read-in, the record numbers (count0 and 
count1), and the interpolation factor (fac) are what you expect them to be.

The test that I ran (manually) is checked in as instructions in 
MITgcm/verification/lab_sea/README and also reproduced below:

   cd MITgcm/verification/lab_sea/build
   \rm *
   \cp ../code/* .
   sed 's/undef EXF_V/define EXF_V/' \
       ../../../pkg/exf/EXF_OPTIONS.h > EXF_OPTIONS.h
   ../../../tools/genmake2
   make depend
   make -j
   cd ../run
   \rm *
   \cp ../input/* .
   \mv v10m.labsea1979 v10m.labsea_1979
   \mv u10m.labsea1979 u10m.labsea_1979
   \mv flo.labsea1979 flo.labsea_1979
   \mv prate.labsea1979 prate.labsea_1979
   \mv tair.labsea1979 tair.labsea_1979
   \mv fsh.labsea1979 fsh.labsea_1979
   \mv qa.labsea1979 qa.labsea_1979
   \mv SSS_monthly.labsea1979 SSS_monthly.labsea_1979
   \ln -sf v10m.labsea_1979 v10m.labsea_1978
   \ln -sf u10m.labsea_1979 u10m.labsea_1978
   \ln -sf flo.labsea_1979 flo.labsea_1978
   \ln -sf prate.labsea_1979 prate.labsea_1978
   \ln -sf tair.labsea_1979 tair.labsea_1978
   \ln -sf fsh.labsea_1979 fsh.labsea_1978
   \ln -sf qa.labsea_1979 qa.labsea_1978
   \ln -sf SSS_monthly.labsea_1979 SSS_monthly.labsea_1978
   \ln -sf v10m.labsea_1979 v10m.labsea_1980
   \ln -sf u10m.labsea_1979 u10m.labsea_1980
   \ln -sf flo.labsea_1979 flo.labsea_1980
   \ln -sf prate.labsea_1979 prate.labsea_1980
   \ln -sf tair.labsea_1979 tair.labsea_1980
   \ln -sf fsh.labsea_1979 fsh.labsea_1980
   \ln -sf qa.labsea_1979 qa.labsea_1980
   \ln -sf SSS_monthly.labsea_1979 SSS_monthly.labsea_1980
   \mv data.exf_YearlyFields data.exf
   \mv data_YearlyFields data
   sed 's/tics = .TRUE./tics = .FALSE./' ../input/data.pkg > data.pkg
   ../build/mitgcmuv >& output.txt &




More information about the MITgcm-devel mailing list