CHANGE LOG FOR UNIFIED 3DVAR CODE ------------------------------------------- Author(s) : Lidia Cucurull, Wan-Shu Wu, Dave Parrish, Daryl Kleist, Russ Treadon Reviewer(s): Russ Treadon Date : 04/07/04 CVS tag : ncep-gsi-1_2 REASON FOR CHANGES ------------------ - Clean up code by removing unused variables and arrays. - Make treatment of observation error in prep*f90 and spr*f90 routines consistent across observation types - Allow for capability to perform skin temperature analysis by separating into water temp, land temp, and ice temperature the background error variances and horizontal correlation lengths for each type (sea/land/ice) seperately - Add tuning variables for horizontal/vertical correlation length scales in background error - REGIONAL: correct order of hybrid levels (was reversed) - GLOBAL: Updated background error stats fixed files to include SST variances and length scales SPECIAL NOTES ------------- - GLOBAL MODE ONLY: SST variances and length scales are expected when reading the background error statistics file. The code will fail if these arrays do not exist in the background error statistics file. As a result, this update IS NOT COMPATIBLE with previous GSI versions without modifying the code. EXPECTED DIFFERENCES -------------------- - Code cleanup does not alter results - Replacement of 1/(obs err)**2 in prep*f90 and sqrt(1/(obs err)**2) in spr*f90 routines yields small differences due numerical roundoff - REGIONAL: previous results wrong, new results correct - will impact only the gradient on very first iteration, other impacts are result of changes to satellite radiance term - largest impact can be seen when code is cycled GLOBAL TEST RESULTS ------------------- Test case: /nfsuser/g01/wx20rt/global_gsi/cases/global/sigma/t62l28/2004032212 /nfsuser/g01/wx20rt/global_gsi/cases/global/sigma/t254l64/2004021012 Old code : /nfsuser/g01/wx20rt/global_gsi/sorc/gmao_cvs New code : /nfsuser/g01/wx20rt/global_gsi/sorc/gsi_cvs Machine : IBM SP (frost) Setup : 12 mpi tasks, blocking unlimited Max memory old: 158640 Kbytes (627608 Kbytes @ T254L64) new: 158804 Kbytes (629604 Kbytes @ T264L64) Wall clock old: 422.901610 seconds (1508.247035 seconds @ T254L64) new: 420.992374 seconds (1522.890821 seconds @ T254L64) Output from final iteration of minimization old: 0: penalty,grad ,a,b= 3 1 0.280504821856384631E+06 0.768915534342758910E+05 0.204209522648718216E-02 0.914272701473710980E+00 new: 0: penalty,grad ,a,b= 3 1 0.293203854225938849E+06 0.525916675135643454E+05 0.245589799345165153E-02 0.715216303961939026E+00 T254L64 old: 0: penalty,grad ,a,b= 3 1 0.285025372378970205E+06 0.597447287936541761E+04 0.155884076726698012E-02 0.191328585054114941E+01 new: 0: penalty,grad ,a,b= 3 1 0.306086998869215022E+06 0.317719480900828694E+04 0.190805760828574654E-02 0.132807469621141894E+01 REGIONAL TEST RESULTS --------------------- Test case: /nfsuser/g01/wx20rt/global_gsi/cases/regional/wrfnmm/east_nest/2004021718 Old code : /nfsuser/g01/wx20rt/global_gsi/sorc/gmao_cvs New code : /nfsuser/g01/wx20rt/global_gsi/sorc/gsi_cvs Machine : IBM SP (frost) Setup : 12 mpi tasks, blocking unlimited Max memory old: 483268 Kbytes new: 483612 Kbytes Wall clock old: 1132.063779 seconds new: 1101.122869 seconds Output from final iteration of minimization old: 0: penalty,grad ,a,b= 3 1 0.173637932959915634E+05 0.557863497296736168E+05 0.956466520769063073E-03 0.172689899417577536E+00 new: 0: penalty,grad ,a,b= 3 1 0.172165443968684449E+05 0.387921528944265228E+05 0.500164624399970087E-03 0.308080388871306443E+01 FILES REMOVED ------------- None FILES ADDED ----------- intsrw.f90 - observation operator for radar wind superobs prepsrw.f90 - observation preparation for radar wind superobs read_superwinds.f90 - read radar wind superobs setupsrw.f90 - forward model for radar wind superobs sprsrw.f90 - prepare radar wind superobs for minimization stpsrw.f90 - compute penalty and stepsize for radar wind superobs FILES MODIFIED -------------- berror.f90 - add array for sst variances, add scaling parameters g2s_all3.F90 - rename wgts to wgtlats (removed possible conflict/confusion) gengrid_vars.f90 - rename wgts to wgtlats glbsoi.f90 - move prewgt call to after read_guess for global; set up pointers for new SST analysis gridmod.f90 - add variable wgtlats (from specmod); increase variable levs to nsig*6+4 (now 3 sfc temperature variables for sea/land/ice) gsimain.F90 - add scaling variables for background error horizontal and vertical correlation lengths, subroutine call change gsisub.f90 - change write(0,*) to write(6,*) guess_grids.f90 - remove array lnprsi since never used; add sea/land/ice mask on global domain, subroutine call changes hoper.f90 - 3 sfc temp components placed back into single skin temperature array using sea/land/ice mask htoper.f90 - skin temperature broken into 3 components inguesfc.F90 - load sea/land/ice mask to nlat x nlon grid init_commvars.f90 - change number of variable levels (nsig*6+4), added 2 sfc fields intall.F90 - add call to intsrw interp_a2e.f90 - change write(0,*) to write(6,*) jfunc.f90 - define pointers for new skin temp arrays mpimod.F90 - add capability for ice/sst/land temp fields obs_para.f90 - add code for radar wind superobs obsmod.f90 - add code for radar wind superobs prepdw.f90 - used latitude, which is incorrect for regional runs--add change to earth lat prepp.f90 - redefine error=1/(obs error), was 1/(obs error)**2 preppw.f90 - redefine error=1/(obs error), was 1/(obs error)**2 prepq.f90 - redefine error=1/(obs error), was 1/(obs error)**2 prept.f90 - redefine error=1/(obs error), was 1/(obs error)**2 prepw.f90 - redefine error=1/(obs error), was 1/(obs error)**2 prewgt.f90 - add variables for skin temperature background error; note that two new fields are read in from fixed file; apply correlation length scaling parameters prewgt_reg.f90 - delete calculation of hybrid sigl (passed from rdgstat_reg); apply correlation length scaling parameters qcmod.f90 - add code for radar wind superobs rdgstat_reg.f90 - reverse order of hybrid sigl array read_guess.f90 - call to get surface fields changed read_lidar.f90 - include station id along with observation array read_obs.f90 - add call to read_superwinds read_prepbufr.f90 - include station id along with observation array read_radar.f90 - include station id along with observation array read_wrf_nmm_guess.f90 - replace write(0,*) with write(6,*) setupdw.f90 - correct comment regarding obs error, add station id to diagnostic output setuppcp.f90 - reverse the order of hybrid sigma structure setupps.f90 - correct comment regarding obs error, add station id to diagnostic output setuppw.f90 - correct comment regarding obs error, add station id to diagnostic output setupq.f90 - correct comment regarding obs error, add station id to diagnostic output setuprhsall.f90 - add call to setupsrw setuprw.f90 - correct comment regarding obs error, add station id to diagnostic output setupspd.f90 - correct comment regarding obs error, add station id to diagnostic output setupt.f90 - correct comment regarding obs error, add station id to diagnostic output setupw.f90 - correct comment regarding obs error, add station id to diagnostic output simpin1_init.f90 - replace write(0,*) to write(6,*) specmod.F90 - wgts array has been renamed and moved to gridmod sprp.f90 - remove sqrt(1/(obs errror)**2) sprpw.f90 - remove sqrt(1/(obs errror)**2) sprq.f90 - remove sqrt(1/(obs errror)**2) sprspd.f90 - remove sqrt(1/(obs errror)**2) sprt.f90 - remove sqrt(1/(obs errror)**2) spruv.f90 - remove sqrt(1/(obs errror)**2) statsconv.f90 - add statistics output for radar wind superobs stpcalc.f90 - add calls to stpsrw and modify penalty arrays wrsfca.F90 - bug fix in writing surface temperature array wrwrfnmma.f90 - replace write(0,*) with write(6,*) MAKEFILE CHANGES ---------------- - Makefile and Makefile.dependency updated for new routines SCRIPT CHANGES -------------- - add namelist variables vs,hs - the vs/hs parameters scale the vertical/horizontal correlation lengths; both variables work the same (i.e. anything less than one will decrease the length scales, whereas anything larger than one will increase the length scales)...in order to do this, the vs parameter is inverted in the prewgt routines, whereas hs can be applied directly - GLOBAL: script must copy updated version of background error statistics (see FIX FILE CHANGES below) FIX FILE CHANGES ---------------- GLOBAL MODE ONLY - background error statistic file includes variances and horizontal length scales for sst analysis. To run this code, one must use updated background error statistics files. For the time being, these files for T62L28 and T254L64 resolution are have the following path/filenames: T62L28 - /nfsuser/g01/wx20rt/global_gsi/fix/global/global_berror.l28y96.sst.f77 T254L64 - /nfsuser/g01/wx20rt/global_gsi/fix/global/global_berror.l64y258.sst.f77 At a later date the "sst" string in the filename will be removed and the old bacgkround error statistic files removed. Please check future change logs to see when this occurs.