Blame | Last modification | View Log | Download | RSS feed
#!/bin/csh# -------------------------------------------------------------------# Set some variables and paths# -------------------------------------------------------------------# Jump to specified stepset step="help"set param1=set param2=set param3=if ( $#argv == 1 ) thenset step=$1endifif ( $#argv == 2 ) thenset step=$1set param1=$2endifif ( $#argv == 3 ) thenset step=$1set param1=$2set param2=$3endifif ( $#argv == 4 ) thenset step=$1set param1=$2set param2=$3set param3=$4endifset file1=${param1}set file2=${param2}# Set base directory for programmesset bdir=${DYN_TOOLS}/inversion/# Set name of the parameter file, coastline file and sample directoryset parafile="${PWD}/inversion.param"set coastfile="${bdir}/prep/coastline.dat"set sampledir="/net/bio/atmosdyn/erainterim/cdf/2006/01/"# ---------------------------------------------------------------------------# Installation, help and sample# ---------------------------------------------------------------------------# Get parameter file, if not yet availableif ( ! -f ${parafile} ) thencp ${bdir}/inversion.param .endif# Extract parameters from parameter fileset progex=${bdir}/inversion.perlset date=`${progex} ${parafile} date | awk '{ print $2}'`set nofiter=`${progex} ${parafile} n_of_iteration | awk '{ print $2}'`set save=`${progex} ${parafile} save_iteration | awk '{ print $2}'`set idir=`${progex} ${parafile} inp_dir | awk '{ print $2}'`set rdir=`${progex} ${parafile} run_dir | awk '{ print $2}'`set odir=`${progex} ${parafile} out_dir | awk '{ print $2}'`# Create the needed directoriesif ( ${step} == "inst" ) thenif ( ! -d ${idir} ) mkdir ${idir}if ( ! -d ${rdir} ) mkdir ${rdir}if ( ! -d ${odir} ) mkdir ${odir}endif# Create the needed directoriesif ( ${step} == "help" ) thenechoecho "Installation"echo " inst: Creates the input, run and output directory; copy template parameter file"echoecho "Sample case study"echo " sample: Copy all files for a sample case study"echoecho "Preparing input files [prep]"echo " prep0: Calculate S file with PV and TH [ P -> S ]"echo " prep1: Interpolate onto height levels [ P,Z -> H ]"echo " prep2: Rotate into local cartesian coordinate system [ H -> R ]"echo " prep3: Add TH,PV,NSQ and RHO to the data file [ -> R ]"echo " prep4: Define modified and anomaly PV field and boundary values [ -> R ]"echo " prep5: Reduce the domain size and split the input files [ R -> ORG,MOD,ANO,REF]"echo " prep6: Add the reference profile [MOD -> REF]"echo " prep7: Add coastlines to REF file [-> REF]"echo " prep8: Move the files to the run directory [ORG,MOD,ANO,REF -> ]"echoecho "Perform the PV inversion [pvin]"echo " pvin1: Add NSQ, TH, RHO, and PV [ -> MOD]"echo " pvin2: Change Ertel's PV anomaly into one of quasi-geostrophic PV [MOD -> ANO]"echo " pvin3: Inversion of quasi-geostrophic PV anomaly [ANO -> ANO]"echo " pvin4: Subtract anomaly from MOD file [MOD-ANO -> MOD]"echo " pvin5: Keep iterative steps if save flag is set"echoecho "Postprocessing [post]"echo " post1: Copy needed files from input and run directory [P,MOD -> ]"echo " post2: Rotate from quasi-cartesian coordinate frame to lat/lon system [ MOD -> GEO ]"echo " post3: Bring modified fields back to P file [ P+GEO -> P ]"echo " post4: Calculate S file with PV and TH [ P -> S ]"echo " post5: Make clean"echo " post6: Calculate difference to original P and S file"echoecho "Diagnostic Tools"echo " diag1: Check the consitency of the boundary conditions"echo " diag2: Calculate the quasi-geostrophic PV (diag2 [ORG|MOD|ANO])"echo " diag3: Get the difference between two files (diag3 [ORG|MOD|ANO] [ORG|MOD|ANO])"echo " diag4: Calculate geopotential with hydrostatic equation (diag4 [P|ORG|MOD|ANO])"echo " diag5: Q vector analysis; geostrophic wind balance [ORG|MOD|ANO] [GEO|DIV_UV|QVEC|DIV_Q]"echoecho "Modifying Pv anomalies"echo " mod1: Stretching and amplitude changes for anomalies [MOD]"endif# Copy sample files (if specified)if ( ${step} == "sample" ) then\cp ${sampledir}/P20060116_18 ${idir}\cp ${sampledir}/eraint_cst ${idir}\cp ${sampledir}/Z20060116_18 ${idir}\cp ${sampledir}/pressure_cst ${idir}endif# ---------------------------------------------------------------------------# Preparatory steps# ---------------------------------------------------------------------------# Change to data directorycd ${idir}# Step 0: Calculate S file with PV and TH (not in prep mode)if ( ${step} == "prep0" ) then\rm -f S${date}p2s P${date} TH PVendif# Step 1: Interpolate onto height levelsif ( ${step} == "prep1" | ${step} == "prep" ) thenecho "P${date}" >! fort.10echo "Z${date}" >> fort.10echo "H${date}" >> fort.10${bdir}/inversion.perl ${parafile} p2z >> fort.10echo "U U P${date}" >> fort.10echo "V V P${date}" >> fort.10echo "T T P${date}" >> fort.10echo "Q Q P${date}" >> fort.10${bdir}/prep/p2z\rm -f fort.10endif# Step 2: Rotate into local cartesian coordinate systemif ( ${step} == "prep2" | ${step} == "prep" ) thenecho "H${date}" >! fort.10echo "R${date}" >> fort.10${bdir}/inversion.perl ${parafile} rotate_grid >> fort.10echo "5" >> fort.10echo "ORO" >> fort.10echo "U.V" >> fort.10echo "P" >> fort.10echo "T" >> fort.10echo "Q" >> fort.10${bdir}/prep/rotate_grid\rm -f fort.10endif# Step 3: Add TH,PV,NSQ and RHO to the data fileif ( ${step} == "prep3" | ${step} == "prep" ) thenecho "TH" >! fort.10echo "R${date}" >> fort.10echo "R${date}" >> fort.10echo "5 " >> fort.10${bdir}/prep/z2secho "PV" >! fort.10echo "R${date}" >> fort.10echo "R${date}" >> fort.10echo "5 " >> fort.10${bdir}/prep/z2secho "NSQ" >! fort.10echo "R${date}" >> fort.10echo "R${date}" >> fort.10echo "5 " >> fort.10${bdir}/prep/z2secho "RHO" >! fort.10echo "R${date}" >> fort.10echo "R${date}" >> fort.10echo "5 " >> fort.10${bdir}/prep/z2s\rm -f fort.10endif# Step 4: Set the modified PV field and boundary valuesif ( ${step} == "prep4" | ${step} == "prep" ) thenecho "R${date}" >! fort.10${bdir}/inversion.perl ${parafile} def_anomaly >> fort.10${bdir}/prep/def_anomaly\rm -f fort.10endif# Step 5: Reduce the domain size and split the input filesif ( ${step} == "prep5" | ${step} == "prep" ) thenecho "PV PV R${date} ORG_${date}" >! fort.10echo "U U R${date} ORG_${date}" >> fort.10echo "V V R${date} ORG_${date}" >> fort.10echo "TH TH R${date} ORG_${date}" >> fort.10echo "Q Q R${date} ORG_${date}" >> fort.10echo "P P R${date} ORG_${date}" >> fort.10echo "T T R${date} ORG_${date}" >> fort.10echo "PV_FILT PV_AIM R${date} MOD_${date}" >> fort.10echo "U U R${date} MOD_${date}" >> fort.10echo "V V R${date} MOD_${date}" >> fort.10echo "Q Q R${date} MOD_${date}" >> fort.10echo "P P R${date} MOD_${date}" >> fort.10echo "T T R${date} MOD_${date}" >> fort.10echo "NSQ NSQ R${date} MOD_${date}" >> fort.10echo "RHO RHO R${date} MOD_${date}" >> fort.10echo "TH TH R${date} MOD_${date}" >> fort.10echo "PV_ANOM PV R${date} ANO_${date}" >> fort.10echo "TH_ANOM TH R${date} ANO_${date}" >> fort.10echo "UU_ANOM U R${date} ANO_${date}" >> fort.10echo "VV_ANOM V R${date} ANO_${date}" >> fort.10echo "ORO ORO R${date} REF_${date}" >> fort.10echo "X X R${date} REF_${date}" >> fort.10echo "Y Y R${date} REF_${date}" >> fort.10echo "LAT LAT R${date} REF_${date}" >> fort.10echo "LON LON R${date} REF_${date}" >> fort.10echo "CORIOL CORIOL R${date} REF_${date}" >> fort.10${bdir}/prep/cutnetcdf\rm -f fort.10endif# Step 6: Add the reference profileif ( ${step} == "prep6" | ${step} == "prep" ) then\rm -f fort.10echo "MOD_${date}" >! fort.10echo "REF_${date}" >> fort.10${bdir}/inversion.perl ${parafile} ref >> fort.10${bdir}/prep/ref_profile\rm -f fort.10endif# Step 7: Add coastlines to REF fileif ( ${step} == "prep7" | ${step} == "prep" ) then\rm -f fort.10echo \"REF_${date}\" >! fort.10echo \"${coastfile}\" >> fort.10${bdir}/inversion.perl ${parafile} coastline >> fort.10${bdir}/prep/coastline\rm -f fort.10endif# Step 8: Move the files to the run directoryif ( ${step} == "prep8" | ${step} == "prep" ) then\mv MOD_${date} MOD_${date}_cst ${rdir}\mv ORG_${date} ORG_${date}_cst ${rdir}\mv ANO_${date} ANO_${date}_cst ${rdir}\mv REF_${date} REF_${date}_cst ${rdir}\rm -f fort.10endif# ---------------------------------------------------------------------------# Inversion# ---------------------------------------------------------------------------# Change to data directorycd ${rdir}# Start loopset count=0loop:# Step 1: Add NSQ, TH, RHO, and PV to MOD file, take grid from REF fileif ( ${step} == "pvin1" | ${step} == "pvin" ) thenecho "NSQ" >! fort.10echo "MOD_${date}" >> fort.10echo "REF_${date}" >> fort.10echo "5 " >> fort.10${bdir}/pvin/z2secho "RHO" >! fort.10echo "MOD_${date}" >> fort.10echo "REF_${date}" >> fort.10echo "5 " >> fort.10${bdir}/pvin/z2secho "TH" >! fort.10echo "MOD_${date}" >> fort.10echo "REF_${date}" >> fort.10echo "5 " >> fort.10${bdir}/pvin/z2secho "PV" >! fort.10echo "MOD_${date}" >> fort.10echo "REF_${date}" >> fort.10echo "5 " >> fort.10${bdir}/pvin/z2s\rm -f fort.10endif# Step 2: Change Ertel's PV anomaly into an anomaly of quasi-geostrophic PVif ( ${step} == "pvin2" | ${step} == "pvin" ) thenecho "MOD_${date}" >! fort.10echo "REF_${date}" >> fort.10echo "ANO_${date}" >> fort.10${bdir}/pvin/pv_to_qgpv\rm -f fort.10endif# Step 3: Inversion of quasi-geostrophic PV anomaly with Neumann boundaryif ( ${step} == "pvin3" | ${step} == "pvin" ) thenecho "ANO_${date}" >! fort.10echo "REF_${date}" >> fort.10${bdir}/pvin/inv_cart\rm -f fort.10endif# Step 4: Prepare the output of the inversion for next iteration stepif ( ${step} == "pvin4" | ${step} == "pvin" ) then\rm -f fort.10echo "MOD_${date}" >! fort.10echo "ANO_${date}" >> fort.10${bdir}/inversion.perl ${parafile} prep_iteration >> fort.10${bdir}/pvin/prep_iteration\rm -f fort.10endif# Step 5: Keep iterative steps if save flag is setif ( ${step} == "pvin5" | ${step} == "pvin" ) thenif ( "${save}" == "yes" ) thenset pre=''if ( ${count} < 10 ) thenset pre='0'endif\cp MOD_${date} MOD_${date}_${pre}${count}\cp ANO_${date} ANO_${date}_${pre}${count}endifendif# End loop for iterationsif ( ${step} == "pvin" ) then@ count = ${count} + 1if ( ${count} < ${nofiter} ) goto loopendif# ---------------------------------------------------------------------------# Postprocessing# ---------------------------------------------------------------------------# Change to output directorycd ${odir}# Step 1: Copy needed files from input and run directoryif ( ${step} == "post1" | ${step} == "post" ) thenln -sf ${rdir}/MOD_${date} .ln -sf ${rdir}/MOD_${date}_cst .ln -sf ${rdir}/ORG_${date} .ln -sf ${rdir}/ORG_${date}_cst .\cp ${idir}/P${date} .set cfn = `getcfn P${date}`\cp ${idir}/${cfn} .endif# Step 2: Rotate from quasi-cartesian coordinate frame to lat/lon systemif ( ${step} == "post2" | ${step} == "post" ) thenecho "MOD_${date}" >! fort.10echo "GEO.MOD_${date}" >> fort.10${bdir}/inversion.perl ${parafile} rotate_lalo >> fort.10echo "3" >> fort.10echo "T" >> fort.10echo "U.V" >> fort.10echo "P" >> fort.10${bdir}/post/rotate_lalo\rm -f fort.10echo "ORG_${date}" >! fort.10echo "GEO.ORG_${date}" >> fort.10${bdir}/inversion.perl ${parafile} rotate_lalo >> fort.10echo "3" >> fort.10echo "T" >> fort.10echo "U.V" >> fort.10echo "P" >> fort.10${bdir}/post/rotate_lalo\rm -f fort.10endif# Step 3: Bring modified fields back to P fileif ( ${step} == "post3" | ${step} == "post" ) then\rm -f fort.10echo "P${date}" >! fort.10echo "GEO.MOD_${date}" >> fort.10echo "GEO.ORG_${date}" >> fort.10${bdir}/inversion.perl ${parafile} add2p >> fort.10${bdir}/post/add2p\rm -f fort.10endif# Step 4: Calculate S file with PV and THif ( ${step} == "post4" | ${step} == "post" ) then\rm -f S${date}p2s P${date} TH PVendif# Step 5: Make cleanif ( ${step} == "post5" | ${step} == "post" ) then\rm -f MOD_${date} MOD_${date}_cst\rm -f GEO_${date} GEO_${date}_cstendif# Step 6: Get difference of original and modified P,S filesif ( ${step} == "post6" | ${step} == "post" ) then\rm -f levsecho "950." >! levsecho "925." >> levsecho "900." >> levsecho "875." >> levsecho "850." >> levsecho "825." >> levsecho "800." >> levsecho "775." >> levsecho "750." >> levsecho "725." >> levsecho "700." >> levsecho "675." >> levsecho "650." >> levsecho "625." >> levsecho "600." >> levsecho "575." >> levsecho "550." >> levsecho "525." >> levsecho "500." >> levsecho "475." >> levsecho "450." >> levsecho "425." >> levsecho "400." >> levsecho "375." >> levsecho "350." >> levsecho "325." >> levsecho "300." >> levsecho "275." >> levsecho "250." >> levsecho "225." >> levsecho "200." >> levsecho "175," >> levsecho "150." >> levsecho "125." >> levsecho "100." >> levsecho " 75." >> levsecho " 50." >> levs\rm -f varsecho "U P" >! varsecho "V P" >> varsecho "T P" >> varsecho "Z P" >> varsecho "TH S" >> varsecho "PV S" >> varsnput2p ${date} pr_cst levs varsncks -A -v PS P${date} L${date}\mv -f L${date} L${date}.1\cp levs vars ${idir}/cd ${idir}nput2p ${date} pr_cst levs varsncks -A -v PS P${date} L${date}\rm levs\rm vars\mv L${date} ${odir}/L${date}.0cd ${odir}ncdiff L${date}.1 L${date}.0 L${date}\rm -f L${date}.1\rm -f L${date}.0endif# ---------------------------------------------------------------------------# Diagnotic Tools# ---------------------------------------------------------------------------# Step 1: Check the consistency of the boundary conditions (diag1)if ( ${step} == "diag1" ) thencd ${rdir}\rm -f fort.10echo "ANO_${date}" >! fort.10echo "REF_${date}" >> fort.10${bdir}/diag/check_boundcon\rm -f fort.10endif# Step 2: Calculate the quasi-geostrophic PV (diag2 [ORG|MOD|ANO]if ( ${step} == "diag2" ) thencd ${rdir}\rm -f fort.10echo "${file1}_${date}" >! fort.10echo "REF_${date}" >> fort.10${bdir}/diag/calc_qgpv\rm -f fort.10endif# Step 3: Get difference between two files (diag3 [ORG|MOD|ANO] - [ORG|MOD|ANO])if ( ${step} == "diag3" ) thencd ${rdir}\rm -f fort.10echo "${file1}_${date}" >! fort.10echo "${file2}_${date}" >> fort.10echo "DIA_${date}" >> fort.10${bdir}/diag/difference\rm -f fort.10endif# Step 4: Calculate geopotential with hydrostatic equation (diag4)if ( ${step} == "diag4" ) thencd ${odir}\rm -f fort.10echo "P${date}" >! fort.10echo "P${date}" >> fort.10${bdir}/diag/hydrostatic\rm -f fort.10endif# Step 5: Q vector analysis / geostrophic balance checkif ( ${step} == "diag5" ) thencd ${rdir}\rm -f fort.10echo "${param3}" >! fort.10echo "${file1}" >> fort.10echo "${file2}" >> fort.10echo 1 >> fort.10${bdir}/diag/qvec_analysis\rm -f fort.10endif# ---------------------------------------------------------------------------# Modifying tools# ---------------------------------------------------------------------------if ( ${step} == "mod1" ) thencd ${idir}\rm -f fort.10set commandstr=$2echo "R${date}" >! fort.10echo \"${commandstr}\" >> fort.10${bdir}/spec/modify_anomaly\rm -f fort.10endif