[Dart-dev] [3651]
DART/trunk/models/cam/full_experiment/analyses2initial.csh:
From Kevin:
nancy at ucar.edu
nancy at ucar.edu
Fri Nov 7 16:21:51 MST 2008
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/dart-dev/attachments/20081107/f8a39b9e/attachment.html
-------------- next part --------------
Added: DART/trunk/models/cam/full_experiment/analyses2initial.csh
===================================================================
--- DART/trunk/models/cam/full_experiment/analyses2initial.csh (rev 0)
+++ DART/trunk/models/cam/full_experiment/analyses2initial.csh 2008-11-07 23:21:51 UTC (rev 3651)
@@ -0,0 +1,201 @@
+#!/bin/csh
+
+# Extract the mean copy for each state vector field from each of the timeslots
+# on a file (Posterior usually) and put each timeslot into CAM initial file format.
+# The non-state fields are ensemble averages of all the caminput_#.nc from the same
+# timeslot.
+
+# The CLM ensemble clminput_#.nc (all non-state fields) is ensemble averaged,
+# and then the snow fields are overwritten using the algorithm from
+# cam#.#.#/models/lnd/clm2/src/main/snowdp2lev.F90
+# packaged as an NCO script, which is used by ncap2.
+# ncap2 may need to be updated to NCO 3.9.4 or later.
+
+# set echo verbose
+
+# Called from auto_diag2ms_LSF.csh with
+# ../../analyses2initial.csh no_MS '.' Posterior copy 1 ${obs_seq}H >>& $saved
+
+set ms_file = $1
+set local_dir = $2
+set kind = $3
+set dim = $4
+set element1 = $5
+set yrmoday = $6
+
+# Upgrade; can these variables be filled by looking at what H* directories exist?
+# Then they wouldn't have to be hardwired here.
+set num_times = 4
+set hours = (06 12 18 24)
+
+if (! -d $local_dir) mkdir $local_dir
+cd $local_dir
+
+if (! -e ../../snow.nco) then
+ echo '/* ' >! snow.nco
+ echo 'execute via' >> snow.nco
+ echo 'ncap2 -O -S snow.nco -o clminput_avg_goodsno.nc clminput_avg_badsno.nc' >> snow.nco
+ echo ' ' >> snow.nco
+ echo 'where clminput_avg_badsno.nc is the ensemble average ' >> snow.nco
+
+ echo 'of the clminput_#.nc files' >> snow.nco
+ echo '---------------------------' >> snow.nco
+ echo '*/ ' >> snow.nco
+ echo ' ' >> snow.nco
+ echo '*cols = $column.size ;' >> snow.nco
+ echo '*landkind = cols1d_ityplun ;' >> snow.nco
+ echo '*SNOWDPr = SNOWDP ;' >> snow.nco
+ echo ' ' >> snow.nco
+ echo '*SNLSNOr[column] = 0 ;' >> snow.nco
+ echo '*DZSNOr [column,levsno] = 0.0d ;' >> snow.nco
+ echo '*ZSNOr [column,levsno] = 0.0d ;' >> snow.nco
+ echo '*ZISNOr [column,levsno] = 0.0d ;' >> snow.nco
+ echo ' ' >> snow.nco
+ echo 'for (*c=0s ; c< cols; c++) {' >> snow.nco
+ echo ' if ((SNOWDPr(c)>= 0.01d) && (SNOWDPr(c)<= 0.03d)) {' >> snow.nco
+ echo ' SNLSNOr(c) = -1 ;' >> snow.nco
+ echo ' DZSNOr(c, 4) = SNOWDPr(c);' >> snow.nco
+ echo ' } else if ((SNOWDPr(c)> 0.03d) && (SNOWDPr(c)<= 0.04d)) {' >> snow.nco
+ echo ' SNLSNOr(c) = -2 ;' >> snow.nco
+ echo ' DZSNOr(c, 3) = SNOWDPr(c)/2.0d ;' >> snow.nco
+ echo ' DZSNOr(c, 4) = DZSNOr(c, 3) ;' >> snow.nco
+ echo ' } else if ((SNOWDPr(c)> 0.04d) && (SNOWDPr(c)<= 0.07d)) {' >> snow.nco
+ echo ' SNLSNOr(c) = -2 ;' >> snow.nco
+ echo ' DZSNOr(c, 3) = 0.02d ;' >> snow.nco
+ echo ' DZSNOr(c, 4) = SNOWDPr(c)- DZSNOr(c, 3) ;' >> snow.nco
+ echo ' } else if ((SNOWDPr(c)> 0.07d) && (SNOWDPr(c)<= 0.12d)) {' >> snow.nco
+ echo ' SNLSNOr(c) = -3 ;' >> snow.nco
+ echo ' DZSNOr(c, 2) = 0.02d ;' >> snow.nco
+ echo ' DZSNOr(c, 3) = (SNOWDPr(c)- DZSNOr(c, 2))/2.0d ;' >> snow.nco
+ echo ' DZSNOr(c, 4) = DZSNOr(c, 3) ;' >> snow.nco
+ echo ' } else if ((SNOWDPr(c)> 0.12d) && (SNOWDPr(c)<= 0.18d)) {' >> snow.nco
+ echo ' SNLSNOr(c) = -3 ;' >> snow.nco
+ echo ' DZSNOr(c, 2) = 0.02d ;' >> snow.nco
+ echo ' DZSNOr(c, 3) = 0.05d ;' >> snow.nco
+ echo ' DZSNOr(c, 4) = SNOWDPr(c)- DZSNOr(c, 2) - DZSNOr(c, 3) ;' >> snow.nco
+ echo ' } else if ((SNOWDPr(c)> 0.18d) && (SNOWDPr(c)<= 0.29d)) {' >> snow.nco
+ echo ' SNLSNOr(c) = -4 ;' >> snow.nco
+ echo ' DZSNOr(c, 1) = 0.02d ;' >> snow.nco
+ echo ' DZSNOr(c, 2) = 0.05d ;' >> snow.nco
+ echo ' DZSNOr(c, 3) = (SNOWDPr(c)- DZSNOr(c, 1) - DZSNOr(c, 2))/2.0d ;' >> snow.nco
+ echo ' DZSNOr(c, 4) = DZSNOr(c, 3) ;' >> snow.nco
+ echo ' } else if ((SNOWDPr(c)> 0.29d) && (SNOWDPr(c)<= 0.41d)) {' >> snow.nco
+ echo ' SNLSNOr(c) = -4 ;' >> snow.nco
+ echo ' DZSNOr(c, 1) = 0.02d ;' >> snow.nco
+ echo ' DZSNOr(c, 2) = 0.05d ;' >> snow.nco
+ echo ' DZSNOr(c, 3) = 0.11d ;' >> snow.nco
+ echo ' DZSNOr(c, 4) = SNOWDPr(c)- DZSNOr(c, 1) - DZSNOr(c, 2) - DZSNOr(c, 3) ;' >> snow.nco
+ echo ' } else if ((SNOWDPr(c)> 0.41d) && (SNOWDPr(c)<= 0.64d)) {' >> snow.nco
+ echo ' SNLSNOr(c) = -5 ;' >> snow.nco
+ echo ' DZSNOr(c, 0) = 0.02d ;' >> snow.nco
+ echo ' DZSNOr(c, 1) = 0.05d ;' >> snow.nco
+ echo ' DZSNOr(c, 2) = 0.11d ;' >> snow.nco
+ echo ' DZSNOr(c, 3) = (SNOWDPr(c)- DZSNOr(c, 0) - DZSNOr(c, 1) - DZSNOr(c, 2))/2.0d ;' >> snow.nco
+ echo ' DZSNOr(c, 4) = DZSNOr(c, 3) ;' >> snow.nco
+ echo ' } else if (SNOWDPr(c)> 0.64d) {' >> snow.nco
+ echo ' SNLSNOr(c) = -5 ;' >> snow.nco
+ echo ' DZSNOr(c, 0) = 0.02d ;' >> snow.nco
+ echo ' DZSNOr(c, 1) = 0.05d ;' >> snow.nco
+ echo ' DZSNOr(c, 2) = 0.11d ;' >> snow.nco
+ echo ' DZSNOr(c, 3) = 0.23d ;' >> snow.nco
+ echo ' DZSNOr(c, 4) = SNOWDPr(c)- DZSNOr(c, 0)- DZSNOr(c, 1)- DZSNOr(c, 2)- DZSNOr(c, 3) ;' >> snow.nco
+ echo ' }' >> snow.nco
+ echo ' ' >> snow.nco
+ echo '// lake points do not get any snow distributed in snowdp2lev.' >> snow.nco
+ echo ' if ( landkind(c) != 3) {' >> snow.nco
+ echo ' for ( *j = 4; j>5+SNLSNOr(c); j--) {' >> snow.nco
+ echo ' ZSNOr(c,j) = ZISNOr(c,j) - DZSNOr(c,j) * 0.5d ;' >> snow.nco
+ echo ' ZISNOr(c,j-1) = ZISNOr(c,j) - DZSNOr(c,j) ;' >> snow.nco
+ echo ' }' >> snow.nco
+ echo ' // j has been decremented to 0' >> snow.nco
+ echo ' // This was taken out of the (shortened) loop to avoid referencing ZISNOr(c,-1)' >> snow.nco
+ echo ' ZSNOr(c,j) = ZISNOr(c,j) - DZSNOr(c,j) * 0.5d ;' >> snow.nco
+ echo ' }' >> snow.nco
+ echo '}' >> snow.nco
+ echo ' ' >> snow.nco
+ echo 'SNLSNO = SNLSNOr;' >> snow.nco
+ echo 'DZSNO = DZSNOr ;' >> snow.nco
+ echo 'ZSNO = ZSNOr ;' >> snow.nco
+ echo 'ZISNO = ZISNOr ;' >> snow.nco
+
+ mv snow.nco ../..
+endif
+
+echo "- - - - - - - - - -"
+echo "analyses2initial.csh":
+
+if (! -e ${kind}.nc) then
+ if (! -e ${kind}_Diag.nc) then
+ if (! -e diagnostics.tar) then
+ if (! -e diagnostics.tar.gz) then
+ echo "starting msrcp at `date`"
+ msrcp mss:$ms_file .
+ endif
+ echo "starting gunzip at `date`"
+# ? skip this and add -z to tar -x below? That would short-circuit some of
+# the failure recovery I've built in, but in this context I can't use it.
+ gunzip diagnostics.tar.gz
+ endif
+ echo "starting tar -x at `date`"
+ tar -x -f diagnostics.tar ${kind}_Diag.nc
+ if ($status == 0) rm diagnostics.tar &
+ endif
+
+ set time = 1
+ while ($time <= $num_times)
+ set out_name = init_analysis_${yrmoday}$hours[$time].nc
+ # Template into which we'll stuff the mean fields
+# Want ensemble average CAM initial file
+ if (-e H$hours[$time]/caminput_1.nc && \
+ -e H$hours[$time]/clminput_1.nc) then
+ cd H$hours[$time]
+ pwd
+ echo cam_$out_name clm_$out_name
+ ncra -o cam_$out_name caminput*
+ else
+ echo "analyses2initial.csh; No H$hours[$time]/caminput* available; exiting"
+ exit
+ endif
+
+ # ncks makes the time/record dimension of the out_file to be the largest
+ # of the sizes of the in_ and out_file, if out_file pre-exists.
+ # Prevent this by extracting one timeslot to a new file.
+ # (This had -x -v copy in my first successful test, but that's redundant(?)
+ # with the ncwa, where'd I'd like to handle all the 'copy' purging.
+ ncks -F -A -d ${dim},${element1} -d time,$time ../${kind}_Diag.nc time_copy_slab.nc
+ if ($status != 0) then
+ echo "timeslot $time not found on ../${kind}_Diag.nc"
+ exit
+ endif
+ # Exclude the copy dimension and variable from new file,
+ # along with mis-dimensioned P0
+ # ncwa will change the rank; use it to remove dimension 'copy'
+ ncwa -x -v P0,CopyMetaData -a ${dim} time_copy_slab.nc avgd_copy_out.nc
+ # Permute the remaining dimensions into CAM; (time, lev, [s]lat, [s]lon)
+ # from DART (time, lat, [s]lon, [s]lev)
+ # Requires 3 calls to handle the 3 (staggered) grids
+ ncpdq -a lev,lat,lon avgd_copy_out.nc re-orderedT.nc
+ ncpdq -a lev,slat,lon re-orderedT.nc re-orderedUS.nc
+ ncpdq -a lev,lat,slon re-orderedUS.nc re-orderedVS.nc
+ # Finally, stuff the contents into the CAM initial file template
+ # -A causes variables to be overwritten if there is a name "conflict",
+ # without querying the user/script.
+ # -x -v $dim removes the *variable* called copy. (On blueice) it didn't work
+ # to try to remove it in the ncwa command.
+ ncks -A -x -v ${dim} re-orderedVS.nc cam_$out_name
+
+ # CLM; ensemble average of the clminput files,
+ ncea -O -o clminput_avg_badsno.nc clminput_*.nc
+ # Fix the snow fields with NCO script based on algorithm in
+ # Cam3/cam3.5/models/lnd/clm2/src/main/snowdp2lev.F90
+ ncap2 -O -S ../../../snow.nco -o clm_$out_name clminput_avg_badsno.nc
+
+ rm time_copy_slab.nc avgd_copy_out.nc re-order* clminput_avg_badsno.nc
+ cd ..
+ @ time++
+ end
+
+endif
+
+echo "- - - - - - - - - -"
+exit
Property changes on: DART/trunk/models/cam/full_experiment/analyses2initial.csh
___________________________________________________________________
Name: svn:executable
+ *
More information about the Dart-dev
mailing list