[cdftools] 42/228: JMM commit a working version of monitor_prod for convenience
Alastair McKinstry
mckinstry at moszumanska.debian.org
Fri Jun 12 08:21:26 UTC 2015
This is an automated email from the git hooks/post-receive script.
mckinstry pushed a commit to branch master
in repository cdftools.
commit 9235902780fed285124dc5d91f70f81dee8e31c3
Author: molines <molines at 1055176f-818a-41d9-83e1-73fbe5b947c5>
Date: Wed May 19 07:53:26 2010 +0000
JMM commit a working version of monitor_prod for convenience
git-svn-id: http://servforge.legi.grenoble-inp.fr/svn/CDFTOOLS/trunk@318 1055176f-818a-41d9-83e1-73fbe5b947c5
---
JOBS/monitor_prod_work.ksh | 691 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 691 insertions(+)
diff --git a/JOBS/monitor_prod_work.ksh b/JOBS/monitor_prod_work.ksh
new file mode 100755
index 0000000..b572e6b
--- /dev/null
+++ b/JOBS/monitor_prod_work.ksh
@@ -0,0 +1,691 @@
+#!/bin/ksh
+set -x
+# This script is intended to be sourced from a main script. Not Stand Alone
+# Basically it runs on the production machine, once the MEAN fields
+# have been computed (monthly, annual) and disposed on the respective
+# CONFIG-CASE-MEAN/YEAR/ directory.
+
+# Each block corresponds to a particular monitoring task. Each block is supposed
+# to be independant from the other (in particular, required file are downloaded
+# via the rapatrie function, which does the job only if necessary.
+
+# The different tasks are performed with the cdftools programs. CDFTOOLS is
+# added to the PATH.
+
+#-------------------------------------------------------------------------------
+# $Rev: 263 $
+# $Date: 2009-08-08 11:25:10 +0200 (Sat, 08 Aug 2009) $
+# $Id: monitor_prod.ksh 263 2009-08-08 09:25:10Z rcli002 $
+#-------------------------------------------------------------------------------
+# define some config dependent variable
+. ./config_def.ksh # can be a link
+# Define some functions to get/put file from/to gaya (can be easily customized)
+
+. ./function_def.ksh # can be a link
+
+#------------------------------------------------------------------------------
+# directory name frequently used:
+#------------------------------------------------------------------------------
+ # on the storage machine : path relative to the root of S-machine
+ MEANY=$CONFIG/${CONFCASE}-MEAN/$YEAR
+ SDIRY=$CONFIG/${CONFCASE}-S/$YEAR
+ DIAGS=${CONFIG}/${CONFCASE}-DIAGS
+ IDIR=$CONFIG/${CONFIG}-I
+ LOCAL_SAVE=${LOCAL_SAVE:=0}
+
+ # on zahir
+ P_CTL=$HOME/RUN_${CONFIG}/${CONFCASE}/CTL
+
+ # check existence of some required directories
+ # ... on gaya
+ chkdirg $DIAGS
+ chkdirg $DIAGS/NC
+
+#------------------------------------------------------------------------------
+# PATH:
+#-----------------------------------------------------------------------------
+ export PATH=$CDFTOOLS/:$PATH
+
+# check if required cdftools are available, exit if missing
+ err=0
+ for cdfprog in cdfeke cdfmean cdfrmsssh cdfstdevw cdficediags cdftransportiz\
+ cdfmhst cdfhflx cdfmoc cdfmaxmoc cdfpsi cdfsigtrp cdfmxl \
+ cdfzonalmean cdfzonalsum cdfzonalout bimgmoy4 bimgcaltrans ; do
+ if [ ! -x $CDFTOOLS/$cdfprog ] ; then
+ err=$(( err + 1 ))
+ echo $cdfprog executable missing. Check your $CDFTOOLS installation
+ fi
+ done
+
+ if [ $err != 0 ] ; then
+ echo " monitoring cannot be performed, sorry !" ; exit 1
+ fi
+#=============================================================================
+# PART I: Derived quantities, to be added to the -MEAN/YEAR directory
+#=============================================================================
+ # check if we have a NATL config or a ORCA config (to be improved ....)
+ atl=$( echo 1 | awk '{ ii=index (config,"NATL") ; print ii }' config=$CONFIG )
+
+# EKE : Eddy Kinetic Energy: Input files gridU, gridV gridU2, gridV2
+#^^^^^^^^^^^^^^^^^^^^^^^^^^
+ if [ $EKE == 1 ] ; then
+ # retrieve U and V ANNUAL mean files and squared mean
+ rapatrie ${CONFCASE}_y${YEAR}_gridU.nc $MEANY ${CONFCASE}_y${YEAR}_gridU.nc
+ rapatrie ${CONFCASE}_y${YEAR}_gridU2.nc $MEANY ${CONFCASE}_y${YEAR}_gridU2.nc
+ rapatrie ${CONFCASE}_y${YEAR}_gridV.nc $MEANY ${CONFCASE}_y${YEAR}_gridV.nc
+ rapatrie ${CONFCASE}_y${YEAR}_gridV2.nc $MEANY ${CONFCASE}_y${YEAR}_gridV2.nc
+
+ # retrieve a T file needed for headers only (EKE is computed on the T-point)
+ rapatrie ${CONFCASE}_y${YEAR}_gridT2.nc $MEANY ${CONFCASE}_y${YEAR}_gridT2.nc
+
+ cdfeke ${CONFCASE}_y${YEAR}_gridU.nc \
+ ${CONFCASE}_y${YEAR}_gridU2.nc \
+ ${CONFCASE}_y${YEAR}_gridV.nc \
+ ${CONFCASE}_y${YEAR}_gridV2.nc \
+ ${CONFCASE}_y${YEAR}_gridT2.nc
+
+ # dispose file on the MEAN directory
+ expatrie eke.nc $MEANY ${CONFCASE}_y${YEAR}_EKE.nc
+ \rm eke.nc
+ fi
+
+# RMS SSH and StdDev W : Input files : gridT, gridT2 gridW, gridW2
+#^^^^^^^^^^^^^^^^^^^^^^^
+ if [ $RMSSSH == 1 ] ; then
+ # RMSSSH :get gridT gridT2
+ rapatrie ${CONFCASE}_y${YEAR}_gridT.nc $MEANY ${CONFCASE}_y${YEAR}_gridT.nc
+ rapatrie ${CONFCASE}_y${YEAR}_gridT2.nc $MEANY ${CONFCASE}_y${YEAR}_gridT2.nc
+ cdfrmsssh ${CONFCASE}_y${YEAR}_gridT.nc ${CONFCASE}_y${YEAR}_gridT2.nc
+
+ # dispose file on the MEAN directory
+ expatrie rms.nc $MEANY ${CONFCASE}_y${YEAR}_RMSSSH.nc
+ \rm rms.nc
+
+ # StdDev W :get gridW and gridW2 files
+ rapatrie ${CONFCASE}_y${YEAR}_gridW.nc $MEANY ${CONFCASE}_y${YEAR}_gridW.nc
+ rapatrie ${CONFCASE}_y${YEAR}_gridW2.nc $MEANY ${CONFCASE}_y${YEAR}_gridW2.nc
+
+ cdfstdevw ${CONFCASE}_y${YEAR}_gridW.nc ${CONFCASE}_y${YEAR}_gridW2.nc
+
+ # dispose file on the MEAN directory
+ expatrie rmsw.nc $MEANY ${CONFCASE}_y${YEAR}_STDEVW.nc
+ \rm rmsw.nc
+ fi
+
+# Barotropic Transport: Input file: gridU, gridV mesh mask
+#^^^^^^^^^^^^^^^^^^^^^
+ if [ $BSF == 1 ] ; then
+ # get gridU gridV files
+ rapatrie ${CONFCASE}_y${YEAR}_gridU.nc $MEANY ${CONFCASE}_y${YEAR}_gridU.nc
+ rapatrie ${CONFCASE}_y${YEAR}_gridV.nc $MEANY ${CONFCASE}_y${YEAR}_gridV.nc
+
+ # get mesh mask files
+ rapatrie ${MESH_MASK_ID}_byte_mask.nc $IDIR mask.nc
+ rapatrie ${MESH_MASK_ID}_mesh_hgr.nc $IDIR mesh_hgr.nc
+ rapatrie ${MESH_MASK_ID}_mesh_zgr.nc $IDIR mesh_zgr.nc
+
+ cdfpsi ${CONFCASE}_y${YEAR}_gridU.nc ${CONFCASE}_y${YEAR}_gridV.nc
+
+ # dispose and rename on the MEAN directory
+ expatrie psi.nc $MEANY ${CONFCASE}_y${YEAR}_PSI.nc
+ fi
+
+# MOC Meridional Overturning Circulation: Input file: gridV, mesh mask, mask_glo
+#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ if [ $MOC == 1 ] ; then
+ # get gridV files
+ rapatrie ${CONFCASE}_y${YEAR}_gridV.nc $MEANY ${CONFCASE}_y${YEAR}_gridV.nc
+
+ # get mesh mask files + new_maskglo
+ rapatrie ${MESH_MASK_ID}_byte_mask.nc $IDIR mask.nc
+ rapatrie ${MESH_MASK_ID}_mesh_hgr.nc $IDIR mesh_hgr.nc
+ rapatrie ${MESH_MASK_ID}_mesh_zgr.nc $IDIR mesh_zgr.nc
+ if (( $atl == 0 )) ; then rapatrie new_maskglo.nc $IDIR new_maskglo.nc ; fi
+
+ cdfmoc ${CONFCASE}_y${YEAR}_gridV.nc
+
+ # dispose on gaya MEAN/YEAR directory
+ expatrie moc.nc $MEANY ${CONFCASE}_y${YEAR}_MOC.nc
+ fi
+
+# Mixed Layer Diagnostics : Input file : gridT for month 03 and 09 mesh_hgr, mesh_zgr
+#^^^^^^^^^^^^^^^^^^^^^^^^
+ if [ $MXL == 1 ] ; then
+ # get mesh mask files
+ rapatrie ${MESH_MASK_ID}_mesh_hgr.nc $IDIR mesh_hgr.nc
+ rapatrie ${MESH_MASK_ID}_mesh_zgr.nc $IDIR mesh_zgr.nc
+
+ for m in 3 9 ; do
+ f=${CONFCASE}_y${YEAR}m0${m}_gridT.nc
+ g=$(echo $f | sed -e 's/gridT/MXL/')
+
+ rapatrie $f $MEANY $f
+
+ cdfmxl $f
+
+ # dispose on gaya, MEAN/YEAR directory
+ expatrie mxl.nc $MEANY $g
+ done
+ fi
+
+# Large scale potential vorticity for m03 m09: input file : gridT, and mesh_mask
+#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ if [ $LSPV == 1 ] ; then
+ # get mesh mask files
+ rapatrie ${MESH_MASK_ID}_byte_mask.nc $IDIR mask.nc
+ rapatrie ${MESH_MASK_ID}_mesh_hgr.nc $IDIR mesh_hgr.nc
+ rapatrie ${MESH_MASK_ID}_mesh_zgr.nc $IDIR mesh_zgr.nc
+
+ for m in 3 9 ; do
+ f=${CONFCASE}_y${YEAR}m0${m}_gridT.nc
+ g=$(echo $f | sed -e 's/gridT/LSPV/')
+
+ rapatrie $f $MEANY $f
+ # compute LSPV
+ cdflspv $f
+ # dispose on gaya, MEAN/YEAR directory
+ expatrie lspv.nc $MEANY $g
+ done
+ fi
+
+#=============================================================================
+# PART II: Time series: compute some integral quantities relevant for monitor
+# the ocean variability, and the behaviour of the on going run.
+# Output is basically a small ASCII file, from which a matlab
+# suitable input file (.mtl) is derived.
+#=============================================================================
+# Global MEANS: T S SSH Input files: gridT , mesh_hgr, mesh_zgr, mask
+#^^^^^^^^^^^^^^
+ if [ $TSMEAN == 1 ] ; then
+ # get mesh mask files
+ rapatrie ${MESH_MASK_ID}_byte_mask.nc $IDIR mask.nc
+ rapatrie ${MESH_MASK_ID}_mesh_hgr.nc $IDIR mesh_hgr.nc
+ rapatrie ${MESH_MASK_ID}_mesh_zgr.nc $IDIR mesh_zgr.nc
+
+ # get gridT files
+ rapatrie ${CONFCASE}_y${YEAR}_gridT.nc $MEANY ${CONFCASE}_y${YEAR}_gridT.nc
+
+ # output file name ascii and nc
+ fsshmean=${CONFCASE}_y${YEAR}_SSHMEAN.txt ; fsshmean_nc=${CONFCASE}_y${YEAR}_SSHMEAN.nc
+ ftmean=${CONFCASE}_y${YEAR}_TMEAN.txt ; ftmean_nc=${CONFCASE}_y${YEAR}_TMEAN.nc
+ fsmean=${CONFCASE}_y${YEAR}_SMEAN.txt ; fsmean_nc=${CONFCASE}_y${YEAR}_SMEAN.nc
+ # set header on the output file (ASCII)
+ echo $YEAR > $fsshmean ; echo $YEAR > $ftmean ; echo $YEAR > $fsmean
+
+ # 3D means
+ cdfmean ${CONFCASE}_y${YEAR}_gridT.nc sossheig T >> $fsshmean ; mv cdfmean.nc $fsshmean_nc
+ cdfmean ${CONFCASE}_y${YEAR}_gridT.nc votemper T >> $ftmean ; mv cdfmean.nc $ftmean_nc
+ cdfmean ${CONFCASE}_y${YEAR}_gridT.nc vosaline T >> $fsmean ; mv cdfmean.nc $fsmean_nc
+
+ # dispose ASCII file in the -DIAGS directory
+ expatrie $fsshmean $DIAGS $fsshmean
+ expatrie $ftmean $DIAGS $ftmean
+ expatrie $fsmean $DIAGS $fsmean
+
+ # dispose ASCII file in the -DIAGS/NC directory
+ expatrie $fsshmean_nc $DIAGS/NC $fsshmean_nc
+ expatrie $ftmean_nc $DIAGS/NC $ftmean_nc
+ expatrie $fsmean_nc $DIAGS/NC $fsmean_nc
+
+ if [ $(chkfile $DIAGS/LEVITUS_y0000_TMEAN.txt ) == absent ] ; then
+ # first time : Create header with Levitus equivalent
+ # requires LEVITUS 'same' diags (from the ANNUAL mean )
+ # !!! NEW !!!
+ # get non-masked levitus then mask it with the same mask as the model
+ levitus=${TSCLIM:=Levitus_p2.1}_ANNUAL_TS_$( echo $CONFIG | tr 'A-Z' 'a-z').nc
+ rapatrie $levitus $IDIR $levitus
+ cdfmltmask $levitus mask.nc votemper T # votemper --> $levitus_masked
+ cdfmltmask ${levitus}_masked mask.nc vosaline T # vosaline --> $levitus_masked_masked
+ mv ${levitus}_masked_masked ${TSCLIM:=Levitus_p2.1}_ANNUAL_TS_masked_$( echo $CONFIG | tr 'A-Z' 'a-z').nc # simplify name
+ levitus=${TSCLIM:=Levitus_p2.1}_ANNUAL_TS_masked_$( echo $CONFIG | tr 'A-Z' 'a-z').nc # will be ready for GIB DIAG
+ #
+ cdfmean $levitus votemper T > LEVITUS_y0000_TMEAN.txt ; mv cdfmean.nc LEVITUS_y0000_TMEAN.nc
+ cdfmean $levitus vosaline T > LEVITUS_y0000_SMEAN.txt ; mv cdfmean.nc LEVITUS_y0000_SMEAN.nc
+
+ expatrie LEVITUS_y0000_TMEAN.txt $DIAGS LEVITUS_y0000_TMEAN.txt
+ expatrie LEVITUS_y0000_SMEAN.txt $DIAGS LEVITUS_y0000_SMEAN.txt
+ expatrie LEVITUS_y0000_TMEAN.nc $DIAGS/NC LEVITUS_y0000_TMEAN.nc
+ expatrie LEVITUS_y0000_SMEAN.nc $DIAGS/NC LEVITUS_y0000_SMEAN.nc
+ fi
+ fi
+
+# Ice Volume area and extent for m02 m03 m08 m09: input file : icemod, and mesh_mask
+#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ if [ $ICE == 1 ] ; then
+ # get icemod file for the month 02 03 and 08 09
+ rapatrie ${CONFCASE}_y${YEAR}m02_icemod.nc $MEANY ${CONFCASE}_y${YEAR}m02_icemod.nc
+ rapatrie ${CONFCASE}_y${YEAR}m03_icemod.nc $MEANY ${CONFCASE}_y${YEAR}m03_icemod.nc
+ rapatrie ${CONFCASE}_y${YEAR}m08_icemod.nc $MEANY ${CONFCASE}_y${YEAR}m08_icemod.nc
+ rapatrie ${CONFCASE}_y${YEAR}m09_icemod.nc $MEANY ${CONFCASE}_y${YEAR}m09_icemod.nc
+
+ # get mesh mask files
+ rapatrie ${MESH_MASK_ID}_byte_mask.nc $IDIR mask.nc
+ rapatrie ${MESH_MASK_ID}_mesh_hgr.nc $IDIR mesh_hgr.nc
+ rapatrie ${MESH_MASK_ID}_mesh_zgr.nc $IDIR mesh_zgr.nc
+
+ # Ascii/nc output file:
+ fice=${CONFCASE}_y${YEAR}_ice.txt
+ fice_nc=${CONFCASE}_y${YEAR}_ice.nc
+
+ echo '###' $YEAR 02 > $fice
+ cdficediags ${CONFCASE}_y${YEAR}m02_icemod.nc cdfout >> $fice ; mv icediags.nc $fice_nc
+ echo '###' $YEAR 03 >> $fice
+ cdficediags ${CONFCASE}_y${YEAR}m03_icemod.nc cdfout >> $fice ; ncks -A icediags.nc $fice_nc
+ echo '###' $YEAR 08 >> $fice
+ cdficediags ${CONFCASE}_y${YEAR}m08_icemod.nc cdfout >> $fice ; ncks -A icediags.nc $fice_nc
+ echo '###' $YEAR 09 >> $fice
+ cdficediags ${CONFCASE}_y${YEAR}m09_icemod.nc cdfout >> $fice ; ncks -A icediags.nc $fice_nc
+
+ expatrie $fice $DIAGS $fice
+ expatrie $fice_nc $DIAGS/NC $fice_nc
+ fi
+
+# Ice Volume area and extent for all months: input file : icemod, and mesh_mask
+#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ if [ $ICEMONTH == 1 ] ; then
+ # get icemod files
+ m=1
+ while (( $m <= 12 )) ; do
+ mm=$( printf "%02d" $m )
+ rapatrie ${CONFCASE}_y${YEAR}m${mm}_icemod.nc $MEANY ${CONFCASE}_y${YEAR}m${mm}_icemod.nc
+ m=$(( m + 1 ))
+ done
+
+ # get mesh mask files
+ rapatrie ${MESH_MASK_ID}_byte_mask.nc $IDIR mask.nc
+ rapatrie ${MESH_MASK_ID}_mesh_hgr.nc $IDIR mesh_hgr.nc
+ rapatrie ${MESH_MASK_ID}_mesh_zgr.nc $IDIR mesh_zgr.nc
+
+ # Ascii/nc output file:
+ fice=${CONFCASE}_y${YEAR}_icemonth.txt
+ fice_nc=${CONFCASE}_y${YEAR}_icemonth.nc
+
+ m=1
+ while (( $m <= 12 )) ; do
+ mm=$( printf "%02d" $m )
+ case $mm in
+ 01) echo '###' $YEAR $mm > $fice ;;
+ *) echo '###' $YEAR $mm >> $fice ;;
+ esac
+ cdficediags ${CONFCASE}_y${YEAR}m${mm}_icemod.nc cdfout >> $fice ; ncks -A icediags.nc $fice_nc
+ m=$(( m + 1 ))
+ done
+
+ expatrie $fice $DIAGS $fice
+ expatrie $fice_nc $DIAGS/NC $fice_nc
+
+ fi
+
+# Vertical T-S profiles off the coast of Portugal for Gib monitoring: input file: gridT, mesh_mask
+#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ if [ $GIB == 1 ] ; then
+ # get gridT file
+ rapatrie ${CONFCASE}_y${YEAR}_gridT.nc $MEANY ${CONFCASE}_y${YEAR}_gridT.nc
+
+ # get mesh mask files
+ rapatrie ${MESH_MASK_ID}_byte_mask.nc $IDIR mask.nc
+ rapatrie ${MESH_MASK_ID}_mesh_hgr.nc $IDIR mesh_hgr.nc
+ rapatrie ${MESH_MASK_ID}_mesh_zgr.nc $IDIR mesh_zgr.nc
+
+ # Ascii output files:
+ ftgib=${CONFCASE}_y${YEAR}_TGIB.txt
+ fsgib=${CONFCASE}_y${YEAR}_SGIB.txt
+ # nc output files
+ ftgib_nc=${CONFCASE}_y${YEAR}_TGIB.nc
+ fsgib_nc=${CONFCASE}_y${YEAR}_SGIB.nc
+
+ echo $YEAR > $ftgib
+ cdfmean ${CONFCASE}_y${YEAR}_gridT.nc votemper T $GIBWIN 0 0 >> $ftgib ; mv cdfmean.nc $ftgib_nc
+ echo $YEAR > $fsgib
+ cdfmean ${CONFCASE}_y${YEAR}_gridT.nc vosaline T $GIBWIN 0 0 >> $fsgib ; mv cdfmean.nc $fsgib_nc
+
+ expatrie $ftgib $DIAGS $ftgib
+ expatrie $fsgib $DIAGS $fsgib
+ expatrie $ftgib_nc $DIAGS/NC $ftgib_nc
+ expatrie $fsgib_nc $DIAGS/NC $fsgib_nc
+
+ if [ $(chkfile $DIAGS/LEVITUS_y0000_TGIB.txt ) == absent ] ; then
+ # first time : Create header with Levitus equivalent
+ # requires LEVITUS 'same' diags (from the ANNUAL mean )
+ levitus=${TSCLIM:=Levitus_p2.1}_ANNUAL_TS_masked_$( echo $CONFIG | tr 'A-Z' 'a-z').nc
+ if [ ! -f $levitus ] ; then
+ # need to build a masked LEvitus with proper mask
+ levitus=${TSCLIM:=Levitus_p2.1}_ANNUAL_TS_$( echo $CONFIG | tr 'A-Z' 'a-z').nc
+ rapatrie $levitus $IDIR $levitus
+ cdfmltmask $levitus mask.nc votemper T # votemper --> $levitus_masked
+ cdfmltmask ${levitus}_masked mask.nc vosaline T # vosaline --> $levitus_masked_masked
+ mv ${levitus}_masked_masked ${TSCLIM:=Levitus_p2.1}_ANNUAL_TS_masked_$( echo $CONFIG | tr 'A-Z' 'a-z').nc # simplify name
+ levitus=${TSCLIM:=Levitus_p2.1}_ANNUAL_TS_masked_$( echo $CONFIG | tr 'A-Z' 'a-z').nc # will be ready for GIB DIAG
+ fi
+ cdfmean $levitus votemper T $GIBWIN 0 0 > LEVITUS_y0000_TGIB.txt ; mv cdfmean.nc LEVITUS_y0000_TGIB.nc
+ cdfmean $levitus vosaline T $GIBWIN 0 0 > LEVITUS_y0000_SGIB.txt ; mv cdfmean.nc LEVITUS_y0000_SGIB.nc
+ expatrie LEVITUS_y0000_TGIB.txt $DIAGS LEVITUS_y0000_TGIB.txt
+ expatrie LEVITUS_y0000_SGIB.txt $DIAGS LEVITUS_y0000_SGIB.txt
+ expatrie LEVITUS_y0000_TGIB.nc $DIAGS/NC LEVITUS_y0000_TGIB.nc
+ expatrie LEVITUS_y0000_SGIB.nc $DIAGS/NC LEVITUS_y0000_SGIB.nc
+ fi
+ fi
+
+# El nino indexes : Input files : monthly gridT, mesh mask
+#^^^^^^^^^^^^^^^^^^
+ if [ $ELNINO == 1 ] ; then
+ # get mesh mask files
+ rapatrie ${MESH_MASK_ID}_byte_mask.nc $IDIR mask.nc
+ rapatrie ${MESH_MASK_ID}_mesh_hgr.nc $IDIR mesh_hgr.nc
+ rapatrie ${MESH_MASK_ID}_mesh_zgr.nc $IDIR mesh_zgr.nc
+
+ # Ascii outputfile
+ fnino=${CONFCASE}_y${YEAR}_NINO.txt
+ # nc outputfile
+ fnino12_nc=${CONFCASE}_y${YEAR}_NINO12.nc
+ fnino3_nc=${CONFCASE}_y${YEAR}_NINO3.nc
+ fnino4_nc=${CONFCASE}_y${YEAR}_NINO4.nc
+ fnino34_nc=${CONFCASE}_y${YEAR}_NINO34.nc
+
+ # get monthly mean gridT files and compute mean SST on each NINO box
+ for m in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
+ mm=$(printf "%02d" $m)
+ f=${CONFCASE}_y${YEAR}m${mm}_gridT.nc
+
+ rapatrie $f $MEANY $f
+
+ # header
+ printf "%04d %02d" $YEAR $m >> $fnino
+
+ # nino 1+2 [ -90 W -- -80 W, -10 S -- 10 N ]
+ cdfmean $f votemper T $NINO12 1 1 | tail -1 | awk '{ printf " %8.5f 0.00", $6 }' >> $fnino ; ncks -A cdfmean.nc $fnino12_nc
+ # nino 3 [ -150 W -- -90 W, -5 S -- 5 N ]
+ cdfmean $f votemper T $NINO3 1 1 | tail -1 | awk '{ printf " %8.5f 0.00", $6 }' >> $fnino ; ncks -A cdfmean.nc $fnino3_nc
+ # nino 4 [ -200 W -- -150 W, -5 S -- 5 N ]
+ cdfmean $f votemper T $NINO4 1 1 | tail -1 | awk '{ printf " %8.5f 0.00", $6 }' >> $fnino ; ncks -A cdfmean.nc $fnino4_nc
+ # nino 3.4 [ -170 W -- -120 W, -% S -- % N ]
+ cdfmean $f votemper T $NINO34 1 1 | tail -1 | awk '{ printf " %8.5f 0.00\n", $6 }' >> $fnino ; ncks -A cdfmean.nc $fnino34_nc
+
+ done
+
+ expatrie $fnino $DIAGS $fnino
+ expatrie $fnino12_nc $DIAGS/NC $fnino12_nc
+ expatrie $fnino3_nc $DIAGS/NC $fnino3_nc
+ expatrie $fnino4_nc $DIAGS/NC $fnino4_nc
+ expatrie $fnino34_nc $DIAGS/NC $fnino34_nc
+ fi
+############################JMM#################################### up to here
+# Transport: Input files: VT, gridU, gridV, mesh mask, section.dat
+#^^^^^^^^^^^
+ if [ $TRP == 1 ] ; then
+ # section.dat describes the position (I,J) of the sections to monitor
+ cp $P_CTL/section.dat .
+
+ # get VT , gridU, gridV files
+ rapatrie ${CONFCASE}_y${YEAR}_VT.nc $MEANY ${CONFCASE}_y${YEAR}_VT.nc
+ rapatrie ${CONFCASE}_y${YEAR}_gridU.nc $MEANY ${CONFCASE}_y${YEAR}_gridU.nc
+ rapatrie ${CONFCASE}_y${YEAR}_gridV.nc $MEANY ${CONFCASE}_y${YEAR}_gridV.nc
+
+ # get mesh mask files
+ rapatrie ${MESH_MASK_ID}_byte_mask.nc $IDIR mask.nc
+ rapatrie ${MESH_MASK_ID}_mesh_hgr.nc $IDIR mesh_hgr.nc
+ rapatrie ${MESH_MASK_ID}_mesh_zgr.nc $IDIR mesh_zgr.nc
+
+ # Ascii output file:
+ fsection=${CONFCASE}_y${YEAR}_section_monitor.txt
+
+ echo $YEAR > $fsection
+
+ cdftransportiz ${CONFCASE}_y${YEAR}_VT.nc \
+ ${CONFCASE}_y${YEAR}_gridU.nc \
+ ${CONFCASE}_y${YEAR}_gridV.nc < section.dat >> $fsection
+
+ # eliminate garbage from txt file ...
+ grep -v Give $fsection | grep -v level | grep -v IMAX | grep -v FROM > tmp
+ mv -f tmp $fsection
+
+ expatrie $fsection $DIAGS $fsection
+ fi
+
+# Heat and Salt Meridional Transport : Input files : VT, mesh mask, new_maskglo
+#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ if [ $MHT == 1 ] ; then
+# (a) From advection:
+#--------------------
+ # get VT files
+ rapatrie ${CONFCASE}_y${YEAR}_VT.nc $MEANY ${CONFCASE}_y${YEAR}_VT.nc
+
+ # get mesh mask files + new_maskglo
+ rapatrie ${MESH_MASK_ID}_byte_mask.nc $IDIR mask.nc
+ rapatrie ${MESH_MASK_ID}_mesh_hgr.nc $IDIR mesh_hgr.nc
+ rapatrie ${MESH_MASK_ID}_mesh_zgr.nc $IDIR mesh_zgr.nc
+ if (( $atl == 0 )) ; then rapatrie new_maskglo.nc $IDIR new_maskglo.nc ; fi
+
+ # Ascii output file:
+ fheat=${CONFCASE}_y${YEAR}_heattrp.dat
+ fsalt=${CONFCASE}_y${YEAR}_salttrp.dat
+
+ cdfmhst ${CONFCASE}_y${YEAR}_VT.nc
+
+ expatrie zonal_heat_trp.dat $DIAGS ${CONFCASE}_y${YEAR}_heattrp.dat
+ expatrie zonal_salt_trp.dat $DIAGS ${CONFCASE}_y${YEAR}_salttrp.dat
+
+ # needed below with the correct name
+ cp zonal_heat_trp.dat ${CONFCASE}_y${YEAR}_heattrp.dat
+
+# (b) from Surface Heat fluxes
+#-----------------------------
+ rapatrie ${CONFCASE}_y${YEAR}_gridT.nc $MEANY ${CONFCASE}_y${YEAR}_gridT.nc
+ cdfhflx ${CONFCASE}_y${YEAR}_gridT.nc
+
+ expatrie hflx.out $DIAGS ${CONFCASE}_y${YEAR}_hflx.dat
+ fi
+
+
+# MAX and MIN of MOC: requires that MOC files already exists
+#^^^^^^^^^^^^^^^^^^^^
+ if [ $MAXMOC == 1 ] ; then
+ f=moc.nc
+ rapatrie ${CONFCASE}_y${YEAR}_MOC.nc $MEANY $f
+
+ # Ascii output file
+ fmaxmoc=${CONFCASE}_y${YEAR}_minmaxmoc.txt
+ echo $YEAR > $fmaxmoc
+ fmaxmoc40=${CONFIG}-${CASE}_y${YEAR}_maxmoc40.txt
+ echo $YEAR > $fmaxmoc40
+
+ if (( atl == 0 )) ; then
+ # GLO
+ printf "%s" 'Glo ' >> $fmaxmoc ; cdfmaxmoc $f glo 20 60 500 2000 | grep Maximum >> $fmaxmoc
+ printf "%s" 'Glo ' >> $fmaxmoc ; cdfmaxmoc $f glo -40 30 2000 5500 | grep Minimum >> $fmaxmoc
+ # ATL
+ printf "%s" 'Atl ' >> $fmaxmoc ; cdfmaxmoc $f atl 0 60 500 2000 | grep Maximum >> $fmaxmoc
+ printf "%s" 'Atl ' >> $fmaxmoc ; cdfmaxmoc $f atl -20 40 2000 5500 | grep Minimum >> $fmaxmoc
+ #INP
+ printf "%s" 'Inp ' >> $fmaxmoc ; cdfmaxmoc $f inp 15 50 100 1000 | grep Minimum >> $fmaxmoc
+ printf "%s" 'Inp ' >> $fmaxmoc ; cdfmaxmoc $f inp -30 20 1000 5500 | grep Minimum >> $fmaxmoc
+ #AUS
+ printf "%s" 'Aus ' >> $fmaxmoc ; cdfmaxmoc $f glo -70 0 0 2000 | grep Maximum >> $fmaxmoc
+ printf "%s" 'Aus ' >> $fmaxmoc ; cdfmaxmoc $f glo -70 0 2000 5500 | grep Minimum >> $fmaxmoc
+
+ expatrie $fmaxmoc $DIAGS $fmaxmoc
+
+ # Max and Min of MOC at some specific latitudes
+ # GLO MAX at 40 N and 30S
+ printf "%s" 'Glo ' >> $fmaxmoc40 ; cdfmaxmoc $f glo 40 40 500 2000 | grep Maximum >> $fmaxmoc40
+ printf "%s" 'Glo ' >> $fmaxmoc40 ; cdfmaxmoc $f glo -30 -30 500 5500 | grep Maximum >> $fmaxmoc40
+ # ATL MAX at 40N and 30S
+ printf "%s" 'Atl ' >> $fmaxmoc40 ; cdfmaxmoc $f atl 40 40 500 2000 | grep Maximum >> $fmaxmoc40
+ printf "%s" 'Atl ' >> $fmaxmoc40 ; cdfmaxmoc $f atl -30 -30 500 5000 | grep Maximum >> $fmaxmoc40
+ #INP Min at 30 S
+ printf "%s" 'Inp ' >> $fmaxmoc40 ; cdfmaxmoc $f inp -30 -30 1000 5500 | grep Minimum >> $fmaxmoc40
+ #AUS MAX at 50 S
+ printf "%s" 'Aus ' >> $fmaxmoc40 ; cdfmaxmoc $f glo -50 -50 0 2000 | grep Maximum >> $fmaxmoc40
+
+ expatrie $fmaxmoc40 $DIAGS $fmaxmoc40
+
+ else # NATL configuration
+ # GLO
+ printf "%s" 'Glo ' >> $fmaxmoc ; cdfmaxmoc $f glo 20 60 500 2000 | grep Maximum >> $fmaxmoc
+ printf "%s" 'Glo ' >> $fmaxmoc ; cdfmaxmoc $f glo -40 30 2000 5500 | grep Minimum >> $fmaxmoc
+ expatrie $fmaxmoc $DIAGS $fmaxmoc
+
+ # Max and Min of MOC at some specific latitudes
+ # GLO MAX at 40 N and 30S
+ printf "%s" 'Glo ' >> $fmaxmoc40 ; cdfmaxmoc $f glo 40 40 500 2000 | grep Maximum >> $fmaxmoc40
+ printf "%s" 'Glo ' >> $fmaxmoc40 ; cdfmaxmoc $f glo -15 -15 500 5500 | grep Maximum >> $fmaxmoc40
+
+ expatrie $fmaxmoc40 $DIAGS $fmaxmoc40
+
+ # clean for next year
+ \rm moc.nc
+ fi
+ fi
+
+
+# DCT :Density Class transport: Input files : gridT, gridU gridV, mesh mask, dens_section.dat
+#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ if [ $DCT == 1 ] ; then
+ # dens_section.dat describe the sections (either zonal or meridional) where the DCT is computed
+ cp $P_CTL/dens_section.dat .
+
+ # get mesh mask files
+ rapatrie ${MESH_MASK_ID}_byte_mask.nc $IDIR mask.nc
+ rapatrie ${MESH_MASK_ID}_mesh_hgr.nc $IDIR mesh_hgr.nc
+ rapatrie ${MESH_MASK_ID}_mesh_zgr.nc $IDIR mesh_zgr.nc
+
+ # Required post_processing script: DCT are computed on monthly means, then average is performed
+ # for annual values. This process is still done through temporary bimg/dimg files (remnant of the
+ # old Clipper times). By the way, 2 bimgtools are required: bimgmoy4 and bimgcaltrans
+ # In-lining of this script may be confusing. I leave it as an external module.
+ cp $CDFTOOLS/JOBS/trpsig_postproc.ksh ./
+
+ # due to the large amount of files that are produced by this diags, we prefer to keep them
+ # on a separate directory
+ chkdirg ${CONFIG}/${CONFCASE}-TRPSIG/
+ chkdirg ${CONFIG}/${CONFCASE}-TRPSIG/$YEAR/
+ chkdirg $DIAGS/$YEAR/
+ chkdirg $DIAGS/TRPSIG/
+
+ # also need temporary directories in the actual tmpdir:
+ chkdir ${CONFIG}
+ chkdir ${CONFIG}/${CONFCASE}-TRPSIG
+ chkdir ${CONFIG}/${CONFCASE}-TRPSIG/$YEAR/
+
+ TRPSIGY=${CONFIG}/${CONFCASE}-TRPSIG/$YEAR/
+
+ for m in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
+ mm=$(printf "%02d" $m)
+ tfich=${CONFCASE}_y${YEAR}m${mm}_gridT.nc
+ ufich=$(echo $tfich | sed -e 's/gridT/gridU/' )
+ vfich=$(echo $tfich | sed -e 's/gridT/gridV/' )
+
+ #get files on gaya
+ rapatrie $tfich $MEANY $tfich
+ rapatrie $ufich $MEANY $ufich
+ rapatrie $vfich $MEANY $vfich
+
+ #retrieve tag time from file name
+ tag=$(echo $tfich | sed -e "s/${CONFCASE}_//" -e 's/_gridT.nc//')
+
+ echo $tag > ${CONFCASE}_y${tag}_trpsig_monitor.lst
+
+ cdfsigtrp $tfich $ufich $vfich 21 30 180 -bimg -print >> ${CONFCASE}_y${tag}_trpsig_monitor.lst
+
+ # save the monthly log file on gaya for an (improbable) eventual post processing ...
+# expatrie ${CONFCASE}_y${tag}_trpsig_monitor.lst $TRPSIGY ${CONFCASE}_y${tag}_trpsig_monitor.lst
+ # and create a mirror on the local tmpdir
+ mv ${CONFCASE}_y${tag}_trpsig_monitor.lst $TRPSIGY
+
+ # Idem : save temporary bimg files on gaya and create local mirror
+ for b in *bimg ; do
+ mv $b ${CONFCASE}_y${tag}_$b
+# expatrie ${CONFCASE}_y${tag}_$b $TRPSIGY ${CONFCASE}_y${tag}_$b
+ mv ${CONFCASE}_y${tag}_$b $TRPSIGY
+ done
+
+ # Idem: for txt files
+ mv trpsig.txt ${CONFCASE}_y${tag}_trpsig.txt
+# expatrie ${CONFCASE}_y${tag}_trpsig.txt $TRPSIGY ${CONFCASE}_y${tag}_trpsig.txt
+ mv ${CONFCASE}_y${tag}_trpsig.txt $TRPSIGY
+
+ # erase useless files ( monthly averages ) Keep tfich which can be used for MXL
+ \rm *.bimg $ufich $vfich
+
+ # end of month loop
+ done
+
+ # Launch post processing ( by itself a complex script ...)
+ # This script retrieve CONFIG name and CASE from the directory name where it runs...
+ cd ${CONFIG}/${CONFCASE}-TRPSIG
+
+ . $TMPDIR/trpsig_postproc.ksh
+
+ cd $TMPDIR
+
+ # save results on gaya ( as many files as sections in dens_section.dat)
+ for f in ${CONFCASE}_y*_trpsig.txt ; do
+ expatrie $f $DIAGS/TRPSIG/ $f
+ done
+
+ # return to tmpdir
+ cd $TMPDIR
+ # Erase the TRPSIG tree for this current year
+ \rm -r ${CONFIG} \rm ${CONFCASE}_y*_trpsig.txt *.mtl
+ fi
+
+# TRACER DIAGS (31/12 of each year) : Input files : ptrcT, mesh mask
+#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ if [ $TRACER == 1 ] ; then
+ # get mesh mask files
+ rapatrie ${MESH_MASK_ID}_byte_mask.nc $IDIR mask.nc
+ rapatrie ${MESH_MASK_ID}_mesh_hgr.nc $IDIR mesh_hgr.nc
+ rapatrie ${MESH_MASK_ID}_mesh_zgr.nc $IDIR mesh_zgr.nc
+ if (( $atl == 0 )) ; then rapatrie new_maskglo.nc $IDIR new_maskglo.nc ; fi
+
+ # get tracer file from gaya: note that this is from -S dir (5 day average ... to discuss ...)
+ rapatrie ${CONFCASE}_y${YEAR}m12d31_ptrcT.nc $SDIRY ${CONFCASE}_y${YEAR}m12d31_ptrcT.nc
+
+ # Ascii output file:
+ ftrc=${CONFCASE}_y${YEAR}_TRCmean.dat
+
+ # Number of mol in the ocean ...
+ printf "%04d " $YEAR > $ftrc
+
+ # CFC11
+ \rm -f tmp1
+ cdfmean ${CONFCASE}_y${YEAR}m12d31_ptrcT.nc invcfc T > tmp1
+ area=$(cat tmp1 | grep -e 'Mean value at level' | awk ' {print $12}')
+ mean=$(cat tmp1 | grep -e 'Mean value over the ocean' | awk ' {print $6}')
+ total=$(echo $mean $area | awk '{print $1 * $2 }' )
+ printf "%s " $total >> $ftrc
+
+ # B-C14
+ \rm -f tmp1
+ cdfmean ${CONFCASE}_y${YEAR}m12d31_ptrcT.nc invc14 T > tmp1
+ area=$(cat tmp1 | grep -e 'Mean value at level' | awk ' {print $12}')
+ mean=$(cat tmp1 | grep -e 'Mean value over the ocean' | awk ' {print $6}')
+ total=$(echo $mean $area | awk '{print $1 * $2 }' )
+ printf "%s \n" $total >> $ftrc
+
+ expatrie $ftrc $DIAGS $ftrc
+
+ # zonal integral of inventories
+ cdfzonalsum ${CONFCASE}_y${YEAR}m12d31_ptrcT.nc T
+
+ # zonal means
+ cdfzonalmean ${CONFCASE}_y${YEAR}m12d31_ptrcT.nc T
+
+ # ncks is required on the prod machine ... !! not standard !!
+ # it is used to take only the interesting variables from the results
+ ncks -F -d deptht,1,1 -v zocfc11_glo,zobc14_glo,nav_lon,nav_lat zonalmean.nc zonalsurf.nc
+
+ # put in ascii format the 1D profiles
+ cdfzonalout zonalmean.nc > zonalmean.dat
+ cdfzonalout zonalsum.nc > zonalsum.dat
+ cdfzonalout zonalsurf.nc > zonalsurf.dat
+
+ expatrie zonalmean.nc $MEANY ${CONFCASE}_y${YEAR}_TRCzonalmean.nc
+ expatrie zonalsum.nc $MEANY ${CONFCASE}_y${YEAR}_TRCzonalsum.nc
+
+ expatrie zonalmean.dat $DIAGS ${CONFCASE}_y${YEAR}_TRCzonalmean.dat
+ expatrie zonalsum.dat $DIAGS ${CONFCASE}_y${YEAR}_TRCzonalsum.dat
+ expatrie zonalsurf.dat $DIAGS ${CONFCASE}_y${YEAR}_TRCzonalsurf.dat
+ \rm zonalsurf.nc
+
+ fi
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/cdftools.git
More information about the debian-science-commits
mailing list