CHANGE LOG FOR UNIFIED 3DVAR CODE ------------------------------------------- Author(s) : Wan-Shu Wu, Lidia Cucurull, Daryl Kleist, John Derber, Dan Kokron Reviewer(s): Russ Treadon Date : 05/05/2004 CVS tag : ncep-gsi-2004_04 REASON FOR CHANGES ------------------ BOTH: 1) Correct bug in penalty calculation for total precipitable water (Cucurull) 2) Modified negative moisture constraint for better control (Kleist) 3) Removed deflation of guess saturation vapor pressure in read_guess.f90 (Kleist) 4) Deflate satellite radiance moisture sensitivity vector above tropopause (Kleist) 5) Move variance multiplication after vertical smoothing (Derber) 6) Update SGI library calls for spectral to grid transforms (Kokron) 7) Observation time units are consistently in units of floating point floating point hours with respect to analysis time for all observation types. Previous versions had a mix of minutes and hours. (Treadon) 8) Correct bug in specification of jiterstart when iguess=-1 (Treadon) 9) Add ozone diagnostic file and ability to selectively use/monitor SBUV data from various satellites (Treadon) 10) Rename NAMANAL, SATNAME, and ONEOBNL namelists to SETUP, OBS_INPUT, and SINGLEOB_TEST, respectively, to make names more meaningful (Treadon) GLOBAL: 1) Speed up and use less memory in polar patch and recursive filter (Derber) REGIONAL: 1) Changes were made to allow the background error statistics to use the same vertical grid structure as the first guess (Wu) 2) Write updated skin/sea surface temperature to analysis file if option to do so is selected (Kleist) 3) Fix bugs in skin temperature analysis (Derber) 4) Correct inconsistency in thinning of satellite data. Previously, observation (lat,lon) used in thinning were on rotated grid while (lat,lon) of thinning grid was no rotated. Corrected by using un-rotated obs (lat,lon) in thinning. (Treadon) SPECIAL NOTES ------------- 1) NEW fixed file - global_ozinfo.txt. This file is similar in structure to global_satinfo.txt and is used to set parameters for ozone assimilation 2) Namelists NAMANAL, SATNAME, and ONEOBNL changed to SETUP, OBS_INPUT, and SINGLEOB_TEST This was done to give more meaning (self-documenting) names to gsi namelists 3) The dtype (see namelist OBS_INPUT) for ozone must be "sbuv2", not "ozone" EXPECTED DIFFERENCES -------------------- BOTH: 1) Largest differences result from changes to negative moisture constraint. This release uses the saturation q instead of globally averaged q to scale the penalty term. These changes alter the initial negative moisture constraint penalty and subsequent minimization 2) Damping of radiance moisture senstivity vector above tropopause alters minimization. Can change radiance data counts on subsequent outer iterations 3) Roundoff differences in initial penalty of radiance observations when observation time is in floating point hours. Change in units affects the time interpolation. REGIONAL: 1) No difference in results when run using default statistics 2) Test case indicates greater number of radiance obs used in analysis GLOBAL TEST RESULTS ------------------- Test case: /nfsuser/g01/wx20rt/global_gsi/cases/global/sigma/t254l64/2004041512 Old code : /nfsuser/g01/wx20rt/global_gsi/sorc/gmao_cvs/global_anl New code : /nfsuser/g01/wx20rt/global_gsi/sorc/gsi_cvs/global_anl Machine : NCEP IBM SP (frost) Setup : 48 mpi tasks, blocking=unlimited Max memory old: 629192 Kbytes new: 632148 Kbytes Wall clock old: 1377.450792 seconds new: 1316.798333 seconds Output from final iteration of minimization old: 0: penalty,grad ,a,b= 3 1 0.182725033616697270E+06 0.235618499254071821E+04 0.199668057189761718E-02 0.210342649349409916E+01 new: 0: penalty,grad ,a,b= 3 1 0.180208145768173825E+06 0.294227658014251074E+04 0.124170306385001602E-02 0.226055222032754166E+01 REGIONAL TEST RESULTS --------------------- Test case: /nfsuser/g01/wx20rt/global_gsi/cases/regional/wrfnmm/central_nest/2004041512 Old code : /nfsuser/g01/wx20rt/global_gsi/sorc/gmao_cvs/global_anl New code : /nfsuser/g01/wx20rt/global_gsi/sorc/gsi_cvs/global_anl Machine : NCEP IBM SP (frost) Setup : 12 mpi tasks, blocking=unlimited Max memory old: 467188 Kbytes new: 473492 Kbytes Wall clock old: 1229.957715 seconds new: 1093.532597 seconds Output from final iteration of minimization old: 0: penalty,grad ,a,b= 3 1 0.473809978232284629E+05 0.281728695712632798E+05 0.464795508362831050E-02 0.180164999413257143E+00 new: 0: penalty,grad ,a,b= 3 1 0.472878317408652438E+05 0.365295681744780159E+05 0.482728236857825344E-02 0.119700105442843097E+00 FILES REMOVED ------------- None FILES ADDED ----------- Two files are added for the ozone assimilation - ozinfo.f90 - read in text file with parameters that affect ozone assimilation - statsoz.f90 - generate/print statistics for ozone assimilation (was in statsconv.f90) Adding these routines does NOT alter the use of ozone data in the analysis. Results identical to previous versions are obtained when using the new code. FILES MODIFIED -------------- berror.f90 - clean up unused & duplicate (*_reg) arrays, add surface variance fields (regional) bkerror.f90 - remove variance calculation. Simplify code constants.f90 - add constant rozcon deternpe.f90 - replace print statement with write statement emiss.f90 - replace print statement with write statement gs2_all3.F90 - add code to use SGI scsl library, retain ability to use sgimath library getlalo.F90 - add code to use SGI scsl library, retain ability to use sgimath library glbsoi.f90 - move call to prewgt_reg gridmod.f90 - add logical for regional sfc field update, replace print statement with write statement gsimain.F90 - logical added to namelist for regional sfc update, rename variable delhour to time_window_radar, change name of NAMANAL, SATNAME, and ONEOBNL namelists to SETUP, OBS_INPUT, and SINGLEOB_TEST, respectively gsisub.f90 - replace print statement with write, add call to ozinfo guess_grids.f90 - clean up code for calculation of mid-layer pressures hoper.f90 - add surface variance multiplication htoper.f90 - add surface variance multiplication inisph.f90 - replace print statement with write statement interp_e2a.f90 - replace print statement with write statement intlimq.f90 - use 1/qs**2 for weighting intoz.f90 - modify code to account for new ozone data array structure intrp3oz.f90 - clean up code jfunc.f90 - correct bug in initialization of jiterstart, remove global average q array, add 1/qs**2 array obs_para.f90 - change obstype "ozone" to "sbuv2" obsmod.f90 - remove variable time_window_min, modifiy arrays to hold ozone data ozinfo.f90 - read text file that sets parameters for ozone assimilation polcarf.f90 - replace print statement with write statement prepdw.f90 - change awork index to hold dw statistics from 8 to 6 prewgt_reg.f90 - code clean up, communicate and use sli mask, fix skin temperature, include variance in dssv. add dssvl and dssv2 for sfc qcmod.f90 - rename variable dehlour to time_window_radar rad_tran_k.f90 - replace print statement with write statement radinfo.f90 - replace print statement with write statement rdgstat_reg.f90 - defined/setup vertical interpolation for the layer idenitical to the top layer of the statistics. read_airs.f90 - convert observation time to analysis relative hours, for regional mode use un-rotated (lat,lon) in thinning read_avhrr_navy.f90 - convert observation time to analysis relative hours, for regional mode use un-rotated (lat,lon) in thinning read_bufrtovs.f90 - convert observation time to analysis relative hours, for regional mode use un-rotated (lat,lon) in thinning read_goesimg.f90 - convert observation time to analysis relative hours, for regional mode use un-rotated (lat,lon) in thinning read_goesndr.f90 - convert observation time to analysis relative hours, for regional mode use un-rotated (lat,lon) in thinning read_guess.f90 - no longer use global average q, compute 1/qs**2 on subdomains for negative moisture constraint read_ieeetovs.f90 - convert observation time to analysis relative hours, for regional mode use un-rotated (lat,lon) in thinning read_nmm_guess.f90 - see read_guess.f90, load isli array consistent with global read_obs.f90 - replace print statement with write statement read_ozone.f90 - convert observation time to analysis relative hours read_pcp.f90 - remove variables ilat and ilon since not used read_prepbufr.f90 - replace print statement with write statement read_radar.f90 - convert observation time to analysis relative hours read_wrf_nmm_guess.f90 - replace print statement with write statement, see read_guess.f90 load isli array consistent with global rfdpar.f90 - replace print statement with write statement s2g.F90 - add code to use SGI scsl library, retain ability to use sgimath library s2g1.F90 - add code to use SGI scsl library, retain ability to use sgimath library s2g_all3.F90 - add code to use SGI scsl library, retain ability to use sgimath library s2gvec.F90 - add code to use SGI scsl library, retain ability to use sgimath library setupoz.f90 - remove conversion of observation time to hours, rewrite to use modified ozone data structure setuprad.f90 - deflate moisture sensitivity vector above tropopause, remove converstion of observation time to hours setuprhsall.f90 - change code related to ozone setupt.f90 - remove unecessary print statement simpin1.f90 - replace print statement with write statement simpin1_init.f90 - replace print statement with write statement smoothzrf_reg.f90 - code clean up specmod.F90 - add code to use SGI scsl library, retain ability to use sgimath library sprdw.f90 - replace print statement with write statement sproz.f90 - modify code to account for new ozone data array structure sprp.f90 - replace print statement with write statement sprpw.f90 - replace print statement with write statement sprq.f90 - replace print statement with write statement sprrw.f90 - replace print statement with write statement sprspd.f90 - replace print statement with write statement sprsrw.f90 - replace print statement with write statement sprt.f90 - replace print statement with write statement spruv.f90 - replace print statement with write statement sst_retrieval.f90 - replace print statement with write statement statsconv.f90 - remove ozone statistics, now in statsoz.f90 statsoz.f90 - compute and print statistics for ozone data stplimq.f90 - use 1/qs**2 for weighting stpoz.f90 - modify code to account for new ozone data array structure stppw.f90 - correct bug in penalty calculation wrwrfnmma.f90 - write out updated skin and sea surface temperatures if flagged MAKEFILE CHANGES ---------------- Makefile - add ozinfo.f90 and statsoz.f90 to SRCSF90C list Makefile.dependency - prewgt_reg depends on guess_grids module - add ozinfo.o and statsoz.o Makefile.conf.IRIX64 - default to scsl lib; to use -lcomplib.sgimath also need -D_OLDSGIFFT_ SCRIPT CHANGES -------------- 1) Several changes are made to the GSI namelists a) Rename namelists NAMANAL, SATNAME and ONEOBNL to SETUP, OBS_INPUT, and SINGLEOB_TEST, respectively, to make names more meaningful b) In namelist SETUP, add two parameters update_regsfc - set to .true. if you want to write out the updated surfaced fields to the regional analysis file idiag_ozone - .true.=create ozone diagnostic file, .false.=do not write ozone diagnostic value, default=.true. c) In namelist OBS_INPUT, - to assimilate ozone data from sbuv, the dtype parameter must be "sbuv2" NOT "ozone" 2) Must include copy of global_ozinfo.txt from $FIXDIR to local working directory. The ozone information file must be named "ozinfo" in the local workin directory. 3) GMAO ONLY: Script analyzer is changed in the following ways a) Added global_ozinfo.txt to list of static files. SSI does not need global_ozinfo.txt, but GSI does b) Expanded list (@satlist) of satellites for radiance diagostfic files c) Included scripting to handle ozone dianostic file (GSI only) FIX FILE CHANGES ---------------- 1) Add text file, global_ozinfo.txt, to specify parameters for ozone assimilation. The structure of this file is similar to that for brightness temperature assimilation, global_satinfo.txt 2) Update file gsi.rc.sample to reflect above changes to GSI namelist