diff --git a/.gitmodules b/.gitmodules index 1e9966cb0..38119e2b5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -30,3 +30,7 @@ path = sorc/hafs_graphics.fd/emc_graphics url = https://github.com/hafs-community/hafs_graphics.git branch = support/HAFS +[submodule "obs_preproc"] + path = sorc/hafs_tools.fd/sorc/hafs_obs_preproc/obs_preproc + url = https://github.com/hafs-community/obs-preproc.git + branch = support/HAFS diff --git a/jobs/JHAFS_FORECAST b/jobs/JHAFS_FORECAST index ffefe5cf4..584a286cc 100755 --- a/jobs/JHAFS_FORECAST +++ b/jobs/JHAFS_FORECAST @@ -17,6 +17,9 @@ export machine=${WHERE_AM_I:-wcoss_cray} export envir=${envir:-prod} # prod, para, test export RUN_ENVIR=${RUN_ENVIR:-dev} # nco or dev if [ "${RUN_ENVIR^^}" != NCO ]; then + if [ "${machine}" = "hera" ]; then + module unload intelpython + fi module use ${HOMEhafs}/sorc/hafs_forecast.fd/modulefiles module load ufs_${machine} module list diff --git a/jobs/JHAFS_HRDGRAPHICS b/jobs/JHAFS_HRDGRAPHICS index 8f87545bb..a9f003ee5 100755 --- a/jobs/JHAFS_HRDGRAPHICS +++ b/jobs/JHAFS_HRDGRAPHICS @@ -10,6 +10,9 @@ export EXEChafs=${EXEChafs:-${HOMEhafs}/exec} export PARMhafs=${PARMhafs:-${HOMEhafs}/parm} export FIXhafs=${FIXhafs:-${HOMEhafs}/fix} +export GPLOThafs=${GPLOThafs:-${HOMEhafs}/sorc/hafs_graphics.fd/hrd_gplot} +export GPLOT_DIR=${GPLOThafs} + source ${USHhafs}/hafs_pre_job.sh.inc source ${HOLDVARS:-storm1.holdvars.txt} @@ -33,9 +36,6 @@ export COMIN=${COMIN:?} export COMOUT=${COMOUT:?} export COMhafs=${COMhafs:-${COMOUT}} -export GPLOThafs=${GPLOThafs:-${HOMEhafs}/sorc/hafs_graphics.fd/hrd_gplot} -export GPLOT_DIR=${GPLOThafs} - export ADECKgraph=${ADECKhafs:?} export BDECKgraph=${BDECKhafs:?} export SYNDAThafs=${SYNDAThafs:?} diff --git a/jobs/JHAFS_OBS_PROC b/jobs/JHAFS_OBS_PROC new file mode 100755 index 000000000..d19955970 --- /dev/null +++ b/jobs/JHAFS_OBS_PROC @@ -0,0 +1,62 @@ +#!/bin/sh + +date +export PS4='+ $SECONDS + ' +set -xue + +export HOMEhafs=${HOMEhafs:?} +export USHhafs=${USHhafs:-${HOMEhafs}/ush} +export EXEChafs=${EXEChafs:-${HOMEhafs}/exec} +export PARMhafs=${PARMhafs:-${HOMEhafs}/parm} +export FIXhafs=${FIXhafs:-${HOMEhafs}/fix} + +source ${USHhafs}/hafs_pre_job.sh.inc +source ${HOLDVARS:-storm1.holdvars.txt} + +export machine=${WHERE_AM_I:-wcoss_cray} +export envir=${envir:-prod} # prod, para, test +export RUN_ENVIR=${RUN_ENVIR:-dev} # nco or dev +if [ "${RUN_ENVIR^^}" != NCO ]; then + module use ${HOMEhafs}/modulefiles + module load modulefile.hafs.${machine} + module list +fi + +source ${USHhafs}/hafs_runcmd.sh.inc + +# Run setpdy and initialize PDY variables +#setpdy.sh +#. ./PDY +export PDY=${PDY:-$(echo ${YMDH} | cut -c 1-8 )} + +export WORKhafs=${WORKhafs:?} +export COMIN=${COMIN:?} +export COMOUT=${COMOUT:?} +export COMhafs=${COMhafs:-${COMOUT}} + +export CDATE=${CDATE:-${YMDH}} +export cyc=${cyc:?} +export STORM=${STORM:-FAKE} +export STORMID=${STORMID:-00L} + +export DATA=${WORKhafs}/obs_proc + +export SCRUBDATA=${SCRUBDATA:-YES} +if [ "${SCRUBDATA}" = YES ]; then + rm -rf $DATA +fi + +mkdir -p $DATA +cd $DATA + +# Execute ex-script +${HOMEhafs}/scripts/exhafs_obs_proc.sh +export err=$? +exit $err + +export KEEPDATA=${KEEPDATA:-YES} +if [ "${KEEPDATA^^}" != YES ]; then + rm -rf $DATA +fi + +date diff --git a/modulefiles/modulefile.hafs.hera b/modulefiles/modulefile.hafs.hera index a0542030d..23dfb177e 100644 --- a/modulefiles/modulefile.hafs.hera +++ b/modulefiles/modulefile.hafs.hera @@ -10,7 +10,7 @@ module use /contrib/sutils/modulefiles module load sutils module load hpss -module load cmake/3.16.1 +module load cmake/3.20.1 setenv CMAKE_C_COMPILER mpiicc setenv CMAKE_CXX_COMPILER mpiicpc setenv CMAKE_Fortran_COMPILER mpiifort @@ -29,17 +29,25 @@ module load hdf5/1.10.6 module load netcdf/4.7.4 module load pio/2.5.2 module load esmf/8_1_1 +module load fms/2020.04.03 module load bacio/2.4.1 module load crtm/2.3.0 -module load g2/3.4.1 -module load g2tmpl/1.9.1 +module load g2/3.4.2 +module load g2tmpl/1.10.0 module load ip/3.3.3 module load nemsio/2.5.2 module load sp/2.3.3 module load w3emc/2.7.3 module load w3nco/2.4.1 -module load upp/10.0.4 +module load upp/10.0.8 + +module load gftl-shared/v1.3.0 +module load yafyaml/v0.5.1 +module load mapl/v2.7.3 + +# a temporary workaround, since hafs_gfs2ofs2.x needs g2/3.4.1. +module load g2/3.4.1 module load bufr/11.4.0 module load gfsio/1.4.1 diff --git a/modulefiles/modulefile.hafs.jet b/modulefiles/modulefile.hafs.jet index c376c09ae..94d50d20b 100644 --- a/modulefiles/modulefile.hafs.jet +++ b/modulefiles/modulefile.hafs.jet @@ -10,7 +10,7 @@ module use /contrib/sutils/modulefiles module load sutils module load hpss -module load cmake/3.16.1 +module load cmake/3.20.1 setenv CMAKE_C_COMPILER mpiicc setenv CMAKE_CXX_COMPILER mpiicpc setenv CMAKE_Fortran_COMPILER mpiifort @@ -29,17 +29,25 @@ module load hdf5/1.10.6 module load netcdf/4.7.4 module load pio/2.5.2 module load esmf/8_1_1 +module load fms/2020.04.03 module load bacio/2.4.1 module load crtm/2.3.0 -module load g2/3.4.1 -module load g2tmpl/1.9.1 +module load g2/3.4.2 +module load g2tmpl/1.10.0 module load ip/3.3.3 module load nemsio/2.5.2 module load sp/2.3.3 module load w3emc/2.7.3 module load w3nco/2.4.1 -module load upp/10.0.4 +module load upp/10.0.8 + +module load gftl-shared/v1.3.0 +module load yafyaml/v0.5.1 +module load mapl/v2.7.3 + +# a temporary workaround, since hafs_gfs2ofs2.x needs g2/3.4.1. +module load g2/3.4.1 module load bufr/11.4.0 module load gfsio/1.4.1 diff --git a/modulefiles/modulefile.hafs.orion b/modulefiles/modulefile.hafs.orion index 151c9f7fb..edec15947 100644 --- a/modulefiles/modulefile.hafs.orion +++ b/modulefiles/modulefile.hafs.orion @@ -27,17 +27,25 @@ module load hdf5/1.10.6 module load netcdf/4.7.4 module load pio/2.5.2 module load esmf/8_1_1 +module load fms/2020.04.03 module load bacio/2.4.1 module load crtm/2.3.0 -module load g2/3.4.1 -module load g2tmpl/1.9.1 +module load g2/3.4.2 +module load g2tmpl/1.10.0 module load ip/3.3.3 module load nemsio/2.5.2 module load sp/2.3.3 module load w3emc/2.7.3 module load w3nco/2.4.1 -module load upp/10.0.4 +module load upp/10.0.8 + +module load gftl-shared/v1.3.0 +module load yafyaml/v0.5.1 +module load mapl/v2.7.3 + +# a temporary workaround, since hafs_gfs2ofs2.x needs g2/3.4.1. +module load g2/3.4.1 module load bufr/11.4.0 module load gfsio/1.4.1 diff --git a/modulefiles/modulefile.hafs.wcoss_cray b/modulefiles/modulefile.hafs.wcoss_cray index 35e4ad106..3b5f970ef 100644 --- a/modulefiles/modulefile.hafs.wcoss_cray +++ b/modulefiles/modulefile.hafs.wcoss_cray @@ -36,13 +36,16 @@ module load pio/2.5.2 module load bacio/2.4.1 module load crtm/2.3.0 module load g2/3.4.1 -module load g2tmpl/1.9.1 +module load g2tmpl/1.10.0 module load ip/3.3.3 module load nemsio/2.5.2 module load sp/2.3.3 module load w3emc/2.7.3 module load w3nco/2.4.1 -module load upp/10.0.4 +module load upp/10.0.8 + +# a temporary workaround, since hafs_gfs2ofs2.x needs g2/3.4.1. +module load g2/3.4.1 module load bufr/11.4.0 module load gfsio/1.4.1 @@ -60,6 +63,7 @@ module load wgrib2/2.0.8 #doesn't work setenv WGRIB2 /usrx/local/nceplibs/NCEPLIBS/cmake/install/NCEPLIBS-v1.3.0/wgrib2/wgrib2-2.0.8/bin/wgrib2 module load esmf/811 +module load fms/2020.04.03 ## WCOSS Cray execution prereqs: module load rca diff --git a/modulefiles/modulefile.hafs.wcoss_dell_p3 b/modulefiles/modulefile.hafs.wcoss_dell_p3 index 9e87f5755..f383ea1dd 100644 --- a/modulefiles/modulefile.hafs.wcoss_dell_p3 +++ b/modulefiles/modulefile.hafs.wcoss_dell_p3 @@ -10,11 +10,11 @@ module load ips/18.0.1.163 module load impi/18.0.1 module load lsf/10.1 module load python/3.6.3 -module load cmake/3.16.2 module use /usrx/local/nceplibs/dev/hpc-stack/libs/hpc-stack/modulefiles/stack module load hpc/1.1.0 +module load cmake/3.20.0 module load hpc-ips/18.0.1.163 module load hpc-impi/18.0.1 @@ -26,17 +26,25 @@ module load hdf5/1.10.6 module load netcdf/4.7.4 module load pio/2.5.2 module load esmf/8_1_1 +module load fms/2020.04.03 module load bacio/2.4.1 module load crtm/2.3.0 -module load g2/3.4.1 -module load g2tmpl/1.9.1 +module load g2/3.4.2 +module load g2tmpl/1.10.0 module load ip/3.3.3 module load nemsio/2.5.2 module load sp/2.3.3 module load w3emc/2.7.3 module load w3nco/2.4.1 -module load upp/10.0.4 +module load upp/10.0.8 + +module load gftl-shared/v1.3.0 +module load yafyaml/v0.5.1 +module load mapl/v2.7.3 + +# a temporary workaround, since hafs_gfs2ofs2.x needs g2/3.4.1. +module load g2/3.4.1 module load bufr/11.4.0 module load gfsio/1.4.1 diff --git a/parm/analysis/gsi/bufrinfo.json.tempdrop b/parm/analysis/gsi/bufrinfo.json.tempdrop new file mode 100644 index 000000000..d131856bd --- /dev/null +++ b/parm/analysis/gsi/bufrinfo.json.tempdrop @@ -0,0 +1,7 @@ +[ + { + "obs_type_mass": 137, + "obs_type_wind": 237, + "subset": "ADPUPA" + } +] diff --git a/parm/analysis/gsi/enkf.nml.tmp b/parm/analysis/gsi/enkf.nml.tmp index a51613021..a87243d26 100644 --- a/parm/analysis/gsi/enkf.nml.tmp +++ b/parm/analysis/gsi/enkf.nml.tmp @@ -2,10 +2,10 @@ datestring="_datestring_",datapath="./", analpertwtnh=0.85,analpertwtsh=0.85,analpertwttr=0.85, covinflatemax=1.e2,covinflatemin=1,pseudo_rh=.true.,iassim_order=0, - corrlengthnh=400,corrlengthsh=400,corrlengthtr=400, - lnsigcutoffnh=0.5,lnsigcutoffsh=0.5,lnsigcutofftr=0.5, - lnsigcutoffpsnh=0.5,lnsigcutoffpssh=0.5,lnsigcutoffpstr=0.5, - lnsigcutoffsatnh=0.5,lnsigcutoffsatsh=0.5,lnsigcutoffsattr=0.5, + corrlengthnh=_corrlength_,corrlengthsh=_corrlength_,corrlengthtr=_corrlength_, + lnsigcutoffnh=_lnsigcutoff_,lnsigcutoffsh=_lnsigcutoff_,lnsigcutofftr=_lnsigcutoff_, + lnsigcutoffpsnh=_lnsigcutoff_,lnsigcutoffpssh=_lnsigcutoff_,lnsigcutoffpstr=_lnsigcutoff_, + lnsigcutoffsatnh=_lnsigcutoff_,lnsigcutoffsatsh=_lnsigcutoff_,lnsigcutoffsattr=_lnsigcutoff_, obtimelnh=1.e30,obtimelsh=1.e30,obtimeltr=1.e30, saterrfact=1.0,numiter=1, sprd_tol=1.e30,paoverpb_thresh=0.98, diff --git a/parm/analysis/gsi/gsiparm.anl.tmp b/parm/analysis/gsi/gsiparm.anl.tmp index 3f0d40b21..ac1984b51 100644 --- a/parm/analysis/gsi/gsiparm.anl.tmp +++ b/parm/analysis/gsi/gsiparm.anl.tmp @@ -229,8 +229,8 @@ SUPEROB_RADAR:: n_ens=_N_ENS_, uv_hyb_ens=T, beta_s0=_BETA_S0_, - s_ens_h=300, - s_ens_v=-0.5, + s_ens_h=_S_ENS_H_, + s_ens_v=_S_ENS_V_, readin_localization=F, generate_ens=F, regional_ensemble_option=_REGIONAL_ENSEMBLE_OPTION_, diff --git a/parm/analysis/gsi/hafs_convinfo.txt b/parm/analysis/gsi/hafs_convinfo.txt index 96e364d2c..f35af66de 100644 --- a/parm/analysis/gsi/hafs_convinfo.txt +++ b/parm/analysis/gsi/hafs_convinfo.txt @@ -30,7 +30,7 @@ t 126 0 -1 3.0 0 0 0 8.0 5.6 1.3 8.0 0.001000 0 0. 0. 0 0. 0. t 130 0 1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.001000 0 0. 0. 0 0. 0. t 131 0 1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.001000 0 0. 0. 0 0. 0. - t 132 0 1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.001000 0 0. 0. 0 0. 0. + t 132 0 -1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.001000 0 0. 0. 0 0. 0. t 133 0 1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.004000 0 0. 0. 0 0. 0. t 134 0 -1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.004000 0 0. 0. 0 0. 0. t 135 0 -1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.004000 0 0. 0. 0 0. 0. @@ -38,14 +38,14 @@ t 137 0 1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.001000 0 0. 0. 0 0. 0. t 180 0 1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.004000 0 0. 0. 0 0. 0. t 180 01 1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.004000 0 0. 0. 0 0. 0. - t 181 0 -1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.004000 0 0. 0. 0 0. 0. + t 181 0 1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.004000 0 0. 0. 0 0. 0. t 182 0 1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.004000 0 0. 0. 0 0. 0. t 183 0 -1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.004000 0 0. 0. 0 0. 0. t 187 0 -1 3.0 0 0 0 7.0 5.6 1.3 7.0 0.004000 0 0. 0. 0 0. 0. q 120 0 1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000500 0 0. 0. 0 0. 0. q 130 0 -1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000600 0 0. 0. 0 0. 0. q 131 0 -1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000600 0 0. 0. 0 0. 0. - q 132 0 1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000600 0 0. 0. 0 0. 0. + q 132 0 -1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000600 0 0. 0. 0 0. 0. q 133 0 1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000600 0 0. 0. 0 0. 0. q 134 0 -1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000600 0 0. 0. 0 0. 0. q 135 0 -1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000600 0 0. 0. 0 0. 0. @@ -53,7 +53,7 @@ q 137 0 1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000600 0 0. 0. 0 0. 0. q 180 0 1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000500 0 0. 0. 0 0. 0. q 180 01 1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000500 0 0. 0. 0 0. 0. - q 181 0 -1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000500 0 0. 0. 0 0. 0. + q 181 0 1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000500 0 0. 0. 0 0. 0. q 182 0 1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000600 0 0. 0. 0 0. 0. q 183 0 -1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000600 0 0. 0. 0 0. 0. q 187 0 -1 3.0 0 0 0 8.0 100.0 10.0 8.0 0.000600 0 0. 0. 0 0. 0. @@ -94,7 +94,7 @@ uv 229 0 1 3.0 0 0 0 6.5 6.1 1.4 6.5 0.000001 0 0. 0. 0 0. 0. uv 230 0 1 3.0 0 0 0 6.0 6.1 1.4 6.0 0.000100 0 0. 0. 0 0. 0. uv 231 0 1 3.0 0 0 0 6.5 6.1 1.4 6.5 0.000100 0 0. 0. 0 0. 0. - uv 232 0 1 3.0 0 0 0 7.0 6.1 1.4 7.0 0.000100 0 0. 0. 0 0. 0. + uv 232 0 -1 3.0 0 0 0 7.0 6.1 1.4 7.0 0.000100 0 0. 0. 0 0. 0. uv 233 0 1 3.0 0 0 0 7.5 6.1 1.4 7.5 0.000100 0 0. 0. 0 0. 0. uv 234 0 1 3.0 0 0 0 7.5 6.1 1.4 7.5 0.000100 0 0. 0. 0 0. 0. uv 235 0 1 3.0 0 0 0 7.5 6.1 1.4 7.5 0.000100 0 0. 0. 0 0. 0. diff --git a/parm/analysis/gsi/hafs_satinfo.txt b/parm/analysis/gsi/hafs_satinfo.txt index 2019328c5..ac3fb500e 100644 --- a/parm/analysis/gsi/hafs_satinfo.txt +++ b/parm/analysis/gsi/hafs_satinfo.txt @@ -10,8 +10,8 @@ amsua_n15 9 1 0.340 0.340 2.000 10.000 0.000 -2 -1 -1 amsua_n15 10 1 0.400 0.400 2.000 10.000 0.000 -2 -1 -1 amsua_n15 11 -1 0.600 0.600 2.500 10.000 0.000 -2 -1 -1 - amsua_n15 12 1 1.000 1.000 3.500 10.000 0.000 -2 -1 -1 - amsua_n15 13 1 1.500 1.500 4.500 10.000 0.000 -2 -1 -1 + amsua_n15 12 -1 1.000 1.000 3.500 10.000 0.000 -2 -1 -1 + amsua_n15 13 -1 1.500 1.500 4.500 10.000 0.000 -2 -1 -1 amsua_n15 14 -1 2.000 2.000 4.500 10.000 0.000 -2 -1 -1 amsua_n15 15 1 3.500 18.000 4.500 10.000 0.000 -2 -1 -1 hirs3_n17 1 -1 2.000 0.000 4.500 10.000 0.000 -1 -1 -1 @@ -49,9 +49,9 @@ amsua_n18 9 -1 0.250 0.250 2.000 10.000 0.000 -2 -1 -1 amsua_n18 10 1 0.350 0.350 2.000 10.000 0.000 -2 -1 -1 amsua_n18 11 1 0.400 0.400 2.500 10.000 0.000 -2 -1 -1 - amsua_n18 12 1 0.550 0.550 3.500 10.000 0.000 -2 -1 -1 - amsua_n18 13 1 0.800 0.800 4.500 10.000 0.000 -2 -1 -1 - amsua_n18 14 1 3.000 3.000 4.500 10.000 0.000 -2 -1 -1 + amsua_n18 12 -1 0.550 0.550 3.500 10.000 0.000 -2 -1 -1 + amsua_n18 13 -1 0.800 0.800 4.500 10.000 0.000 -2 -1 -1 + amsua_n18 14 -1 3.000 3.000 4.500 10.000 0.000 -2 -1 -1 amsua_n18 15 1 3.500 18.000 4.500 10.000 0.000 -2 -1 -1 mhs_n18 1 1 2.500 0.000 6.000 10.000 0.000 -2 -1 -1 mhs_n18 2 1 2.500 0.000 6.000 10.000 0.000 -2 -1 -1 @@ -88,16 +88,16 @@ amsua_metop-a 9 1 0.250 0.250 2.000 10.000 0.000 -2 -1 -1 amsua_metop-a 10 1 0.350 0.350 2.000 10.000 0.000 -2 -1 -1 amsua_metop-a 11 1 0.400 0.400 2.500 10.000 0.000 -2 -1 -1 - amsua_metop-a 12 1 0.550 0.550 3.500 10.000 0.000 -2 -1 -1 - amsua_metop-a 13 1 0.800 0.800 4.500 10.000 0.000 -2 -1 -1 - amsua_metop-a 14 1 3.000 3.000 4.500 10.000 0.000 -2 -1 -1 + amsua_metop-a 12 -1 0.550 0.550 3.500 10.000 0.000 -2 -1 -1 + amsua_metop-a 13 -1 0.800 0.800 4.500 10.000 0.000 -2 -1 -1 + amsua_metop-a 14 -1 3.000 3.000 4.500 10.000 0.000 -2 -1 -1 amsua_metop-a 15 1 3.500 18.000 4.500 10.000 0.000 -2 -1 -1 mhs_metop-a 1 -1 2.500 0.000 6.000 10.000 0.000 -2 -1 -1 mhs_metop-a 2 -1 2.500 0.000 6.000 10.000 0.000 -2 -1 -1 mhs_metop-a 3 -1 2.500 0.000 6.000 10.000 0.000 -2 -1 -1 mhs_metop-a 4 -1 2.000 0.000 6.000 10.000 0.000 -2 -1 -1 mhs_metop-a 5 -1 2.000 0.000 6.000 10.000 0.000 -2 -1 -1 - iasi_metop-a 16 1 1.380 0.000 3.000 10.000 0.000 1 -1 -1 + iasi_metop-a 16 -1 1.380 0.000 3.000 10.000 0.000 1 -1 -1 iasi_metop-a 29 -1 0.810 0.000 2.000 10.000 0.000 -1 -1 -1 iasi_metop-a 32 -1 0.750 0.000 2.000 10.000 0.000 -1 -1 -1 iasi_metop-a 35 -1 0.790 0.000 2.000 10.000 0.000 -1 -1 -1 @@ -119,7 +119,7 @@ iasi_metop-a 66 1 0.640 0.000 2.000 10.000 0.000 1 -1 -1 iasi_metop-a 68 -1 0.590 0.000 2.000 10.000 0.000 -1 -1 -1 iasi_metop-a 70 1 0.760 0.000 2.000 10.000 0.000 1 -1 -1 - iasi_metop-a 72 1 1.220 0.000 4.000 10.000 0.000 1 -1 -1 + iasi_metop-a 72 -1 1.220 0.000 4.000 10.000 0.000 1 -1 -1 iasi_metop-a 74 1 0.780 0.000 2.000 10.000 0.000 1 -1 -1 iasi_metop-a 76 -1 0.640 0.000 2.000 10.000 0.000 -1 -1 -1 iasi_metop-a 78 -1 0.620 0.000 2.000 10.000 0.000 -1 -1 -1 @@ -1005,8 +1005,8 @@ amsua_aqua 9 1 0.350 0.350 2.000 10.000 0.000 -2 -1 -1 amsua_aqua 10 1 0.350 0.350 2.000 10.000 0.000 -2 -1 -1 amsua_aqua 11 1 0.450 0.450 3.000 10.000 0.000 -2 -1 -1 - amsua_aqua 12 1 1.000 1.000 3.500 10.000 0.000 -2 -1 -1 - amsua_aqua 13 1 1.500 1.500 4.500 10.000 0.000 -2 -1 -1 + amsua_aqua 12 -1 1.000 1.000 3.500 10.000 0.000 -2 -1 -1 + amsua_aqua 13 -1 1.500 1.500 4.500 10.000 0.000 -2 -1 -1 amsua_aqua 14 -1 2.500 2.500 4.500 10.000 0.000 -2 -1 -1 amsua_aqua 15 -1 2.500 18.000 4.500 10.000 0.000 -2 -1 -1 avhrr3_n18 3 1 0.600 0.000 6.000 10.000 0.000 1 -1 -1 @@ -1319,9 +1319,9 @@ amsua_n19 9 1 0.250 0.250 2.000 10.000 0.000 -2 -1 -1 amsua_n19 10 1 0.350 0.350 2.000 10.000 0.000 -2 -1 -1 amsua_n19 11 1 0.400 0.400 2.500 10.000 0.000 -2 -1 -1 - amsua_n19 12 1 0.550 0.550 3.500 10.000 0.000 -2 -1 -1 - amsua_n19 13 1 0.800 0.800 4.500 10.000 0.000 -2 -1 -1 - amsua_n19 14 1 3.000 3.000 4.500 10.000 0.000 -2 -1 -1 + amsua_n19 12 -1 0.550 0.550 3.500 10.000 0.000 -2 -1 -1 + amsua_n19 13 -1 0.800 0.800 4.500 10.000 0.000 -2 -1 -1 + amsua_n19 14 -1 3.000 3.000 4.500 10.000 0.000 -2 -1 -1 amsua_n19 15 1 3.500 18.000 4.500 10.000 0.000 -2 -1 -1 mhs_n19 1 1 2.500 0.000 6.000 10.000 0.000 -2 -1 -1 mhs_n19 2 1 2.500 0.000 6.000 10.000 0.000 -2 -1 -1 @@ -1620,9 +1620,9 @@ atms_npp 10 1 0.400 0.400 1.000 10.000 0.000 -2 -1 -1 atms_npp 11 1 0.450 0.450 1.000 10.000 0.000 -2 -1 -1 atms_npp 12 1 0.450 0.450 1.000 10.000 0.000 -2 -1 -1 - atms_npp 13 1 0.550 0.550 1.000 10.000 0.000 -2 -1 -1 - atms_npp 14 1 0.800 0.800 2.000 10.000 0.000 -2 -1 -1 - atms_npp 15 1 3.000 3.000 4.500 10.000 0.000 -2 -1 -1 + atms_npp 13 -1 0.550 0.550 1.000 10.000 0.000 -2 -1 -1 + atms_npp 14 -1 0.800 0.800 2.000 10.000 0.000 -2 -1 -1 + atms_npp 15 -1 3.000 3.000 4.500 10.000 0.000 -2 -1 -1 atms_npp 16 1 4.000 19.000 4.500 10.000 0.000 -2 -1 -1 atms_npp 17 1 4.000 30.000 2.000 10.000 0.000 -2 -1 -1 atms_npp 18 1 3.500 25.000 2.000 10.000 0.000 -2 -1 -1 @@ -1631,174 +1631,174 @@ atms_npp 21 1 3.000 9.000 2.000 10.000 0.000 -2 -1 -1 atms_npp 22 1 3.000 6.500 2.000 10.000 0.000 -2 -1 -1 cris-fsr_npp 19 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 24 1 0.700 0.000 2.000 10.000 0.000 1 -1 -1 - cris-fsr_npp 26 1 0.700 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 24 -1 0.700 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 26 -1 0.700 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 27 -1 0.700 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 28 1 0.700 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 28 -1 0.700 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 31 -1 1.359 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 32 1 0.600 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 32 -1 0.600 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 33 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 37 1 0.600 0.000 2.000 10.000 0.000 1 -1 -1 - cris-fsr_npp 39 1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 42 1 0.600 0.000 2.000 10.000 0.000 1 -1 -1 - cris-fsr_npp 44 1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 47 1 0.600 0.000 2.000 10.000 0.000 1 -1 -1 - cris-fsr_npp 49 1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 37 -1 0.600 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 39 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 42 -1 0.600 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 44 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 47 -1 0.600 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 49 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 50 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 51 1 0.600 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 51 -1 0.600 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 52 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 53 1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 53 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 54 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 55 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 55 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 56 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 57 1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 57 -1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 58 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 59 1 0.600 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 59 -1 0.600 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 60 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 61 1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 61 -1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 62 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 63 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 63 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 64 -1 0.756 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 65 1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 65 -1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 66 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 67 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 67 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 68 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 69 1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 69 -1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 70 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 71 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 71 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 72 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 73 1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 73 -1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 74 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 75 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 75 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 76 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 77 1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 77 -1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 78 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 79 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 79 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 80 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 81 1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 81 -1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 82 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 83 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 83 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 84 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 85 1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 85 -1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 86 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 87 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 87 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 88 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 89 1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 89 -1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 90 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 91 1 0.450 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 91 -1 0.450 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 92 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 93 1 0.450 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 93 -1 0.450 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 94 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 95 1 0.450 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 95 -1 0.450 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 96 -1 0.635 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 97 1 0.450 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 97 -1 0.450 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 98 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 99 1 0.450 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 99 -1 0.450 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 100 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 101 -1 0.450 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 102 -1 0.735 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 103 1 0.450 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 103 -1 0.450 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 104 -1 0.878 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 105 1 0.450 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 105 -1 0.450 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 106 -1 0.696 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 107 1 0.400 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 107 -1 0.400 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 108 -1 2.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 109 1 0.400 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 109 -1 0.400 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 110 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 111 1 0.400 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 111 -1 0.400 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 112 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 113 1 0.400 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 113 -1 0.400 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 114 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 115 1 0.400 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 115 -1 0.400 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 116 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 117 1 0.350 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 117 -1 0.350 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 118 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 119 1 0.350 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 119 -1 0.350 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 120 -1 0.701 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 121 1 0.350 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 121 -1 0.350 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 122 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 123 1 0.350 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 123 -1 0.350 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 124 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 125 1 0.350 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 125 -1 0.350 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 126 -1 0.663 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 127 1 0.350 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 127 -1 0.350 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 128 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 129 1 0.350 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 129 -1 0.350 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 130 -1 1.083 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 131 1 0.350 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 131 -1 0.350 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 132 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 133 1 0.350 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 133 -1 0.350 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 134 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 135 1 0.350 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 135 -1 0.350 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 136 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 137 1 0.350 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 137 -1 0.350 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 138 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 139 1 0.350 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 139 -1 0.350 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 140 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 141 1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 141 -1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 142 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 143 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 143 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 144 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 145 1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 145 -1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 146 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 147 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 147 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 148 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 149 1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 149 -1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 150 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 151 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 151 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 152 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 153 1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 153 -1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 154 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 155 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 155 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 156 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 157 1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 157 -1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 158 -1 0.773 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 159 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 159 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 160 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 161 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 162 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 163 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 163 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 164 -1 0.813 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 165 -1 0.907 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 166 -1 0.802 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 167 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 167 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 168 -1 1.493 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 169 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 170 -1 0.856 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 171 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 171 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 172 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 173 -1 0.600 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 174 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 175 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 175 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 176 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 177 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 178 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 179 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 179 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 180 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 181 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 182 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 183 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 183 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 184 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 185 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 186 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 187 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 187 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 188 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 189 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 190 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 190 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 191 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 192 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 193 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 194 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 194 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 195 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 196 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 197 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 197 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 198 -1 2.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 199 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 200 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 200 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 208 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 211 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 211 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 216 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 224 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 224 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 234 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 236 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 238 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 @@ -1810,24 +1810,24 @@ cris-fsr_npp 264 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 266 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 268 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 275 1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 279 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 275 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 279 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 283 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 285 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 291 1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 291 -1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 295 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 301 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 305 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 311 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 - cris-fsr_npp 332 1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 342 1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 - cris-fsr_npp 389 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 311 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 332 -1 0.300 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 342 -1 0.300 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 389 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 400 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 402 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 404 -1 2.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 406 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 410 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 - cris-fsr_npp 427 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 410 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 427 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 439 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 440 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 441 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 @@ -1836,19 +1836,19 @@ cris-fsr_npp 455 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 458 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 461 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 464 1 1.000 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 464 -1 1.000 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 467 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 470 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 473 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 475 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 482 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 482 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 486 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 487 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 490 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 493 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 496 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 499 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 501 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 501 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 503 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 505 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 511 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 @@ -1858,7 +1858,7 @@ cris-fsr_npp 519 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 520 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 522 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 529 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 529 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 534 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 563 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 568 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 @@ -1891,8 +1891,8 @@ cris-fsr_npp 694 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 700 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 707 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 710 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 - cris-fsr_npp 713 1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 710 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 + cris-fsr_npp 713 -1 0.500 0.000 2.000 10.000 0.000 1 -1 -1 cris-fsr_npp 714 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 718 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 720 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 @@ -1900,7 +1900,7 @@ cris-fsr_npp 725 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 728 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 735 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 742 1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 742 -1 0.500 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 748 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 753 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 762 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 @@ -1912,32 +1912,32 @@ cris-fsr_npp 862 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 866 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 874 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 882 1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 890 1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 882 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 890 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 898 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 906 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 907 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 908 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 914 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 937 1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 937 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 972 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 973 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 978 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 980 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 981 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 988 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 995 1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 995 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 998 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1000 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1003 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 1008 1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 1008 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1009 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1010 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1014 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1017 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1018 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1020 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 1022 1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 1022 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1024 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1026 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1029 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 @@ -1954,7 +1954,7 @@ cris-fsr_npp 1050 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1053 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1054 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 - cris-fsr_npp 1058 1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 + cris-fsr_npp 1058 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1060 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1062 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 cris-fsr_npp 1064 -1 1.000 0.000 2.000 10.000 0.000 -1 -1 -1 @@ -2523,7 +2523,7 @@ amsua_metop-b 10 1 0.350 0.350 2.000 10.000 0.000 -2 -1 -1 amsua_metop-b 11 1 0.400 0.400 2.500 10.000 0.000 -2 -1 -1 amsua_metop-b 12 1 0.550 0.550 3.500 10.000 0.000 -2 -1 -1 - amsua_metop-b 13 1 0.800 0.800 4.500 10.000 0.000 -2 -1 -1 + amsua_metop-b 13 -1 0.800 0.800 4.500 10.000 0.000 -2 -1 -1 amsua_metop-b 14 -1 3.000 3.000 4.500 10.000 0.000 -2 -1 -1 amsua_metop-b 15 -1 3.500 18.000 4.500 10.000 0.000 -2 -1 -1 mhs_metop-b 1 1 2.500 0.000 6.000 10.000 0.000 -2 -1 -1 diff --git a/parm/analysis/gsi/obs-preproc.input.tempdrop.tmp b/parm/analysis/gsi/obs-preproc.input.tempdrop.tmp new file mode 100644 index 000000000..571fac3c1 --- /dev/null +++ b/parm/analysis/gsi/obs-preproc.input.tempdrop.tmp @@ -0,0 +1,32 @@ +&share +analdate = "_analdate_" !"YYYY-MM-DD_HH:00:00" +datapath = "./" +debug = T +is_sonde = T +/ + +&bufrio +bufr_filepath = "./tempdrop.prepbufr" +bufr_info_filepath = "./bufrinfo.json" +bufr_tblpath = "./prepobs_prep.bufrtable" +/ + +&fcst_mdl +/ + +&recon +/ + +&sonde +is_sonde_tempdrop = T +sonde_filelist = './tempdrop.filelist' +tempdrop_compute_drift = T +tempdrop_write_nc_skewt = T +/ + +&tc +/ + +&wmm +/ + diff --git a/parm/analysis/gsi/obs-preproc.input.tmp b/parm/analysis/gsi/obs-preproc.input.tmp index e790ecd1c..de5573205 100644 --- a/parm/analysis/gsi/obs-preproc.input.tmp +++ b/parm/analysis/gsi/obs-preproc.input.tmp @@ -22,7 +22,6 @@ is_fv3 = T is_regional = T is_rotate_winds = T sample_radius = 9000.0 -sample_nindex = 1 / &recon / diff --git a/parm/forecast/globnest/input.nml.tmp b/parm/forecast/globnest/input.nml.tmp index 1e7319dfa..e5fe82409 100644 --- a/parm/forecast/globnest/input.nml.tmp +++ b/parm/forecast/globnest/input.nml.tmp @@ -8,7 +8,7 @@ / &atmos_model_nml - blocksize = 40 + blocksize = _blocksize_ chksum_debug = .false. dycore_only = .false. fdiag = 3 @@ -41,7 +41,7 @@ &fms_nml clock_grain = 'ROUTINE', - domains_stack_size = 12000000, + domains_stack_size = 30000000, print_memory_usage = .false. / @@ -173,8 +173,8 @@ ncld = 5 imp_physics = 11 pdfcld = .false. - fhswr = 900. - fhlwr = 900. + fhswr = _fhswr_ + fhlwr = _fhlwr_ ialb = 1 iems = 1 iaer = 111 @@ -194,6 +194,9 @@ moninq_fac = -1.0 ! HWRF_moninedmf satmedmf = .true. isatmedmf = 1 + rlmx = 300. + elmx = 300. + sfc_rlm = 1 random_clds = .false. trans_trac = .true. cnvcld = .true. @@ -243,13 +246,12 @@ do_ca = .false. ca_sgs = .false. nca = 1 - ncells = 5 - nlives = 30 - nseed = 1000000 + scells = 2600 + tlives = 1800 + nseed = 1 nfracseed = 0.5 - nthresh = 0. - ca_trigger = .true. - ca_entr = .false. + ca_trigger = .false. + ca_entr = .false. ca_closure = .false. ca_global = .false. nca_g = 1 @@ -257,10 +259,10 @@ nlives_g = 100 nseed_g = 100 ca_smooth = .false. - nspinup = 100 + nspinup = 1 iseed_ca = 1 - nsmooth = 1 - ca_amplitude = 0.5 + nsmooth = 100 + ca_amplitude = 0.35 / &gfdl_cloud_microphysics_nml diff --git a/parm/forecast/globnest/input_nest02.nml.tmp b/parm/forecast/globnest/input_nest02.nml.tmp index 5edf25bcc..8ffbbde11 100644 --- a/parm/forecast/globnest/input_nest02.nml.tmp +++ b/parm/forecast/globnest/input_nest02.nml.tmp @@ -8,7 +8,7 @@ / &atmos_model_nml - blocksize = 40 + blocksize = _blocksize_ chksum_debug = .false. dycore_only = .false. fdiag = 3 @@ -41,7 +41,7 @@ &fms_nml clock_grain = 'ROUTINE', - domains_stack_size = 12000000, + domains_stack_size = 30000000, print_memory_usage = .false. / @@ -162,8 +162,8 @@ ncld = 5 imp_physics = 11 pdfcld = .false. - fhswr = 900. - fhlwr = 900. + fhswr = _fhswr_ + fhlwr = _fhlwr_ ialb = 1 iems = 1 iaer = 111 @@ -183,6 +183,9 @@ moninq_fac = -1.0 ! HWRF_moninedmf satmedmf = .true. isatmedmf = 1 + rlmx = 300. + elmx = 300. + sfc_rlm = 1 random_clds = .false. trans_trac = .true. cnvcld = .true. @@ -232,13 +235,12 @@ do_ca = .false. ca_sgs = .false. nca = 1 - ncells = 5 - nlives = 30 - nseed = 1000000 + scells = 2600 + tlives = 1800 + nseed = 1 nfracseed = 0.5 - nthresh = 0. - ca_trigger = .true. - ca_entr = .false. + ca_trigger = .false. + ca_entr = .false. ca_closure = .false. ca_global = .false. nca_g = 1 @@ -246,10 +248,10 @@ nlives_g = 100 nseed_g = 100 ca_smooth = .false. - nspinup = 100 + nspinup = 1 iseed_ca = 1 - nsmooth = 1 - ca_amplitude = 0.5 + nsmooth = 100 + ca_amplitude = 0.35 / &gfdl_cloud_microphysics_nml diff --git a/parm/forecast/globnest/model_configure.tmp b/parm/forecast/globnest/model_configure.tmp index 29e188091..2d98bbc73 100644 --- a/parm/forecast/globnest/model_configure.tmp +++ b/parm/forecast/globnest/model_configure.tmp @@ -24,8 +24,10 @@ output_1st_tstep_rst: .false. quilting: _quilting_ write_groups: _write_groups_ write_tasks_per_group: _write_tasks_per_group_ +write_dopost: _write_dopost_ +output_history: _output_history_ num_files: 2 -filename_base: 'dyn' 'phy' +filename_base: 'atm' 'sfc' output_file: 'netcdf_parallel' 'netcdf_parallel' ichunk2d: -1 jchunk2d: -1 diff --git a/parm/forecast/globnest_hwrf/input.nml.tmp b/parm/forecast/globnest_hwrf/input.nml.tmp index 872d5ea8e..ae6e2eafa 100644 --- a/parm/forecast/globnest_hwrf/input.nml.tmp +++ b/parm/forecast/globnest_hwrf/input.nml.tmp @@ -8,7 +8,7 @@ / &atmos_model_nml - blocksize = 40 + blocksize = _blocksize_ chksum_debug = .false. dycore_only = .false. fdiag = 3 @@ -41,7 +41,7 @@ &fms_nml clock_grain = 'ROUTINE', - domains_stack_size = 12000000, + domains_stack_size = 30000000, print_memory_usage = .false. / @@ -183,8 +183,8 @@ hurr_pbl = .T. ! HWRF moninedmf moninq_fac = -1.0 ! HWRF moninedmf pdfcld = .false. - fhswr = 900. - fhlwr = 900. + fhswr = _fhswr_ + fhlwr = _fhlwr_ ialb = 1 iems = 1 iaer = 111 @@ -250,13 +250,12 @@ do_ca = .false. ca_sgs = .false. nca = 1 - ncells = 5 - nlives = 30 - nseed = 1000000 + scells = 2600 + tlives = 1800 + nseed = 1 nfracseed = 0.5 - nthresh = 0. - ca_trigger = .true. - ca_entr = .false. + ca_trigger = .false. + ca_entr = .false. ca_closure = .false. ca_global = .false. nca_g = 1 @@ -264,10 +263,10 @@ nlives_g = 100 nseed_g = 100 ca_smooth = .false. - nspinup = 100 + nspinup = 1 iseed_ca = 1 - nsmooth = 1 - ca_amplitude = 0.5 + nsmooth = 100 + ca_amplitude = 0.35 / &gfdl_cloud_microphysics_nml diff --git a/parm/forecast/globnest_hwrf/input_nest02.nml.tmp b/parm/forecast/globnest_hwrf/input_nest02.nml.tmp index b5fc64a48..3687f4ebd 100644 --- a/parm/forecast/globnest_hwrf/input_nest02.nml.tmp +++ b/parm/forecast/globnest_hwrf/input_nest02.nml.tmp @@ -8,7 +8,7 @@ / &atmos_model_nml - blocksize = 40 + blocksize = _blocksize_ chksum_debug = .false. dycore_only = .false. fdiag = 3 @@ -41,7 +41,7 @@ &fms_nml clock_grain = 'ROUTINE', - domains_stack_size = 12000000, + domains_stack_size = 30000000, print_memory_usage = .false. / @@ -173,8 +173,8 @@ hurr_pbl = .T. ! HWRF moninedmf moninq_fac = -1.0 ! HWRF moninedmf pdfcld = .false. - fhswr = 900. - fhlwr = 900. + fhswr = _fhswr_ + fhlwr = _fhlwr_ ialb = 1 iems = 1 iaer = 111 @@ -240,13 +240,12 @@ do_ca = .false. ca_sgs = .false. nca = 1 - ncells = 5 - nlives = 30 - nseed = 1000000 + scells = 2600 + tlives = 1800 + nseed = 1 nfracseed = 0.5 - nthresh = 0. - ca_trigger = .true. - ca_entr = .false. + ca_trigger = .false. + ca_entr = .false. ca_closure = .false. ca_global = .false. nca_g = 1 @@ -254,10 +253,10 @@ nlives_g = 100 nseed_g = 100 ca_smooth = .false. - nspinup = 100 + nspinup = 1 iseed_ca = 1 - nsmooth = 1 - ca_amplitude = 0.5 + nsmooth = 100 + ca_amplitude = 0.35 / &gfdl_cloud_microphysics_nml diff --git a/parm/forecast/globnest_hwrf/model_configure.tmp b/parm/forecast/globnest_hwrf/model_configure.tmp index dae3d8612..2d98bbc73 100644 --- a/parm/forecast/globnest_hwrf/model_configure.tmp +++ b/parm/forecast/globnest_hwrf/model_configure.tmp @@ -24,9 +24,18 @@ output_1st_tstep_rst: .false. quilting: _quilting_ write_groups: _write_groups_ write_tasks_per_group: _write_tasks_per_group_ +write_dopost: _write_dopost_ +output_history: _output_history_ num_files: 2 -filename_base: 'dyn' 'phy' -output_file: 'netcdf' +filename_base: 'atm' 'sfc' +output_file: 'netcdf_parallel' 'netcdf_parallel' +ichunk2d: -1 +jchunk2d: -1 +ichunk3d: -1 +jchunk3d: -1 +kchunk3d: -1 +ideflate: 1 +nbits: 0 write_nemsioflip: .false. write_fsyncflag: .false. diff --git a/parm/forecast/regional/input.nml.tmp b/parm/forecast/regional/input.nml.tmp index a51b3098b..03c84ceb2 100644 --- a/parm/forecast/regional/input.nml.tmp +++ b/parm/forecast/regional/input.nml.tmp @@ -8,7 +8,7 @@ / &atmos_model_nml - blocksize = 40 + blocksize = _blocksize_ chksum_debug = .false. dycore_only = .false. fdiag = 3 @@ -42,7 +42,7 @@ &fms_nml clock_grain = 'ROUTINE', - domains_stack_size = 12000000, + domains_stack_size = 30000000, print_memory_usage = .false. / @@ -167,8 +167,8 @@ ncld = 5 imp_physics = 11 pdfcld = .false. - fhswr = 900. - fhlwr = 900. + fhswr = _fhswr_ + fhlwr = _fhlwr_ ialb = 1 iems = 1 iaer = 111 @@ -188,6 +188,9 @@ moninq_fac = -1.0 ! HWRF_moninedmf satmedmf = .true. isatmedmf = 1 + rlmx = 300. + elmx = 300. + sfc_rlm = 1 random_clds = .false. trans_trac = .true. cnvcld = .true. @@ -237,13 +240,12 @@ do_ca = .false. ca_sgs = .false. nca = 1 - ncells = 5 - nlives = 30 - nseed = 1000000 + scells = 2600 + tlives = 1800 + nseed = 1 nfracseed = 0.5 - nthresh = 0. - ca_trigger = .true. - ca_entr = .false. + ca_trigger = .false. + ca_entr = .false. ca_closure = .false. ca_global = .false. nca_g = 1 @@ -251,10 +253,10 @@ nlives_g = 100 nseed_g = 100 ca_smooth = .false. - nspinup = 100 + nspinup = 1 iseed_ca = 1 - nsmooth = 1 - ca_amplitude = 0.5 + nsmooth = 100 + ca_amplitude = 0.35 / &gfdl_cloud_microphysics_nml diff --git a/parm/forecast/regional/model_configure.tmp b/parm/forecast/regional/model_configure.tmp index 29e188091..2d98bbc73 100644 --- a/parm/forecast/regional/model_configure.tmp +++ b/parm/forecast/regional/model_configure.tmp @@ -24,8 +24,10 @@ output_1st_tstep_rst: .false. quilting: _quilting_ write_groups: _write_groups_ write_tasks_per_group: _write_tasks_per_group_ +write_dopost: _write_dopost_ +output_history: _output_history_ num_files: 2 -filename_base: 'dyn' 'phy' +filename_base: 'atm' 'sfc' output_file: 'netcdf_parallel' 'netcdf_parallel' ichunk2d: -1 jchunk2d: -1 diff --git a/parm/forecast/regional_hwrf/input.nml.tmp b/parm/forecast/regional_hwrf/input.nml.tmp index f99aef371..b5a1da7f3 100644 --- a/parm/forecast/regional_hwrf/input.nml.tmp +++ b/parm/forecast/regional_hwrf/input.nml.tmp @@ -8,7 +8,7 @@ / &atmos_model_nml - blocksize = 40 + blocksize = _blocksize_ chksum_debug = .false. dycore_only = .false. fdiag = 3 @@ -42,7 +42,7 @@ &fms_nml clock_grain = 'ROUTINE', - domains_stack_size = 12000000, + domains_stack_size = 30000000, print_memory_usage = .false. / @@ -178,8 +178,8 @@ hurr_pbl = .T. ! HWRF moninedmf moninq_fac = -1.0 ! HWRF moninedmf pdfcld = .false. - fhswr = 900. - fhlwr = 900. + fhswr = _fhswr_ + fhlwr = _fhlwr_ ialb = 1 iems = 1 iaer = 111 @@ -245,13 +245,12 @@ do_ca = .false. ca_sgs = .false. nca = 1 - ncells = 5 - nlives = 30 - nseed = 1000000 + scells = 2600 + tlives = 1800 + nseed = 1 nfracseed = 0.5 - nthresh = 0. - ca_trigger = .true. - ca_entr = .false. + ca_trigger = .false. + ca_entr = .false. ca_closure = .false. ca_global = .false. nca_g = 1 @@ -259,10 +258,10 @@ nlives_g = 100 nseed_g = 100 ca_smooth = .false. - nspinup = 100 + nspinup = 1 iseed_ca = 1 - nsmooth = 1 - ca_amplitude = 0.5 + nsmooth = 100 + ca_amplitude = 0.35 / &gfdl_cloud_microphysics_nml diff --git a/parm/forecast/regional_hwrf/model_configure.tmp b/parm/forecast/regional_hwrf/model_configure.tmp index 29e188091..2d98bbc73 100644 --- a/parm/forecast/regional_hwrf/model_configure.tmp +++ b/parm/forecast/regional_hwrf/model_configure.tmp @@ -24,8 +24,10 @@ output_1st_tstep_rst: .false. quilting: _quilting_ write_groups: _write_groups_ write_tasks_per_group: _write_tasks_per_group_ +write_dopost: _write_dopost_ +output_history: _output_history_ num_files: 2 -filename_base: 'dyn' 'phy' +filename_base: 'atm' 'sfc' output_file: 'netcdf_parallel' 'netcdf_parallel' ichunk2d: -1 jchunk2d: -1 diff --git a/parm/hafs.conf b/parm/hafs.conf index 0cac7f303..0784173b5 100644 --- a/parm/hafs.conf +++ b/parm/hafs.conf @@ -177,9 +177,14 @@ jend_nest_ens={grid/jend_nest} [gsi_vr] [gsi] -use_bufr_nr=no ;; use non-restricted version of observational bufr files +use_bufr_nr=no ;; use non-restricted version of observational bufr files +grid_ratio_fv3_regional=1 ;; ratio of analysis grid to fv3 model grid in fv3 grid units +s_ens_h=150 ;; homogeneous isotropic horizontal ensemble localization scale (km) +s_ens_v=-0.5 ;; vertical localization scale [enkf] +corrlength=500 ;; length for horizontal localization in km +lnsigcutoff=1.3 ;; length for vertical localization [merge] @@ -189,6 +194,10 @@ ccpp_suite_regional=HAFS_v0_gfdlmp_tedmf ccpp_suite_glob=HAFS_v0_gfdlmp_tedmf ccpp_suite_nest=HAFS_v0_gfdlmp_tedmf +#radiation scheme calling time steps +fhswr=1800. +fhlwr=1800. + # nsst related namelist options # Choose nstf_name=2,0,0,0,0 when nemsio type ictype # Choose nstf_name=2,1,0,0,0 when grib2 type ictype @@ -221,6 +230,8 @@ npz=64 quilting=.true. write_groups=2 write_tasks_per_group=48 +write_dopost=.true. +output_history=.false. app_domain=regional ;; write_grid_component output domain: regional, nest, or global # The option for output grid type: rotated_latlon, regional_latlon @@ -290,6 +301,8 @@ npz_ens={forecast/npz} quilting_ens={forecast/quilting} write_groups_ens={forecast/write_groups} write_tasks_per_group_ens={forecast/write_tasks_per_group} +write_dopost_ens={forecast/write_dopost} +output_history_ens={forecast/output_history} # Placeholders currently, not implemented yet output_grid_ens={forecast/output_grid_ens} diff --git a/parm/hafs_holdvars.conf b/parm/hafs_holdvars.conf index f90b1206e..7b3d9447b 100644 --- a/parm/hafs_holdvars.conf +++ b/parm/hafs_holdvars.conf @@ -34,12 +34,6 @@ ENVEQUIV={WHERE_AM_I} ;; Present cluster name #JET_NAME={ENV[JET_NAME]} #WHERE_AM_I={ENV[ENVEQUIV]} -nstf_n1={forecast/nstf_n1} -nstf_n2={forecast/nstf_n2} -nstf_n3={forecast/nstf_n3} -nstf_n4={forecast/nstf_n4} -nstf_n5={forecast/nstf_n5} - CASE={grid/CASE} LEVS={grid/LEVS} gtype={grid/gtype} @@ -96,6 +90,11 @@ npy_ens={forecast_ens/npy_ens} npz_ens={forecast_ens/npz_ens} use_bufr_nr={gsi/use_bufr_nr} +grid_ratio_fv3_regional={gsi/grid_ratio_fv3_regional} +s_ens_h={gsi/s_ens_h} +s_ens_v={gsi/s_ens_v} +corrlength={enkf/corrlength} +lnsigcutoff={enkf/lnsigcutoff} ccpp_suite_regional={forecast/ccpp_suite_regional} ccpp_suite_glob={forecast/ccpp_suite_glob} @@ -106,6 +105,8 @@ restart_interval={forecast/restart_interval} quilting={forecast/quilting} write_groups={forecast/write_groups} write_tasks_per_group={forecast/write_tasks_per_group} +write_dopost={forecast/write_dopost} +output_history={forecast/output_history} glob_k_split={forecast/glob_k_split} glob_n_split={forecast/glob_n_split} @@ -122,6 +123,14 @@ npx={forecast/npx} npy={forecast/npy} npz={forecast/npz} +fhswr={forecast/fhswr} +fhlwr={forecast/fhlwr} +nstf_n1={forecast/nstf_n1} +nstf_n2={forecast/nstf_n2} +nstf_n3={forecast/nstf_n3} +nstf_n4={forecast/nstf_n4} +nstf_n5={forecast/nstf_n5} + app_domain={forecast/app_domain} output_grid={forecast/output_grid} output_grid_cen_lon={forecast/output_grid_cen_lon} @@ -157,6 +166,8 @@ restart_interval_ens={forecast_ens/restart_interval_ens} quilting_ens={forecast_ens/quilting_ens} write_groups_ens={forecast_ens/write_groups_ens} write_tasks_per_group_ens={forecast_ens/write_tasks_per_group_ens} +write_dopost_ens={forecast_ens/write_dopost_ens} +output_history_ens={forecast_ens/output_history_ens} glob_layoutx_ens={forecast_ens/glob_layoutx_ens} glob_layouty_ens={forecast_ens/glob_layouty_ens} glob_npx_ens={forecast_ens/glob_npx_ens} diff --git a/parm/hafs_holdvars.txt b/parm/hafs_holdvars.txt index 3a4f69c5b..0a4790db9 100644 --- a/parm/hafs_holdvars.txt +++ b/parm/hafs_holdvars.txt @@ -62,12 +62,6 @@ export ictype_ens={ictype_ens} export bctype_ens={bctype_ens} export halo_blend={halo_blend} -export nstf_n1={nstf_n1} -export nstf_n2={nstf_n2} -export nstf_n3={nstf_n3} -export nstf_n4={nstf_n4} -export nstf_n5={nstf_n5} - export CASE={CASE} export LEVS={LEVS} export gtype={gtype} @@ -87,6 +81,11 @@ export halo0={halo0} export vcoord_file_target_grid={vcoord_file_target_grid} export use_bufr_nr={use_bufr_nr} +export grid_ratio_fv3_regional={grid_ratio_fv3_regional} +export s_ens_h={s_ens_h} +export s_ens_v={s_ens_v} +export corrlength={corrlength} +export lnsigcutoff={lnsigcutoff} export ccpp_suite_regional={ccpp_suite_regional} export ccpp_suite_glob={ccpp_suite_glob} @@ -97,6 +96,8 @@ export restart_interval={restart_interval} export quilting={quilting} export write_groups={write_groups} export write_tasks_per_group={write_tasks_per_group} +export write_dopost={write_dopost} +export output_history={output_history} export glob_k_split={glob_k_split} export glob_n_split={glob_n_split} @@ -113,6 +114,14 @@ export npx={npx} export npy={npy} export npz={npz} +export fhswr={fhswr} +export fhlwr={fhlwr} +export nstf_n1={nstf_n1} +export nstf_n2={nstf_n2} +export nstf_n3={nstf_n3} +export nstf_n4={nstf_n4} +export nstf_n5={nstf_n5} + export app_domain={app_domain} export output_grid={output_grid} export output_grid_cen_lon={output_grid_cen_lon} @@ -154,6 +163,8 @@ export restart_interval_ens={restart_interval_ens} export quilting_ens={quilting_ens} export write_groups_ens={write_groups_ens} export write_tasks_per_group_ens={write_tasks_per_group_ens} +export write_dopost_ens={write_dopost_ens} +export output_history_ens={output_history_ens} export k_split_ens={k_split_ens} export n_split_ens={n_split_ens} export glob_layoutx_ens={glob_layoutx_ens} diff --git a/parm/hafsv0p2aL91_AL.conf b/parm/hafsv0p2aL91_AL.conf new file mode 100644 index 000000000..e4f809c56 --- /dev/null +++ b/parm/hafsv0p2aL91_AL.conf @@ -0,0 +1,72 @@ +# This is a UNIX conf file that contains ALL information relating to +# the HAFS basin-focused standalone regional configuration. +# +[config] +# Specify the domain center Latitude and Longitude +domlat=25.0 +domlon=-62.0 +# Same as domlat and domlon but vitals formatted +vitalsdomlat=250N +vitalsdomlon=620W + +# HAFS launcher requires vitals and a storm. +# This is a default minimum vitals file for a fake storm. +# The format of the missing value fields was based on the log +# output returned when running the launcher after the vitals have +# been "cleaned" up. That is, if you enter the fields as all -999 values, +# the "cleaned" output is returned. In essence I'm treating the vitals +# module as a factory in the sense that it knows the correct format. +# NHC 00L FAKE 20120710 0000 250N 0800W -99 -99 -999 -999 -099 -9 -99 -999 -999 -999 -999 M +# fakestormid is a config option set in the launcher and is the +# last storm id in the list of storms. +fakestormid=00L +fakestormname=NATL +fakestormorg=NHC +fakestorm_vitals={fakestormorg} {fakestormid} {fakestormname} {YMD} {HH}{min} {vitalsdomlat} {vitalsdomlon} -99 -99 -999 -999 -099 -9 -99 -999 -999 -999 -999 M + +[dir] +PARMforecast={PARMhafs}/forecast/regional + +[grid] +CASE=C3089 ;; FV3 resolution +LEVS=92 ;; Model vertical levels: 65, 128, 76, 86, and 97 +gtype=regional ;; grid type: uniform, stretch, nest, or regional +# If gridfixdir is provided and the dir exists, then use the pre-generated static grid fix files under gridfixdir +#gridfixdir=/let/hafs_grid/generate/grid +gridfixdir={HOMEhafs}/fix/fix_fv3/ESG_C3089_62W25N_3120x2160 +# Otherwise, will generate the model grid according to the following grid parameters +# Need for grid types: stretch, nest and regional +stretch_fac=1.0001 ;; Stretching factor for the grid +target_lon={domlon} ;; center longitude of the highest resolution tile +target_lat={domlat} ;; center latitude of the highest resolution tile +# Need for grid types: nest and regional +refine_ratio=4 ;; Specify the refinement ratio for nest grid +istart_nest=46 +jstart_nest=168 +iend_nest=1485 +jend_nest=1367 + +[forecast] +k_split=3 +n_split=5 +layoutx=40 +layouty=30 +npx=3121 +npy=2161 +npz=91 + +restart_interval="240" ;; restart interval in hours for the forecast + +write_dopost=.true. +output_history=.false. + +output_grid=regional_latlon +output_grid_cen_lon=-62.0 ;; central longitude +output_grid_cen_lat=25.8 ;; central latitude +output_grid_lon_span=109.5 ;; output domain span for longitude in regular latlon coordinate system (in degrees) +output_grid_lat_span=63.6 ;; output domain span for latitude in regular latlon coordinate system (in degrees) +output_grid_dlon=0.03 ;; output grid spacing dlon . . . . +output_grid_dlat=0.03 ;; output grid spacing dlat . . . . + +[rocotostr] +FORECAST_RESOURCES=FORECAST_RESOURCES_regional_{forecast/layoutx}x{forecast/layouty}io{forecast/write_groups}x{forecast/write_tasks_per_group}_omp2 diff --git a/parm/hafsv0p2aL91_EP.conf b/parm/hafsv0p2aL91_EP.conf new file mode 100644 index 000000000..b38ab799c --- /dev/null +++ b/parm/hafsv0p2aL91_EP.conf @@ -0,0 +1,72 @@ +# This is a UNIX conf file that contains ALL information relating to +# the HAFS basin-focused standalone regional configuration. +# +[config] +# Specify the domain center Latitude and Longitude +domlat=25.0 +domlon=-122.0 +# Same as domlat and domlon but vitals formatted +vitalsdomlat=250N +vitalsdomlon=1220W + +# HAFS launcher requires vitals and a storm. +# This is a default minimum vitals file for a fake storm. +# The format of the missing value fields was based on the log +# output returned when running the launcher after the vitals have +# been "cleaned" up. That is, if you enter the fields as all -999 values, +# the "cleaned" output is returned. In essence I'm treating the vitals +# module as a factory in the sense that it knows the correct format. +# NHC 00L FAKE 20120710 0000 250N 0800W -99 -99 -999 -999 -099 -9 -99 -999 -999 -999 -999 M +# fakestormid is a config option set in the launcher and is the +# last storm id in the list of storms. +fakestormid=00E +fakestormname=EPAC +fakestormorg=NHC +fakestorm_vitals={fakestormorg} {fakestormid} {fakestormname} {YMD} {HH}{min} {vitalsdomlat} {vitalsdomlon} -99 -99 -999 -999 -099 -9 -99 -999 -999 -999 -999 M + +[dir] +PARMforecast={PARMhafs}/forecast/regional + +[grid] +CASE=C3089 ;; FV3 resolution +LEVS=92 ;; Model vertical levels: 65, 128, 76, 86, and 97 +gtype=regional ;; grid type: uniform, stretch, nest, or regional +# If gridfixdir is provided and the dir exists, then use the pre-generated static grid fix files under gridfixdir +#gridfixdir=/let/hafs_grid/generate/grid +gridfixdir={HOMEhafs}/fix/fix_fv3/ESG_C3089_122W25N_3120x2160 +# Otherwise, will generate the model grid according to the following grid parameters +# Need for grid types: stretch, nest and regional +stretch_fac=1.0001 ;; Stretching factor for the grid +target_lon={domlon} ;; center longitude of the highest resolution tile +target_lat={domlat} ;; center latitude of the highest resolution tile +# Need for grid types: nest and regional +refine_ratio=4 ;; Specify the refinement ratio for nest grid +istart_nest=46 +jstart_nest=168 +iend_nest=1485 +jend_nest=1367 + +[forecast] +k_split=3 +n_split=5 +layoutx=40 +layouty=30 +npx=3121 +npy=2161 +npz=91 + +restart_interval="240" ;; restart interval in hours for the forecast + +write_dopost=.true. +output_history=.false. + +output_grid=regional_latlon +output_grid_cen_lon=-122.0 ;; central longitude +output_grid_cen_lat=25.8 ;; central latitude +output_grid_lon_span=109.5 ;; output domain span for longitude in regular latlon coordinate system (in degrees) +output_grid_lat_span=63.6 ;; output domain span for latitude in regular latlon coordinate system (in degrees) +output_grid_dlon=0.03 ;; output grid spacing dlon . . . . +output_grid_dlat=0.03 ;; output grid spacing dlat . . . . + +[rocotostr] +FORECAST_RESOURCES=FORECAST_RESOURCES_regional_{forecast/layoutx}x{forecast/layouty}io{forecast/write_groups}x{forecast/write_tasks_per_group}_omp2 diff --git a/parm/hafsv0p2aL91_WP.conf b/parm/hafsv0p2aL91_WP.conf new file mode 100644 index 000000000..a0ae751f7 --- /dev/null +++ b/parm/hafsv0p2aL91_WP.conf @@ -0,0 +1,72 @@ +# This is a UNIX conf file that contains ALL information relating to +# the HAFS basin-focused standalone regional configuration. +# +[config] +# Specify the domain center Latitude and Longitude +domlat=25.0 +domlon=140.0 +# Same as domlat and domlon but vitals formatted +vitalsdomlat=250N +vitalsdomlon=1400E + +# HAFS launcher requires vitals and a storm. +# This is a default minimum vitals file for a fake storm. +# The format of the missing value fields was based on the log +# output returned when running the launcher after the vitals have +# been "cleaned" up. That is, if you enter the fields as all -999 values, +# the "cleaned" output is returned. In essence I'm treating the vitals +# module as a factory in the sense that it knows the correct format. +# NHC 00L FAKE 20120710 0000 250N 0800W -99 -99 -999 -999 -099 -9 -99 -999 -999 -999 -999 M +# fakestormid is a config option set in the launcher and is the +# last storm id in the list of storms. +fakestormid=00W +fakestormname=WPAC +fakestormorg=JTWC +fakestorm_vitals={fakestormorg} {fakestormid} {fakestormname} {YMD} {HH}{min} {vitalsdomlat} {vitalsdomlon} -99 -99 -999 -999 -099 -9 -99 -999 -999 -999 -999 M + +[dir] +PARMforecast={PARMhafs}/forecast/regional + +[grid] +CASE=C3089 ;; FV3 resolution +LEVS=92 ;; Model vertical levels: 65, 128, 76, 86, and 97 +gtype=regional ;; grid type: uniform, stretch, nest, or regional +# If gridfixdir is provided and the dir exists, then use the pre-generated static grid fix files under gridfixdir +#gridfixdir=/let/hafs_grid/generate/grid +gridfixdir={HOMEhafs}/fix/fix_fv3/ESG_C3089_140E25N_3120x2160 +# Otherwise, will generate the model grid according to the following grid parameters +# Need for grid types: stretch, nest and regional +stretch_fac=1.0001 ;; Stretching factor for the grid +target_lon={domlon} ;; center longitude of the highest resolution tile +target_lat={domlat} ;; center latitude of the highest resolution tile +# Need for grid types: nest and regional +refine_ratio=4 ;; Specify the refinement ratio for nest grid +istart_nest=46 +jstart_nest=168 +iend_nest=1485 +jend_nest=1367 + +[forecast] +k_split=3 +n_split=5 +layoutx=40 +layouty=30 +npx=3121 +npy=2161 +npz=91 + +restart_interval="240" ;; restart interval in hours for the forecast + +write_dopost=.true. +output_history=.false. + +output_grid=regional_latlon +output_grid_cen_lon=140.0 ;; central longitude +output_grid_cen_lat=25.8 ;; central latitude +output_grid_lon_span=109.5 ;; output domain span for longitude in regular latlon coordinate system (in degrees) +output_grid_lat_span=63.6 ;; output domain span for latitude in regular latlon coordinate system (in degrees) +output_grid_dlon=0.03 ;; output grid spacing dlon . . . . +output_grid_dlat=0.03 ;; output grid spacing dlat . . . . + +[rocotostr] +FORECAST_RESOURCES=FORECAST_RESOURCES_regional_{forecast/layoutx}x{forecast/layouty}io{forecast/write_groups}x{forecast/write_tasks_per_group}_omp2 diff --git a/parm/hafsv0p2a_phase3_AL.conf b/parm/hafsv0p2a_phase3_AL.conf new file mode 100644 index 000000000..e4f809c56 --- /dev/null +++ b/parm/hafsv0p2a_phase3_AL.conf @@ -0,0 +1,72 @@ +# This is a UNIX conf file that contains ALL information relating to +# the HAFS basin-focused standalone regional configuration. +# +[config] +# Specify the domain center Latitude and Longitude +domlat=25.0 +domlon=-62.0 +# Same as domlat and domlon but vitals formatted +vitalsdomlat=250N +vitalsdomlon=620W + +# HAFS launcher requires vitals and a storm. +# This is a default minimum vitals file for a fake storm. +# The format of the missing value fields was based on the log +# output returned when running the launcher after the vitals have +# been "cleaned" up. That is, if you enter the fields as all -999 values, +# the "cleaned" output is returned. In essence I'm treating the vitals +# module as a factory in the sense that it knows the correct format. +# NHC 00L FAKE 20120710 0000 250N 0800W -99 -99 -999 -999 -099 -9 -99 -999 -999 -999 -999 M +# fakestormid is a config option set in the launcher and is the +# last storm id in the list of storms. +fakestormid=00L +fakestormname=NATL +fakestormorg=NHC +fakestorm_vitals={fakestormorg} {fakestormid} {fakestormname} {YMD} {HH}{min} {vitalsdomlat} {vitalsdomlon} -99 -99 -999 -999 -099 -9 -99 -999 -999 -999 -999 M + +[dir] +PARMforecast={PARMhafs}/forecast/regional + +[grid] +CASE=C3089 ;; FV3 resolution +LEVS=92 ;; Model vertical levels: 65, 128, 76, 86, and 97 +gtype=regional ;; grid type: uniform, stretch, nest, or regional +# If gridfixdir is provided and the dir exists, then use the pre-generated static grid fix files under gridfixdir +#gridfixdir=/let/hafs_grid/generate/grid +gridfixdir={HOMEhafs}/fix/fix_fv3/ESG_C3089_62W25N_3120x2160 +# Otherwise, will generate the model grid according to the following grid parameters +# Need for grid types: stretch, nest and regional +stretch_fac=1.0001 ;; Stretching factor for the grid +target_lon={domlon} ;; center longitude of the highest resolution tile +target_lat={domlat} ;; center latitude of the highest resolution tile +# Need for grid types: nest and regional +refine_ratio=4 ;; Specify the refinement ratio for nest grid +istart_nest=46 +jstart_nest=168 +iend_nest=1485 +jend_nest=1367 + +[forecast] +k_split=3 +n_split=5 +layoutx=40 +layouty=30 +npx=3121 +npy=2161 +npz=91 + +restart_interval="240" ;; restart interval in hours for the forecast + +write_dopost=.true. +output_history=.false. + +output_grid=regional_latlon +output_grid_cen_lon=-62.0 ;; central longitude +output_grid_cen_lat=25.8 ;; central latitude +output_grid_lon_span=109.5 ;; output domain span for longitude in regular latlon coordinate system (in degrees) +output_grid_lat_span=63.6 ;; output domain span for latitude in regular latlon coordinate system (in degrees) +output_grid_dlon=0.03 ;; output grid spacing dlon . . . . +output_grid_dlat=0.03 ;; output grid spacing dlat . . . . + +[rocotostr] +FORECAST_RESOURCES=FORECAST_RESOURCES_regional_{forecast/layoutx}x{forecast/layouty}io{forecast/write_groups}x{forecast/write_tasks_per_group}_omp2 diff --git a/parm/hafsv0p2a_phase3_da_AL.conf b/parm/hafsv0p2a_phase3_da_AL.conf new file mode 100644 index 000000000..6d22d5041 --- /dev/null +++ b/parm/hafsv0p2a_phase3_da_AL.conf @@ -0,0 +1,105 @@ +# This is a UNIX conf file that contains ALL information relating to +# the HAFS basin-focused standalone regional configuration. +# +[config] +# Specify the domain center Latitude and Longitude +domlat=25.0 +domlon=-62.0 +# Same as domlat and domlon but vitals formatted +vitalsdomlat=250N +vitalsdomlon=620W + +# HAFS launcher requires vitals and a storm. +# This is a default minimum vitals file for a fake storm. +# The format of the missing value fields was based on the log +# output returned when running the launcher after the vitals have +# been "cleaned" up. That is, if you enter the fields as all -999 values, +# the "cleaned" output is returned. In essence I'm treating the vitals +# module as a factory in the sense that it knows the correct format. +# NHC 00L FAKE 20120710 0000 250N 0800W -99 -99 -999 -999 -099 -9 -99 -999 -999 -999 -999 M +# fakestormid is a config option set in the launcher and is the +# last storm id in the list of storms. +fakestormid=00L +fakestormname=NATL +fakestormorg=NHC +fakestorm_vitals={fakestormorg} {fakestormid} {fakestormname} {YMD} {HH}{min} {vitalsdomlat} {vitalsdomlon} -99 -99 -999 -999 -099 -9 -99 -999 -999 -999 -999 M + +# Dual-resolution ensemble members +GRID_RATIO_ENS=2 + +[dir] +PARMforecast={PARMhafs}/forecast/regional + +[grid] +CASE=C3089 ;; FV3 resolution +LEVS=92 ;; Model vertical levels: 65, 128, 76, 86, and 97 +gtype=regional ;; grid type: uniform, stretch, nest, or regional +# If gridfixdir is provided and the dir exists, then use the pre-generated static grid fix files under gridfixdir +#gridfixdir=/let/hafs_grid/generate/grid +gridfixdir={HOMEhafs}/fix/fix_fv3/ESG_C3089_62W25N_3120x2160 +# Otherwise, will generate the model grid according to the following grid parameters +# Need for grid types: stretch, nest and regional +stretch_fac=1.0001 ;; Stretching factor for the grid +target_lon={domlon} ;; center longitude of the highest resolution tile +target_lat={domlat} ;; center latitude of the highest resolution tile +# Need for grid types: nest and regional +refine_ratio=4 ;; Specify the refinement ratio for nest grid +istart_nest=46 +jstart_nest=168 +iend_nest=1485 +jend_nest=1367 + +[grid_ens] +CASE_ENS=C1545 ;; FV3 resolution +LEVS_ENS=92 ;; Model vertical levels: 65 +gtype_ens=regional ;; grid type: uniform, stretch, nest, or regional +#gridfixdir_ens=/let/hafs_grid/generate/grid_ens +gridfixdir_ens={HOMEhafs}/fix/fix_fv3/ESG_C1545_62W25N_1560x1080 +stretch_fac_ens=1.0001 ;; Stretching factor for the grid +target_lon_ens={domlon} ;; center longitude of the highest resolution tile +target_lat_ens={domlat} ;; center latitude of the highest resolution tile +refine_ratio_ens=2 ;; Specify the refinement ratio for nest grid +istart_nest_ens=46 +jstart_nest_ens=168 +iend_nest_ens=1485 +jend_nest_ens=1376 + +[forecast] +k_split=3 +n_split=5 +layoutx=40 +layouty=30 +npx=3121 +npy=2161 +npz=91 + +restart_interval="3 6 9" ;; restart interval in hours for the forecast + +write_dopost=.true. +output_history=.false. + +output_grid=regional_latlon +output_grid_cen_lon=-62.0 ;; central longitude +output_grid_cen_lat=25.8 ;; central latitude +output_grid_lon_span=109.5 ;; output domain span for longitude in regular latlon coordinate system (in degrees) +output_grid_lat_span=63.6 ;; output domain span for latitude in regular latlon coordinate system (in degrees) +output_grid_dlon=0.03 ;; output grid spacing dlon . . . . +output_grid_dlat=0.03 ;; output grid spacing dlat . . . . + +[forecast_ens] +k_split_ens=2 +n_split_ens=5 +layoutx_ens=20 +layouty_ens=12 +npx_ens=1561 +npy_ens=1081 +npz_ens=91 + +restart_interval_ens="6 12" ;; restart interval in hours for the ensda member forecast + +output_grid_dlon_ens=0.06 ;; output grid spacing dlon . . . . +output_grid_dlat_ens=0.06 ;; output grid spacing dlat . . . . + +[rocotostr] +FORECAST_RESOURCES=FORECAST_RESOURCES_regional_{forecast/layoutx}x{forecast/layouty}io{forecast/write_groups}x{forecast/write_tasks_per_group}_omp2 +FORECAST_ENS_RESOURCES=FORECAST_ENS_RESOURCES_regional_{forecast_ens/layoutx_ens}x{forecast_ens/layouty_ens}io{forecast_ens/write_groups_ens}x{forecast_ens/write_tasks_per_group_ens}_omp2 diff --git a/parm/hafsv0p2a_regional_da_AL.conf b/parm/hafsv0p2a_regional_da_AL.conf new file mode 100644 index 000000000..7dcc37aea --- /dev/null +++ b/parm/hafsv0p2a_regional_da_AL.conf @@ -0,0 +1,105 @@ +# This is a UNIX conf file that contains ALL information relating to +# the HAFS basin-focused standalone regional configuration. +# +[config] +# Specify the domain center Latitude and Longitude +domlat=25.0 +domlon=-60.0 +# Same as domlat and domlon but vitals formatted +vitalsdomlat=250N +vitalsdomlon=600W + +# HAFS launcher requires vitals and a storm. +# This is a default minimum vitals file for a fake storm. +# The format of the missing value fields was based on the log +# output returned when running the launcher after the vitals have +# been "cleaned" up. That is, if you enter the fields as all -999 values, +# the "cleaned" output is returned. In essence I'm treating the vitals +# module as a factory in the sense that it knows the correct format. +# NHC 00L FAKE 20120710 0000 250N 0800W -99 -99 -999 -999 -099 -9 -99 -999 -999 -999 -999 M +# fakestormid is a config option set in the launcher and is the +# last storm id in the list of storms. +fakestormid=00L +fakestormname=NATL +fakestormorg=NHC +fakestorm_vitals={fakestormorg} {fakestormid} {fakestormname} {YMD} {HH}{min} {vitalsdomlat} {vitalsdomlon} -99 -99 -999 -999 -099 -9 -99 -999 -999 -999 -999 M + +# Dual-resolution ensemble members +GRID_RATIO_ENS=2 + +[dir] +PARMforecast={PARMhafs}/forecast/regional + +[grid] +CASE=C3082 ;; FV3 resolution +LEVS=82 ;; Model vertical levels: 65, 128, 76, 86, and 97 +gtype=regional ;; grid type: uniform, stretch, nest, or regional +# If gridfixdir is provided and the dir exists, then use the pre-generated static grid fix files under gridfixdir +#gridfixdir=/let/hafs_grid/generate/grid +gridfixdir={HOMEhafs}/fix/fix_fv3/ESG_C3082_60W25N_2880x2160 +# Otherwise, will generate the model grid according to the following grid parameters +# Need for grid types: stretch, nest and regional +stretch_fac=1.0001 ;; Stretching factor for the grid +target_lon={domlon} ;; center longitude of the highest resolution tile +target_lat={domlat} ;; center latitude of the highest resolution tile +# Need for grid types: nest and regional +refine_ratio=4 ;; Specify the refinement ratio for nest grid +istart_nest=46 +jstart_nest=168 +iend_nest=1485 +jend_nest=1367 + +[grid_ens] +CASE_ENS=C1541 ;; FV3 resolution +LEVS_ENS=82 ;; Model vertical levels: 65 +gtype_ens=regional ;; grid type: uniform, stretch, nest, or regional +#gridfixdir_ens=/let/hafs_grid/generate/grid_ens +gridfixdir_ens={HOMEhafs}/fix/fix_fv3/ESG_C1541_60W25N_1440x1080 +stretch_fac_ens=1.0001 ;; Stretching factor for the grid +target_lon_ens={domlon} ;; center longitude of the highest resolution tile +target_lat_ens={domlat} ;; center latitude of the highest resolution tile +refine_ratio_ens=2 ;; Specify the refinement ratio for nest grid +istart_nest_ens=46 +jstart_nest_ens=168 +iend_nest_ens=1485 +jend_nest_ens=1376 + +[forecast] +k_split=3 +n_split=5 +layoutx=40 +layouty=30 +npx=2881 +npy=2161 +npz=81 + +restart_interval="3 6 9" ;; restart interval in hours for the forecast + +write_dopost=.true. +output_history=.false. + +output_grid=regional_latlon +output_grid_cen_lon=-62.0 ;; central longitude +output_grid_cen_lat=25.8 ;; central latitude +output_grid_lon_span=109.5 ;; output domain span for longitude in regular latlon coordinate system (in degrees) +output_grid_lat_span=63.6 ;; output domain span for latitude in regular latlon coordinate system (in degrees) +output_grid_dlon=0.03 ;; output grid spacing dlon . . . . +output_grid_dlat=0.03 ;; output grid spacing dlat . . . . + +[forecast_ens] +k_split_ens=2 +n_split_ens=5 +layoutx_ens=20 +layouty_ens=12 +npx_ens=1441 +npy_ens=1081 +npz_ens=81 + +restart_interval_ens="6 12" ;; restart interval in hours for the ensda member forecast + +output_grid_dlon_ens=0.06 ;; output grid spacing dlon . . . . +output_grid_dlat_ens=0.06 ;; output grid spacing dlat . . . . + +[rocotostr] +FORECAST_RESOURCES=FORECAST_RESOURCES_regional_{forecast/layoutx}x{forecast/layouty}io{forecast/write_groups}x{forecast/write_tasks_per_group}_omp2 +FORECAST_ENS_RESOURCES=FORECAST_ENS_RESOURCES_regional_{forecast_ens/layoutx_ens}x{forecast_ens/layouty_ens}io{forecast_ens/write_groups_ens}x{forecast_ens/write_tasks_per_group_ens}_omp2 diff --git a/parm/hycom/regional/hafs_hycom_hat10.basin.patch.input.120 b/parm/hycom/regional/hafs_hycom_hat10.basin.patch.input.120 index c4ae771e0..9bc393e39 100644 --- a/parm/hycom/regional/hafs_hycom_hat10.basin.patch.input.120 +++ b/parm/hycom/regional/hafs_hycom_hat10.basin.patch.input.120 @@ -1,42 +1,42 @@ npes npe mpe idm jdm ibig jbig nreg minsea maxsea avesea - 120 20 6 1135 633 190 142 0 4228 4407 4332 + 120 20 6 1135 633 292 120 0 4485 4715 4627 -ispt( 1) = 181 308 498 554 599 630 661 692 - 723 754 784 815 846 876 907 937 - 968 999 1030 1067 -iipe( 1) = 127 190 56 45 31 31 31 31 - 31 30 31 31 30 31 30 31 - 31 31 37 69 -ispt( 2) = 18 184 229 274 319 371 416 459 - 503 547 590 634 678 721 764 807 - 851 894 938 981 -iipe( 2) = 166 45 45 45 52 45 43 44 - 44 43 44 44 43 43 43 44 - 43 44 43 56 -ispt( 3) = 1 61 113 169 227 288 339 389 - 438 488 537 587 637 686 736 785 - 835 885 934 984 -iipe( 3) = 60 52 56 58 61 51 50 49 - 50 49 50 50 49 50 49 50 - 50 49 50 77 -ispt( 4) = 11 117 217 269 318 366 415 464 - 512 560 608 657 706 754 802 850 - 899 948 996 1045 -iipe( 4) = 106 100 52 49 48 49 49 48 - 48 48 49 49 48 48 48 49 - 49 48 49 75 -ispt( 5) = 221 313 356 399 442 484 527 570 - 613 656 699 742 785 828 871 914 - 957 1000 1043 1086 -iipe( 5) = 92 43 43 43 42 43 43 43 - 43 43 43 43 43 43 43 43 - 43 43 43 50 -ispt( 6) = 286 382 430 474 512 550 589 628 - 666 704 742 780 818 857 895 933 - 972 1010 1048 1086 -iipe( 6) = 96 48 44 38 38 39 39 38 - 38 38 38 38 39 38 38 39 - 38 38 38 50 - -jspt( 1) = 1 143 243 331 420 521 -jjpe( 1) = 142 100 88 89 101 113 +ispt( 1) = 1 43 83 123 164 209 273 565 + 618 659 699 740 781 821 861 901 + 942 983 1023 1064 +iipe( 1) = 42 40 40 41 45 64 292 53 + 41 40 41 41 40 40 40 41 + 41 40 41 72 +ispt( 2) = 1 64 153 222 268 318 374 422 + 470 517 563 609 656 702 748 794 + 841 887 934 981 +iipe( 2) = 63 89 69 46 50 56 48 48 + 47 46 46 47 46 46 46 47 + 46 47 47 78 +ispt( 3) = 1 66 133 184 238 297 354 405 + 453 501 549 597 645 693 741 789 + 837 885 933 981 +iipe( 3) = 65 67 51 54 59 57 51 48 + 48 48 48 48 48 48 48 48 + 48 48 48 65 +ispt( 4) = 8 94 160 241 291 340 390 440 + 489 538 587 637 687 736 785 834 + 884 933 982 1032 +iipe( 4) = 86 66 81 50 49 50 50 49 + 49 49 50 50 49 49 49 50 + 49 49 50 81 +ispt( 5) = 213 306 350 393 436 479 522 566 + 609 652 695 738 781 824 867 911 + 955 998 1041 1084 +iipe( 5) = 93 44 43 43 43 43 44 43 + 43 43 43 43 43 43 44 44 + 43 43 43 52 +ispt( 6) = 276 378 426 470 509 547 586 625 + 663 701 739 778 816 854 893 931 + 970 1009 1047 1085 +iipe( 6) = 102 48 44 39 38 39 39 38 + 38 38 39 38 38 39 38 39 + 39 38 38 51 + +jspt( 1) = 1 117 217 313 407 514 +jjpe( 1) = 116 100 96 94 107 120 diff --git a/parm/hycom/regional/hafs_hycom_hat10.basin.patch.input.60 b/parm/hycom/regional/hafs_hycom_hat10.basin.patch.input.60 index 690396f47..27b3a2baa 100644 --- a/parm/hycom/regional/hafs_hycom_hat10.basin.patch.input.60 +++ b/parm/hycom/regional/hafs_hycom_hat10.basin.patch.input.60 @@ -17,6 +17,6 @@ ispt( 4) = 272 374 435 491 544 596 649 702 755 808 861 914 967 1020 1073 iipe( 4) = 102 61 56 53 52 53 53 53 53 53 53 53 53 53 63 - + jspt( 1) = 1 165 313 459 jjpe( 1) = 164 148 146 175 diff --git a/parm/post/itag b/parm/post/itag new file mode 100644 index 000000000..87ad99e6d --- /dev/null +++ b/parm/post/itag @@ -0,0 +1,4 @@ +&NAMPGB + KPO=47,PO=1000.,975.,950.,925.,900.,875.,850.,825.,800.,775.,750.,725.,700.,675.,650.,625.,600.,575.,550.,525.,500.,475.,450.,425.,400.,375.,350.,325.,300.,275.,250.,225.,200.,175.,150.,125.,100.,70.,50.,30.,20.,10.,7.,5.,3.,2.,1., + / +EOF diff --git a/parm/post/nam_micro_lookup.dat b/parm/post/nam_micro_lookup.dat deleted file mode 100644 index c18d5a717..000000000 Binary files a/parm/post/nam_micro_lookup.dat and /dev/null differ diff --git a/parm/post/nam_micro_lookup.dat b/parm/post/nam_micro_lookup.dat new file mode 120000 index 000000000..43cb01225 --- /dev/null +++ b/parm/post/nam_micro_lookup.dat @@ -0,0 +1 @@ +../../sorc/hafs_post.fd/parm/nam_micro_lookup.dat \ No newline at end of file diff --git a/parm/post/params_grib2_tbl_new b/parm/post/params_grib2_tbl_new deleted file mode 100644 index af3b34150..000000000 --- a/parm/post/params_grib2_tbl_new +++ /dev/null @@ -1,1262 +0,0 @@ - 0 7 11 0 4LFTX - 0 7 193 1 4LFTX - 0 3 19 0 5WAVA - 0 3 197 1 5WAVA - 0 3 15 0 5WAVH - 0 3 193 1 5WAVH - 0 20 106 0 AACOEF - 0 2 11 0 ABSD - 4 2 5 0 ABSFRQ - 0 1 18 0 ABSH - 4 2 6 0 ABSRB - 0 2 10 0 ABSV - 0 18 0 0 ACCES - 0 18 1 0 ACIOD - 2 0 228 1 ACOND - 0 1 224 1 ACPCPN - 0 1 10 0 ACPCP - 0 18 2 0 ACRADP - 10 4 13 0 ACWSRD - 1 2 11 0 ACWSR - 0 20 105 0 AECOEF - 0 20 3 0 AEMFLX - 0 13 0 0 AEROT - 0 2 36 0 AFRWE - 0 20 50 0 AIA - 0 18 10 0 AIRCON - 2 0 208 1 AKHS - 2 0 209 1 AKMS - 0 19 1 0 ALBDO - 0 20 108 0 ALBGRD - 0 20 107 0 ALBSAT - 10 0 38 0 ALCWH - 0 20 110 0 ALEGRD - 0 20 109 0 ALESAT - 10 0 39 0 ALRRC - 0 3 11 0 ALTS - 10 0 37 0 ALTWH - 2 0 219 1 AMIXL - 3 192 11 0 AMSRE10 - 3 192 12 0 AMSRE11 - 3 192 13 0 AMSRE12 - 3 192 10 0 AMSRE9 - 0 20 59 0 ANCON - 3 1 23 0 ANGCOE - 0 20 111 0 ANGSTEXP - 0 20 5 0 ANPEMFLX - 0 20 4 0 ANPMFLX - 10 3 197 1 AOHFLX - 3 1 20 0 AOT06 - 3 1 21 0 AOT08 - 3 1 22 0 AOT16 - 0 20 102 0 AOTK - 0 1 223 1 APCPN - 0 1 8 0 APCP - 0 0 21 0 APTMP - 0 1 221 1 ARAIN - 0 20 8 0 AREMFLX - 0 3 21 0 ASGSO - 0 3 24 0 ASGSO - 10 3 198 1 ASHFL - 0 20 60 0 ASNCON - 0 1 29 0 ASNOW - 0 20 104 0 ASYSFK - 0 190 0 0 ATEXT - 3 1 13 0 ATMDIV - 0 20 101 0 ATMTK - 2 3 201 1 AVSFT - 2 3 200 1 BARET - 10 4 7 0 BATHY - 10 0 44 0 BENINX - 1 0 5 0 BGRUN - 1 0 192 1 BGRUN - 10 4 194 1 BKENG - 0 7 1 0 BLI - 0 7 16 0 BLKRN - 0 2 20 0 BLYDP - 2 0 14 0 BMIXL - 2 0 197 1 BMIXL - 0 7 201 1 BNEGELAY - 2 3 4 0 BOTLST - 0 7 202 1 BPOSELAY - 0 15 1 0 BREF - 3 1 27 0 BRFLF - 0 5 7 0 BRTEMP - 0 4 4 0 BRTMP - 0 15 2 0 BRVEL - 0 15 0 0 BSWID - 4 3 0 0 BTOT - 4 3 1 0 BVEC1 - 4 3 2 0 BVEC2 - 4 3 3 0 BVEC3 - 0 18 18 0 CAACL - 4 8 4 0 CAIIRAD - 0 7 206 1 CANGLE - 2 1 192 1 CANL - 0 7 6 0 CAPE - 0 1 88 0 CATCP - 0 19 29 0 CATEDR - 0 19 22 0 CAT - 0 20 63 0 CAVEMDL - 0 20 70 0 CBECSLSP - 0 6 25 0 CBHE - 0 20 67 0 CBLCLDSP - 0 20 73 0 CBLCSRCP - 3 1 14 0 CBTMP - 3 1 98 0 CCMPEMRR - 2 0 15 0 CCOND - 2 0 199 1 CCOND - 0 6 7 0 CDCA - 0 6 11 0 CDCB - 0 6 22 0 CDCC - 0 17 3 0 CDCDLTFD - 0 6 23 0 CDCIMR - 0 6 2 0 CDCON - 0 6 12 0 CDCTOP - 0 6 8 0 CDCT - 0 17 2 0 CDGDLTFD - 0 6 14 0 CDLYR - 0 6 192 1 CDLYR - 0 4 195 1 CDUVB - 10 0 16 0 CDWW - 0 2 29 0 CD - 0 2 196 1 CD - 0 6 13 0 CEIL - 0 5 197 1 CFNLF - 0 4 199 1 CFNSF - 0 1 34 0 CFRZR - 0 1 193 1 CFRZR - 0 20 54 0 CGDRC - 0 20 53 0 CGPRC - 10 3 2 0 CH - 0 18 17 0 CIAIRC - 0 19 206 1 CICEL - 0 1 35 0 CICEP - 0 1 194 1 CICEP - 10 2 12 0 CICES - 0 6 0 0 CICE - 0 19 208 1 CIFLT - 0 1 82 0 CIMIXR - 0 20 66 0 CINCLDSP - 0 20 69 0 CINCSLSP - 0 20 72 0 CINCSRCP - 0 7 7 0 CIN - 0 20 68 0 CIRELREP - 0 20 74 0 CIRERECP - 2 3 22 0 CISICE - 2 3 20 0 CISOILM - 2 0 23 0 CISOILW - 0 19 207 1 CIVIS - 3 2 9 0 CLDALB - 3 2 10 0 CLDEMISS - 3 2 8 0 CLDIWP - 3 2 7 0 CLDLWP - 3 2 5 0 CLDODEP - 3 2 6 0 CLDPER - 3 2 4 0 CLDPHAS - 3 1 16 0 CLDRAD - 3 2 3 0 CLDTYPE - 0 1 235 1 CLLMR - 3 0 7 0 CLOUDM - 0 1 22 0 CLWMR - 0 2 216 1 CNGWDU - 0 2 217 1 CNGWDV - 0 3 209 1 CNVDEMF - 0 3 208 1 CNVDMF - 0 0 196 1 CNVHR - 0 1 213 1 CNVMR - 0 3 207 1 CNVUMF - 0 2 212 1 CNVU - 0 2 213 1 CNVV - 2 0 13 0 CNWAT - 2 0 196 1 CNWAT - 0 20 56 0 COAIA - 0 20 1 0 COLMD - 0 20 51 0 CONAIR - 0 7 19 0 CONAPES - 0 1 216 1 CONDP - 0 19 16 0 CONTB - 0 19 14 0 CONTET - 0 19 13 0 CONTI - 0 19 24 0 CONTKE - 0 19 15 0 CONTT - 0 19 26 0 CONVO - 0 19 222 1 CONVP - 0 192 6 0 COVMM - 0 192 1 0 COVMZ - 0 2 205 1 COVMZ - 0 192 11 0 COVPSPS - 0 192 8 0 COVQM - 0 192 12 0 COVQQ - 0 192 10 0 COVQVV - 0 192 7 0 COVQZ - 0 192 3 0 COVTM - 0 2 207 1 COVTM - 0 192 14 0 COVTT - 0 192 9 0 COVTVV - 0 192 4 0 COVTW - 0 192 2 0 COVTZ - 0 2 206 1 COVTZ - 0 192 13 0 COVVVVV - 0 192 5 0 COVZZ - 0 1 39 0 CPOFP - 1 1 193 1 CPOFP - 1 1 192 1 CPOZP - 1 1 0 0 CPPOP - 0 1 37 0 CPRAT - 0 1 196 1 CPRAT - 0 1 33 0 CRAIN - 0 1 192 1 CRAIN - 0 20 71 0 CRERELSP - 0 1 76 0 CRRATE - 4 2 9 0 CRTFRQ - 1 2 13 0 CSAFC - 3 1 15 0 CSBTMP - 0 5 196 1 CSDLF - 0 4 196 1 CSDSF - 3 2 0 0 CSKPROB - 3 1 17 0 CSKYRAD - 0 1 36 0 CSNOW - 0 1 195 1 CSNOW - 0 1 58 0 CSRATE - 0 1 55 0 CSRWE - 0 5 195 1 CSULF - 0 4 198 1 CSUSF - 3 1 3 0 CTOPHQI - 3 1 2 0 CTOPH - 3 2 2 0 CTOPRES - 3 2 1 0 CTOPTMP - 0 19 21 0 CTP - 0 6 16 0 CUEFI - 0 6 194 1 CUEFI - 0 6 6 0 CWAT - 0 7 195 1 CWDI - 0 6 15 0 CWORK - 0 6 193 1 CWORK - 0 1 48 0 CWP - 1 1 195 1 CWR - 10 4 195 1 DBSS - 0 7 203 1 DCAPE - 0 20 12 0 DDMFLX - 0 3 30 0 DDRATE - 0 20 15 0 DDVEL - 2 0 30 0 DECF - 0 3 14 0 DENALT - 0 3 10 0 DEN - 0 0 7 0 DEPR - 1 0 13 0 DEPWSS - 10 2 2 0 DICED - 4 4 2 0 DIFEFLUX - 4 4 4 0 DIFIFLUX - 4 4 0 0 DIFPFLUX - 3 6 5 0 DIFSOLEX - 3 6 4 0 DIFSOLIR - 0 4 14 0 DIFSWRF - 10 1 0 0 DIRC - 2 3 14 0 DIREC - 10 0 10 0 DIRPW - 3 6 3 0 DIRSOLEX - 3 6 2 0 DIRSOLIR - 10 0 12 0 DIRSW - 10 0 33 0 DIRWTS - 10 0 32 0 DIRWWW - 1 0 7 0 DISRS - 0 3 6 0 DIST - 0 5 8 0 DLWRFCS - 0 5 3 0 DLWRF - 0 5 192 1 DLWRF - 0 3 28 0 DMFLX - 0 0 6 0 DPT - 2 4 8 0 DRTCODE - 0 18 12 0 DRYDEP - 0 19 237 1 DRYTPROB - 4 7 2 0 DSKDAY - 4 7 1 0 DSKINT - 4 7 3 0 DSKNGT - 10 3 1 0 DSLM - 10 191 3 0 DSLOBSO - 0 191 3 0 DSLOBS - 0 4 52 0 DSWRFCS - 0 4 13 0 DSWRFLX - 0 4 7 0 DSWRF - 0 4 192 1 DSWRF - 0 4 204 1 DTRF - 2 4 7 0 DUFMCODE - 0 4 194 1 DUVB - 0 4 12 0 DWUVR - 0 2 9 0 DZDT - 0 7 207 1 E3KH - 3 2 11 0 EAODR - 3 5 5 0 EBSDSSTS - 3 5 4 0 EBSSTSTD - 0 19 30 0 EDPARM - 0 7 204 1 EFHL - 0 3 222 1 EFSH - 0 7 9 0 EHLX - 4 2 1 0 ELCDEN - 4 0 1 0 ELECTMP - 10 3 194 1 ELEV - 0 19 238 1 ELLINX - 0 0 205 1 ELMELT - 0 191 197 1 ELONN - 0 191 193 1 ELON - 0 1 211 1 EMNP - 0 0 3 0 EPOT - 0 19 218 1 EPSR - 10 3 252 1 EROSNP - 1 0 3 0 ESCT - 0 2 233 1 ESHR - 0 7 205 1 ESP - 3 1 0 0 ESTP - 3 1 4 0 ESTUGRD - 3 1 5 0 ESTVGRD - 0 2 32 0 ETACVV - 10 3 250 1 ETCWL - 4 3 4 0 ETOT - 10 3 193 1 ETSRG - 0 2 38 0 ETSS - 4 6 3 0 EUVIRR - 4 8 1 0 EUVRAD - 2 0 6 0 EVAPT - 0 1 79 0 EVARATE - 2 3 198 1 EVBS - 2 0 229 1 EVCW - 4 3 5 0 EVEC1 - 4 3 6 0 EVEC2 - 4 3 7 0 EVEC3 - 2 0 29 0 EVERF - 0 1 6 0 EVP - 2 0 213 1 EWATR - 0 2 39 0 EWTPARM - 4 6 5 0 F107 - 2 4 3 0 FBAREA - 2 4 10 0 FBUPINX - 0 6 37 0 FCONPC - 3 5 3 0 FDNSSTMP - 2 4 11 0 FDSRTE - 1 0 0 0 FFLDG - 1 0 1 0 FFLDRO - 2 4 6 0 FFMCODE - 0 1 228 1 FICEAC - 0 6 21 0 FICE - 0 6 199 1 FICE - 3 0 9 0 FIREDI - 2 4 1 0 FIREODT - 2 4 0 0 FIREOLK - 2 3 203 1 FLDCP - 1 0 12 0 FLDPSW - 0 19 205 1 FLGHT - 0 7 18 0 FLXRN - 2 4 4 0 FOSINDX - 0 1 67 0 FPRATE - 0 6 32 0 FRACCC - 0 1 43 0 FRAIN - 0 1 202 1 FRAIN - 10 0 63 0 FREWWW - 0 2 30 0 FRICV - 10 0 17 0 FRICV - 0 2 197 1 FRICV - 0 1 227 1 FROZR - 2 3 24 0 FRSTINX - 10 0 64 0 FRWWTSW - 0 1 225 1 FRZR - 10 3 204 1 FRZSPR - 0 1 121 0 FSNOWC - 0 6 36 0 FSTRPC - 2 4 5 0 FWINX - 0 1 95 0 FZPRATE - 0 18 3 0 GDCES - 0 18 4 0 GDIOD - 0 18 5 0 GDRADP - 0 191 1 0 GEOLAT - 0 191 2 0 GEOLON - 0 2 43 0 GEOWD - 0 2 44 0 GEOWS - 2 0 10 0 GFLUX - 2 0 193 1 GFLUX - 2 5 1 0 GLACTMP - 0 3 9 0 GPA - 0 1 75 0 GPRATE - 0 3 4 0 GP - 0 4 3 0 GRAD - 0 7 17 0 GRDRN - 0 1 32 0 GRLE - 3 6 1 0 GSOLEXP - 3 6 0 0 GSOLIRR - 0 2 22 0 GUST - 0 2 210 1 GWDU - 0 2 211 1 GWDV - 0 3 23 0 GWD - 1 0 9 0 GWLOWS - 2 0 214 1 GWREC - 1 0 8 0 GWUPS - 0 1 71 0 HAILMXR - 0 19 198 1 HAILPROB - 0 1 73 0 HAILPR - 0 1 31 0 HAIL - 4 8 2 0 HARAD - 0 19 210 1 HAVNI - 0 6 5 0 HCDC - 0 6 26 0 HCONCB - 0 6 27 0 HCONCT - 0 0 12 0 HEATX - 4 8 6 0 HELCOR - 2 0 24 0 HFLUX - 0 20 62 0 HGTMD - 0 3 211 1 HGTN - 0 3 203 1 HGTX - 0 3 204 1 HGTY - 0 3 5 0 HGT - 0 19 32 0 HIFREL - 2 4 2 0 HINDEX - 0 7 8 0 HLCY - 0 18 16 0 HMXACON - 0 3 18 0 HPBL - 0 3 196 1 HPBL - 4 2 8 0 HPRIMF - 0 19 196 1 HRCONO - 0 15 16 0 HSRHT - 0 15 15 0 HSR - 0 3 7 0 HSTDV - 10 0 3 0 HTSGW - 0 3 3 0 ICAHT - 1 2 7 0 ICECIL - 10 2 0 0 ICEC - 10 2 7 0 ICED - 10 2 6 0 ICEG - 10 2 9 0 ICEPRS - 0 19 27 0 ICESC - 0 19 37 0 ICESEV - 1 2 6 0 ICETIL - 10 2 1 0 ICETK - 10 2 8 0 ICETMP - 0 19 6 0 ICIB - 0 19 20 0 ICIP - 0 19 5 0 ICIT - 0 19 7 0 ICI - 0 1 23 0 ICMR - 0 19 233 1 ICPRB - 0 19 234 1 ICSEV - 1 2 5 0 ICTKIL - 2 0 207 1 ICWAT - 0 1 20 0 ILIQW - 10 0 27 0 IMFTSW - 10 0 26 0 IMFWW - 10 0 25 0 IMWF - 2 4 9 0 INFSINX - 4 4 3 0 INTEFLUX - 10 4 196 1 INTFD - 4 4 5 0 INTIFLUX - 4 4 1 0 INTPFLUX - 4 2 3 0 IONDEN - 4 0 3 0 IONTMP - 0 1 68 0 IPRATE - 3 1 1 0 IRRATE - 10 191 0 0 IRTSEC - 3 5 0 0 ISSTMP - 0 19 235 1 JFWPRB - 10 3 201 1 KENG - 0 7 3 0 KOX - 10 0 43 0 KSSEDW - 0 7 2 0 KX - 0 7 198 1 LAI - 1 2 8 0 LANDIL - 2 0 218 1 LANDN - 2 0 8 0 LANDU - 2 0 0 0 LAND - 0 2 202 1 LAPP - 0 0 8 0 LAPR - 0 2 198 1 LAUV - 0 19 209 1 LAVNI - 0 2 200 1 LAVV - 0 3 205 1 LAYTH - 0 6 3 0 LCDC - 10 3 203 1 LCH - 2 0 28 0 LEAINX - 0 7 10 0 LFTX - 0 7 192 1 LFTX - 0 0 10 0 LHTFL - 0 1 229 1 LICEAC - 0 13 195 1 LIPMF - 2 3 10 0 LIQVSM - 0 15 4 0 LMAXBR - 4 7 0 0 LMBINT - 0 3 210 1 LMH - 0 2 218 1 LMV - 0 2 203 1 LOPP - 0 2 199 1 LOUV - 0 2 201 1 LOVV - 2 3 3 0 LOWLSM - 0 13 194 1 LPMTF - 0 3 201 1 LPSX - 0 3 202 1 LPSY - 0 0 195 1 LRGHR - 0 1 217 1 LRGMR - 2 0 212 1 LSOIL - 2 3 199 1 LSPA - 0 1 54 0 LSPRATE - 0 1 77 0 LSRRATE - 0 1 59 0 LSSRATE - 0 1 56 0 LSSRWE - 0 1 47 0 LSWP - 0 17 0 0 LTNGSD - 0 17 192 1 LTNG - 0 17 1 0 LTPINX - 0 5 2 0 LWAVR - 0 5 194 1 LWHR - 0 4 5 0 LWRAD - 2 3 23 0 LWSNWP - 4 8 7 0 MASK - 0 6 38 0 MASSDCD - 0 6 39 0 MASSDCI - 0 20 0 0 MASSDEN - 0 1 98 0 MASSDG - 0 1 99 0 MASSDH - 0 1 96 0 MASSDR - 0 1 97 0 MASSDS - 0 20 2 0 MASSMR - 0 18 15 0 MAXACON - 0 1 28 0 MAXAH - 0 2 221 1 MAXDVV - 0 2 21 0 MAXGUST - 0 16 198 1 MAXREF - 0 1 27 0 MAXRH - 0 2 220 1 MAXUVV - 0 2 222 1 MAXUW - 0 1 245 1 MAXVIG - 0 2 223 1 MAXVW - 10 0 24 0 MAXWH - 0 6 4 0 MCDC - 0 1 26 0 MCONV - 0 1 197 1 MCONV - 0 6 40 0 MDCCWD - 0 1 38 0 MDIVER - 0 1 112 0 MDLWGVA - 0 1 109 0 MDLWHVA - 0 1 115 0 MDLWSVA - 3 2 30 0 MEACST - 0 6 200 1 MFLUX - 0 2 26 0 MFLX - 0 2 193 1 MFLX - 0 0 14 0 MINDPD - 0 1 198 1 MINRH - 0 19 3 0 MIXHT - 0 19 204 1 MIXLY - 0 1 2 0 MIXR - 0 7 212 1 MLFC - 0 191 195 1 MLYNO - 0 1 114 0 MMLWGDA - 0 1 111 0 MMLWHDA - 0 1 117 0 MMLWSDA - 0 2 6 0 MNTSF - 0 7 200 1 MNUPHL - 10 0 40 0 MNWSOW - 0 20 64 0 MOLRDRYA - 0 20 65 0 MOLRWETA - 10 191 1 0 MOSF - 0 19 195 1 MRCONO - 0 3 192 1 MSLET - 0 3 198 1 MSLMA - 0 20 16 0 MSSRDRYA - 0 20 17 0 MSSRWETA - 10 0 20 0 MSSW - 0 11 1 0 MSTAV - 2 0 11 0 MSTAV - 2 0 194 1 MSTAV - 2 0 7 0 MTERH - 10 4 1 0 MTHA - 10 4 0 0 MTHD - 10 2 11 0 MVCICEP - 10 0 53 0 MWDFSWEL - 10 0 41 0 MWDIRW - 10 0 54 0 MWDSSWEL - 10 0 55 0 MWDTSWEL - 10 0 50 0 MWPFSWEL - 10 0 51 0 MWPSSWEL - 10 0 52 0 MWPTSWEL - 10 0 15 0 MWSPER - 0 19 28 0 MWTURB - 0 19 31 0 MXEDPRM - 0 20 61 0 MXMASSD - 0 19 17 0 MXSALB - 0 19 192 1 MXSALB - 0 7 199 1 MXUPHL - 10 0 30 0 MZPTSW - 10 0 29 0 MZPWW - 10 0 28 0 MZWPER - 0 4 202 1 NBDSF - 0 19 213 1 NBSALB - 0 6 29 0 NCCICE - 0 1 207 1 NCIP - 0 6 28 0 NCONCD - 0 1 9 0 NCPCP - 0 6 31 0 NDCICE - 0 4 203 1 NDDSF - 0 6 30 0 NDENCD - 2 0 31 0 NDVINX - 2 0 217 1 NDVI - 0 191 196 1 NLATN - 0 191 192 1 NLAT - 0 3 206 1 NLGSP - 0 3 25 0 NLPRES - 0 5 6 0 NLWRCS - 0 5 5 0 NLWRF - 0 5 0 0 NLWRS - 0 5 1 0 NLWRT - 3 1 6 0 NPIXU - 0 4 11 0 NSWRFCS - 0 4 9 0 NSWRF - 0 4 0 0 NSWRS - 0 4 1 0 NSWRT - 4 4 6 0 NTRNFLUX - 0 2 37 0 NTSS - 0 1 106 0 NUMDG - 0 1 107 0 NUMDH - 0 1 104 0 NUMDR - 0 1 105 0 NUMDS - 0 2 34 0 NWIND - 0 19 214 1 NWSALB - 10 0 19 0 NWSTR - 0 2 40 0 NWTPARM - 0 14 1 0 O3MR - 0 14 192 1 O3MR - 10 4 197 1 OHC - 0 2 215 1 OMGALF - 10 1 192 1 OMLU - 10 1 193 1 OMLV - 0 3 217 1 ORASNW - 0 3 216 1 ORASSW - 0 3 215 1 ORASS - 0 3 214 1 ORASW - 0 3 213 1 ORCONV - 0 3 221 1 ORLSNW - 0 3 220 1 ORLSSW - 0 3 219 1 ORLSS - 0 3 218 1 ORLSW - 10 4 4 0 OVHD - 10 4 6 0 OVMD - 10 4 5 0 OVSD - 10 3 253 1 OWASHP - 0 14 194 1 OZCAT - 0 14 193 1 OZCON - 0 14 200 1 OZMAX1 - 0 14 201 1 OZMAX8 - 10 3 196 1 P2OMLT - 3 3 2 0 PBINFRC - 3 3 1 0 PBLIFRC - 0 19 12 0 PBLREG - 3 3 0 0 PBMVFRC - 0 1 234 1 PCPDUR - 0 14 202 1 PDMAX1 - 0 14 203 1 PDMAX24 - 10 0 11 0 PERPW - 1 0 16 0 PERRATE - 10 0 13 0 PERSW - 0 1 40 0 PEVAP - 0 1 199 1 PEVAP - 0 1 41 0 PEVPR - 0 1 200 1 PEVPR - 0 4 10 0 PHOTAR - 3 0 8 0 PIXST - 0 7 0 0 PLI - 0 3 200 1 PLPL - 4 2 0 0 PLSMDEN - 10 0 23 0 PMAXWH - 0 13 192 1 PMTC - 0 13 193 1 PMTF - 1 1 2 0 POP - 2 3 9 0 POROS - 2 3 197 1 POROS - 0 0 2 0 POT - 0 14 199 1 POZO - 0 14 198 1 POZT - 0 14 196 1 POZ - 10 0 36 0 PPERTS - 10 0 35 0 PPERWW - 1 1 194 1 PPFFG - 0 1 231 1 PPINDX - 1 1 1 0 PPOSP - 0 1 7 0 PRATE - 4 0 4 0 PRATMP - 0 15 5 0 PREC - 0 3 13 0 PRESALT - 0 3 8 0 PRESA - 0 3 212 1 PRESN - 0 3 0 0 PRES - 0 3 1 0 PRMSL - 0 1 232 1 PROBCIP - 0 19 221 1 PROCON - 4 2 2 0 PROTDEN - 4 0 2 0 PROTTMP - 4 0 5 0 PRPTMP - 0 19 216 1 PRSIGSVR - 0 19 215 1 PRSVR - 10 4 21 0 PRTSAL - 0 19 36 0 PSNOWS - 0 3 2 0 PTEND - 0 1 19 0 PTYPE - 0 2 219 1 PVMWW - 0 2 14 0 PVORT - 0 1 3 0 PWAT - 10 0 46 0 PWAVEDIR - 0 1 30 0 PWCAT - 10 0 34 0 PWPER - 0 1 226 1 PWTHER - 0 1 219 1 QMAX - 0 1 220 1 QMIN - 2 0 215 1 QREC - 0 1 218 1 QZ0 - 0 16 201 1 RADARVIL - 2 3 202 1 RADT - 3 1 8 0 RAZA - 2 0 21 0 RCQ - 2 0 204 1 RCQ - 2 0 20 0 RCSOL - 2 0 205 1 RCSOL - 2 0 18 0 RCS - 2 0 202 1 RCS - 2 0 19 0 RCT - 2 0 203 1 RCT - 2 0 206 1 RDRIP - 0 15 6 0 RDSP1 - 0 15 7 0 RDSP2 - 0 15 8 0 RDSP3 - 2 0 32 0 RDVEG - 0 16 5 0 REFC - 0 16 196 1 REFC - 0 16 4 0 REFD - 0 16 195 1 REFD - 0 16 2 0 REFZC - 0 16 194 1 REFZC - 0 16 1 0 REFZI - 0 16 193 1 REFZI - 0 16 0 0 REFZR - 0 16 192 1 REFZR - 0 2 13 0 RELD - 0 2 12 0 RELV - 0 16 3 0 RETOP - 0 16 197 1 RETOP - 0 0 194 1 REV - 0 15 9 0 RFCD - 0 15 10 0 RFCI - 0 15 13 0 RFGRPL - 0 15 14 0 RFHAIL - 3 1 9 0 RFL06 - 3 1 10 0 RFL08 - 3 1 11 0 RFL16 - 3 1 12 0 RFL39 - 0 15 12 0 RFRAIN - 0 15 11 0 RFSNOW - 0 1 94 0 RHICE - 0 1 242 1 RHPW - 0 1 93 0 RHWATER - 0 1 1 0 RH - 0 1 44 0 RIME - 0 1 203 1 RIME - 10 1 4 0 RIPCOP - 0 7 12 0 RI - 0 7 194 1 RI - 2 3 6 0 RLYRS - 2 3 193 1 RLYRS - 0 1 65 0 RPRATE - 2 0 16 0 RSMIN - 2 0 200 1 RSMIN - 1 0 2 0 RSSC - 0 191 194 1 RTSEC - 10 3 206 1 RUNUP - 1 0 11 0 RVERSW - 0 1 24 0 RWMR - 0 18 14 0 SACON - 0 20 100 0 SADEN - 0 19 19 0 SALBD - 3 0 1 0 SALBEDO - 10 4 193 1 SALIN - 1 2 12 0 SALTIL - 10 4 3 0 SALTY - 0 1 5 0 SATD - 2 3 17 0 SATOSM - 3 192 4 0 SBC123 - 3 192 5 0 SBC124 - 0 19 211 1 SBSALB - 0 1 212 1 SBSNO - 3 192 6 0 SBT112 - 3 192 7 0 SBT113 - 3 192 8 0 SBT114 - 3 192 9 0 SBT115 - 3 192 0 0 SBT122 - 3 192 1 0 SBT123 - 3 192 2 0 SBT124 - 3 192 3 0 SBT126 - 3 192 23 0 SBTA1610 - 3 192 24 0 SBTA1611 - 3 192 25 0 SBTA1612 - 3 192 26 0 SBTA1613 - 3 192 27 0 SBTA1614 - 3 192 28 0 SBTA1615 - 3 192 29 0 SBTA1616 - 3 192 20 0 SBTA167 - 3 192 21 0 SBTA168 - 3 192 22 0 SBTA169 - 3 192 39 0 SBTA1710 - 3 192 40 0 SBTA1711 - 3 192 41 0 SBTA1712 - 3 192 42 0 SBTA1713 - 3 192 43 0 SBTA1714 - 3 192 44 0 SBTA1715 - 3 192 45 0 SBTA1716 - 3 192 36 0 SBTA177 - 3 192 37 0 SBTA178 - 3 192 38 0 SBTA179 - 3 192 55 0 SBTAGR10 - 3 192 56 0 SBTAGR11 - 3 192 57 0 SBTAGR12 - 3 192 58 0 SBTAGR13 - 3 192 59 0 SBTAGR14 - 3 192 60 0 SBTAGR15 - 3 192 61 0 SBTAGR16 - 3 192 52 0 SBTAGR7 - 3 192 53 0 SBTAGR8 - 3 192 54 0 SBTAGR9 - 3 0 2 0 SBTMP - 0 7 210 1 SCCP - 4 2 10 0 SCINT - 0 1 84 0 SCLIWC - 0 1 83 0 SCLLWC - 3 1 29 0 SCRAD - 0 20 112 0 SCTAOTK - 3 0 5 0 SCTPRES - 0 20 6 0 SDDMFLX - 0 1 61 0 SDEN - 3 1 99 0 SDMPEMRR - 0 3 20 0 SDSGSO - 0 1 60 0 SDWE - 0 20 11 0 SEDMFLX - 1 2 3 0 SEDTK - 1 2 4 0 SEDTMP - 10 3 207 1 SETUP - 0 1 62 0 SEVAP - 2 0 216 1 SFCRH - 2 0 1 0 SFCR - 2 0 34 0 SFCWRO - 2 0 12 0 SFEXC - 2 0 195 1 SFEXC - 1 0 10 0 SFLORC - 0 20 55 0 SFLUX - 3 192 14 0 SFRA161 - 3 192 15 0 SFRA162 - 3 192 16 0 SFRA163 - 3 192 17 0 SFRA164 - 3 192 18 0 SFRA165 - 3 192 19 0 SFRA166 - 3 192 30 0 SFRA171 - 3 192 31 0 SFRA172 - 3 192 32 0 SFRA173 - 3 192 33 0 SFRA174 - 3 192 34 0 SFRA175 - 3 192 35 0 SFRA176 - 10 4 11 0 SFSALP - 1 2 9 0 SFSAL - 10 4 12 0 SFTMPP - 1 2 10 0 SFTMP - 0 2 7 0 SGCVV - 0 0 201 1 SHAHR - 0 19 201 1 SHAILPRO - 0 1 214 1 SHAMR - 2 3 26 0 SHFLX - 0 0 11 0 SHTFL - 0 1 108 0 SHTPRM - 0 7 13 0 SHWINX - 10 2 3 0 SICED - 4 9 1 0 SIGHAL - 0 7 209 1 SIGH - 4 9 2 0 SIGPAR - 4 9 0 0 SIGPED - 0 7 211 1 SIGT - 0 19 217 1 SIPD - 0 0 17 0 SKINT - 3 5 1 0 SKSSTMP - 0 1 230 1 SLACC - 0 19 23 0 SLDP - 3 0 4 0 SLFTI - 10 3 202 1 SLTFL - 2 3 194 1 SLTYP - 0 6 34 0 SLWTC - 2 3 8 0 SMDRY - 2 3 196 1 SMDRY - 0 1 113 0 SMLWGMA - 0 1 110 0 SMLWHMA - 0 1 116 0 SMLWSMA - 2 3 7 0 SMREF - 2 3 195 1 SMREF - 0 19 18 0 SNFALB - 0 19 193 1 SNFALB - 0 1 25 0 SNMR - 0 1 17 0 SNOAG - 0 1 14 0 SNOC - 0 1 11 0 SNOD - 0 0 16 0 SNOHF - 0 0 192 1 SNOHF - 0 1 15 0 SNOL - 0 1 16 0 SNOM - 0 0 18 0 SNOT - 0 1 208 1 SNOT - 0 1 42 0 SNOWC - 0 1 201 1 SNOWC - 0 1 233 1 SNOWLR - 0 19 236 1 SNOWLVL - 0 1 222 1 SNOWT - 2 3 25 0 SNWDEB - 2 3 27 0 SOILDEP - 2 3 21 0 SOILICE - 2 3 5 0 SOILL - 2 3 192 1 SOILL - 2 3 19 0 SOILMOI - 2 0 3 0 SOILM - 2 0 22 0 SOILM - 2 3 15 0 SOILP - 2 3 18 0 SOILTMP - 2 0 38 0 SOILVIC - 2 0 192 1 SOILW - 4 6 6 0 SOLRF - 3 1 7 0 SOLZA - 2 3 0 0 SOTYP - 3 1 28 0 SPBRT - 10 1 1 0 SPC - 4 6 4 0 SPECIRR - 4 1 0 0 SPEED - 0 1 0 0 SPFH - 10 0 45 0 SPFTR - 0 1 102 0 SPNCG - 0 1 103 0 SPNCH - 0 1 100 0 SPNCR - 0 1 101 0 SPNCS - 0 1 66 0 SPRATE - 4 2 7 0 SPRDF - 3 0 3 0 SPWAT - 3 0 0 0 SRAD - 0 1 85 0 SRAINC - 0 19 194 1 SRCONO - 3 192 46 0 SRFAGR1 - 3 192 47 0 SRFAGR2 - 3 192 48 0 SRFAGR3 - 3 192 49 0 SRFAGR4 - 3 192 50 0 SRFAGR5 - 3 192 51 0 SRFAGR6 - 0 1 12 0 SRWEQ - 0 20 103 0 SSALBK - 0 3 22 0 SSGSO - 10 3 195 1 SSHG - 3 5 2 0 SSKSSTMP - 0 1 86 0 SSNOWW - 1 0 6 0 SSRUN - 1 0 193 1 SSRUN - 10 3 200 1 SSST - 3 0 6 0 SSTMP - 2 0 211 1 SSTOR - 10 3 199 1 SSTT - 0 6 35 0 SSWTC - 0 19 200 1 STORPROB - 0 7 208 1 STPC - 0 2 4 0 STRM - 0 1 87 0 STRPRATE - 0 6 33 0 SUNSD - 0 6 201 1 SUNSD - 0 6 24 0 SUNS - 10 3 192 1 SURGE - 0 19 220 1 SVRTS - 10 3 208 1 SWASH - 0 4 2 0 SWAVR - 10 0 7 0 SWDIR - 0 20 7 0 SWDMFLX - 0 7 5 0 SWEATX - 10 0 8 0 SWELL - 1 0 4 0 SWEPON - 10 0 47 0 SWHFSWEL - 0 4 197 1 SWHR - 10 0 48 0 SWHSSWEL - 10 0 49 0 SWHTSWEL - 0 19 202 1 SWINDPRO - 10 0 9 0 SWPER - 3 1 194 1 SWQI - 0 4 6 0 SWRAD - 0 19 212 1 SWSALB - 0 6 1 0 TCDC - 0 0 204 1 TCHP - 0 1 81 0 TCICON - 0 14 2 0 TCIOZ - 0 1 64 0 TCIWV - 2 0 35 0 TCLASS - 0 1 209 1 TCLSW - 0 6 20 0 TCOLC - 0 6 198 1 TCOLC - 0 1 74 0 TCOLG - 0 1 72 0 TCOLH - 0 6 19 0 TCOLIO - 0 1 70 0 TCOLI - 0 6 197 1 TCOLI - 0 1 210 1 TCOLM - 0 1 45 0 TCOLR - 0 1 204 1 TCOLR - 0 1 46 0 TCOLS - 0 1 205 1 TCOLS - 0 1 78 0 TCOLWA - 0 6 18 0 TCOLWO - 0 1 69 0 TCOLW - 0 6 196 1 TCOLW - 0 6 17 0 TCONDO - 0 1 21 0 TCOND - 0 6 195 1 TCOND - 10 3 242 1 TCSRG20 - 10 3 243 1 TCSRG30 - 10 3 244 1 TCSRG40 - 10 3 245 1 TCSRG50 - 10 3 246 1 TCSRG60 - 10 3 247 1 TCSRG70 - 10 3 248 1 TCSRG80 - 10 3 249 1 TCSRG90 - 0 1 51 0 TCWAT - 0 0 20 0 TDCHT - 0 2 31 0 TDCMOM - 2 0 36 0 TFRCT - 0 0 197 1 THFLX - 0 3 12 0 THICK - 0 6 10 0 THUNC - 0 0 203 1 THZ0 - 0 18 6 0 TIACCP - 0 18 7 0 TIACIP - 0 18 8 0 TIACRP - 10 3 251 1 TIDE - 0 1 206 1 TIPD - 0 19 11 0 TKE - 0 1 90 0 TKMFLX - 0 17 4 0 TLGTFD - 0 6 9 0 TMAXT - 0 0 4 0 TMAX - 0 0 5 0 TMIN - 0 0 29 0 TMPADV - 0 0 9 0 TMPA - 4 0 0 0 TMPSWP - 0 0 0 0 TMP - 0 2 227 1 TOA10 - 0 2 228 1 TOA50 - 0 2 229 1 TOD50 - 0 2 230 1 TOD90 - 0 19 197 1 TORPROB - 0 7 4 0 TOTALX - 0 1 80 0 TOTCON - 0 18 13 0 TOTLWD - 0 14 0 0 TOZNE - 0 14 197 1 TOZ - 2 0 37 0 TPERCT - 0 19 219 1 TPFI - 0 1 52 0 TPRATE - 0 20 13 0 TRANHH - 2 3 12 0 TRANSO - 2 0 230 1 TRANS - 0 20 14 0 TRSDS - 0 2 226 1 TRWDIR - 0 2 225 1 TRWSPD - 0 0 200 1 TSD1D - 0 191 0 0 TSEC - 4 6 0 0 TSI - 0 3 199 1 TSLSA - 0 1 50 0 TSNOWP - 0 1 241 1 TSNOW - 2 0 2 0 TSOIL - 0 1 57 0 TSRATE - 0 1 53 0 TSRWE - 0 19 203 1 TSTMC - 0 19 2 0 TSTM - 0 0 19 0 TTCHT - 0 0 198 1 TTDIA - 10 4 2 0 TTHDP - 0 0 25 0 TTLWRCS - 0 0 23 0 TTLWR - 0 0 26 0 TTPARM - 0 0 199 1 TTPHY - 0 0 193 1 TTRAD - 0 0 24 0 TTSWRCS - 0 0 22 0 TTSWR - 0 19 9 0 TURBB - 0 19 8 0 TURBT - 0 19 10 0 TURB - 0 1 49 0 TWATP - 0 2 35 0 TWIND - 10 3 210 1 TWLDC - 10 3 209 1 TWLDT - 10 3 205 1 TWLWAV - 0 20 58 0 TYAAL - 0 20 57 0 TYABA - 0 3 16 0 U-GWD - 0 3 194 1 U-GWD - 10 1 194 1 UBARO - 0 3 31 0 UCLSPRS - 0 1 120 0 UCSCIW - 0 1 119 0 UCSCLW - 0 0 28 0 UCTMP - 0 3 29 0 UDRATE - 0 2 236 1 UEID - 0 2 234 1 UESH - 0 2 17 0 UFLX - 0 2 2 0 UGRD - 0 2 23 0 UGUST - 0 2 41 0 UGWIND - 10 2 4 0 UICE - 0 1 91 0 UKMFLX - 0 5 4 0 ULWRF - 0 5 193 1 ULWRF - 0 3 27 0 UMFLX - 0 1 118 0 UNCSH - 0 2 45 0 UNDIV - 10 1 2 0 UOGRD - 1 0 14 0 UPAPCP - 1 0 15 0 UPASM - 0 7 15 0 UPHL - 0 7 197 1 UPHL - 2 3 2 0 UPLSM - 2 3 1 0 UPLST - 3 1 192 1 USCT - 10 0 21 0 USSD - 0 2 27 0 USTM - 0 2 194 1 USTM - 0 4 53 0 USWRFCS - 0 4 8 0 USWRF - 0 4 193 1 USWRF - 0 4 205 1 UTRF - 0 4 50 0 UVIUCS - 0 4 51 0 UVI - 0 7 196 1 UVI - 0 3 17 0 V-GWD - 0 3 195 1 V-GWD - 0 19 232 1 VAFTD - 0 1 4 0 VAPP - 10 1 195 1 VBARO - 0 4 200 1 VBDSF - 0 4 201 1 VDDSF - 0 0 202 1 VDFHR - 0 1 215 1 VDFMR - 0 14 195 1 VDFOZ - 0 2 208 1 VDFUA - 0 2 209 1 VDFVA - 0 2 204 1 VEDH - 2 0 232 1 VEGMAX - 2 0 231 1 VEGMIN - 2 0 210 1 VEGT - 2 0 4 0 VEG - 0 2 237 1 VEID - 4 1 1 0 VEL1 - 4 1 2 0 VEL2 - 4 1 3 0 VEL3 - 0 2 235 1 VESH - 0 2 18 0 VFLX - 0 6 48 0 VFRCICE - 0 6 49 0 VFRCIW - 0 6 47 0 VFRCWD - 0 2 3 0 VGRD - 2 0 198 1 VGTYP - 0 2 24 0 VGUST - 0 2 42 0 VGWIND - 10 2 5 0 VICE - 0 15 3 0 VIL - 0 19 35 0 VISBSN - 0 19 34 0 VISIFOG - 0 19 33 0 VISLFOG - 0 19 0 0 VIS - 0 1 92 0 VKMFLX - 0 20 52 0 VMXR - 10 1 3 0 VOGRD - 3 4 4 0 VOLACDEM - 3 4 7 0 VOLACDEN - 3 4 6 0 VOLACDOD - 3 4 3 0 VOLACDTH - 3 4 2 0 VOLACDTP - 3 4 1 0 VOLACDTT - 3 4 5 0 VOLAEADR - 3 4 8 0 VOLAPER - 3 4 0 0 VOLAPROB - 0 19 4 0 VOLASH - 2 3 13 0 VOLDEC - 2 3 11 0 VOLTSO - 0 2 46 0 VORTADV - 0 2 5 0 VPOT - 0 0 15 0 VPTMP - 0 2 224 1 VRATE - 3 1 193 1 VSCT - 2 0 25 0 VSOILM - 2 3 16 0 VSOSM - 10 0 22 0 VSSD - 0 2 28 0 VSTM - 0 2 195 1 VSTM - 4 2 4 0 VTEC - 0 0 1 0 VTMP - 0 2 15 0 VUCSH - 0 2 16 0 VVCSH - 0 2 8 0 VVEL - 2 0 27 0 VWILTM - 0 2 25 0 VWSH - 0 2 192 1 VWSH - 10 4 17 0 WATDENA - 10 4 16 0 WATERDEN - 10 4 20 0 WATPDENA - 10 4 19 0 WATPDEN - 10 4 18 0 WATPTEMP - 2 0 5 0 WATR - 10 0 62 0 WAVEFREW - 2 0 223 1 WCCONV - 0 0 13 0 WCF - 2 0 221 1 WCINC - 2 0 226 1 WCUFLX - 2 0 227 1 WCVFLX - 0 20 10 0 WDCPMFLX - 10 4 14 0 WDEPTH - 10 0 31 0 WDIRW - 0 2 0 0 WDIR - 1 2 0 0 WDPTHIL - 10 0 56 0 WDWFSWEL - 10 0 57 0 WDWSSWEL - 10 0 58 0 WDWTSWEL - 0 1 13 0 WEASD - 10 0 42 0 WESP - 0 0 27 0 WETBT - 0 18 11 0 WETDEP - 0 20 75 0 WFIREFLX - 1 2 2 0 WFRACT - 10 0 59 0 WFWFSWEL - 10 0 60 0 WFWSSWEL - 10 0 61 0 WFWTSWEL - 4 8 5 0 WHTCOR - 4 8 3 0 WHTRAD - 2 0 26 0 WILT - 2 0 201 1 WILT - 0 2 33 0 WINDF - 0 19 199 1 WINDPROB - 3 1 19 0 WINDS - 0 2 1 0 WIND - 0 19 25 0 WIWW - 10 0 193 1 WLENG - 0 20 9 0 WLSMFLX - 0 2 19 0 WMIXE - 2 0 33 0 WROD - 10 0 192 1 WSTP - 10 0 18 0 WSTR - 0 2 214 1 WTEND - 10 4 192 1 WTMPC - 1 2 1 0 WTMPIL - 10 4 15 0 WTMPSS - 10 3 0 0 WTMP - 2 0 222 1 WVCONV - 10 0 4 0 WVDIR - 10 0 5 0 WVHGT - 2 0 220 1 WVINC - 10 0 6 0 WVPER - 10 0 0 0 WVSP1 - 10 0 1 0 WVSP2 - 10 0 2 0 WVSP3 - 2 0 224 1 WVUFLX - 2 0 225 1 WVVFLX - 10 0 14 0 WWSDIR - 4 6 1 0 XLONG - 0 3 26 0 XPRES - 4 8 0 0 XRAYRAD - 4 6 2 0 XSHRT - 10 2 10 0 ZVCICEP diff --git a/parm/post/params_grib2_tbl_new b/parm/post/params_grib2_tbl_new new file mode 120000 index 000000000..1a28e6d67 --- /dev/null +++ b/parm/post/params_grib2_tbl_new @@ -0,0 +1 @@ +../../sorc/hafs_post.fd/parm/params_grib2_tbl_new \ No newline at end of file diff --git a/parm/post/postcntrl_hafs.xml b/parm/post/postcntrl_hafs.xml deleted file mode 100644 index be9041709..000000000 --- a/parm/post/postcntrl_hafs.xml +++ /dev/null @@ -1,625 +0,0 @@ - - - - - HURPRS - 32769 - ncep_nco - v2003 - local_tab_yes1 - fcst - oper - fcst - fcst - hour - nws_ncep - hafs - complex_packing_spatial_diff - 2nd_ord_sptdiff - fltng_pnt - lossless - - - HGT_ON_ISOBARIC_SFC - HGT - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 6.0 - - - - TMP_ON_ISOBARIC_SFC - TMP - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 4.0 - - - - SPFH_ON_ISOBARIC_SFC - SPFH - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 7.0 - - - - RH_ON_ISOBARIC_SFC - RH - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 3.0 - - - - UGRD_ON_ISOBARIC_SFC - UGRD - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 4.0 - - - - VGRD_ON_ISOBARIC_SFC - VGRD - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 4.0 - - - - DZDT_ON_ISOBARIC_SFC - DZDT - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 5.0 - - - - VVEL_ON_ISOBARIC_SFC - VVEL - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 5.0 - - - - ABSV_ON_ISOBARIC_SFC - ABSV - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 4.0 - - - - TKE_ON_ISOBARIC_SFC - TKE - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 3.0 - - - - CLWMR_ON_ISOBARIC_SFC - CLWMR - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 6.0 - - - - ICMR_ON_ISOBARIC_SFC - ICMR - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 6.0 - - - - RWMR_ON_ISOBARIC_SFC - RWMR - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 6.0 - - - - SNMR_ON_ISOBARIC_SFC - SNMR - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 6.0 - - - - GRLE_ON_ISOBARIC_SFC - GRLE - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 6.0 - - - - REFD_ON_ISOBARIC_SFC - REFD - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 4.0 - - - - MSLET_ON_MEAN_SEA_LVL - MSLET - NCEP - 6.0 - - - - PRES_ON_MEAN_SEA_LVL - PRMSL - 6.0 - - - - TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - TMP - 4.0 - - - - SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - SPFH - 7.0 - - - - DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - DPT - 4.0 - - - - RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - RH - 3.0 - - - - UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - UGRD - 10. - 4.0 - - - - VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - VGRD - 10. - 4.0 - - - - GUST_ON_SURFACE - GUST - 4.0 - - - - POT_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - POT - 10. - 4.0 - - - - PRES_ON_SURFACE - PRES - 6.0 - - - - HGT_ON_SURFACE - HGT - 6.0 - - - - POT_ON_SURFACE - POT - 4.0 - - - - SPFH_ON_SURFACE - SPFH - 3.0 - - - - TMP_ON_SURFACE - TMP - 4.0 - - - - SNOWC_ON_SURFACE - SNOWC - NCEP - 3.0 - - - - SFEXC_ON_SURFACE - SFEXC - NCEP - 4.0 - - - - CAPE_ON_SURFACE - CAPE - 4.0 - - - - CIN_ON_SURFACE - CIN - 4.0 - - - - PWAT_ON_ENTIRE_ATMOS_SINGLE_LYR - PWAT - 6.0 - - - - HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND - HLCY - 3000. - 4.0 - - - - ACM_APCP_ON_SURFACE - APCP - -4.0 - - - - ACM_NCPCP_ON_SURFACE - NCPCP - -4.0 - - - - INST_PRATE_ON_SURFACE - PRATE - 6.0 - - - - INST_TCDC_ON_ENTIRE_ATMOS - TCDC - 4.0 - - - - AVE_TCDC_ON_ENTIRE_ATMOS - TCDC - 4.0 - - - - AVE_CDLYR_ON_ENTIRE_ATMOS - CDLYR - NCEP - 3.0 - - - - INST_USWRF_ON_SURFACE - USWRF - NCEP - 6.0 - - - - INST_ULWRF_ON_SURFACE - ULWRF - NCEP - 6.0 - - - - AVE_DSWRF_ON_SURFACE - DSWRF - NCEP - 6.0 - - - - AVE_DLWRF_ON_SURFACE - DLWRF - NCEP - 4.0 - - - - AVE_USWRF_ON_SURFACE - USWRF - NCEP - 6.0 - - - - AVE_ULWRF_ON_SURFACE - ULWRF - NCEP - 4.0 - - - - AVE_USWRF_ON_TOP_OF_ATMOS - USWRF - NCEP - 6.0 - - - - AVE_ULWRF_ON_TOP_OF_ATMOS - ULWRF - NCEP - 4.0 - - - - INST_ULWRF_ON_TOP_OF_ATMOS - ULWRF - NCEP - 4.0 - - - - BRTMP_ON_TOP_OF_ATMOS - BRTMP - 4.0 - - - - INST_DSWRF_ON_SURFACE - DSWRF - NCEP - 6.0 - - - - INST_DLWRF_ON_SURFACE - DLWRF - NCEP - 4.0 - - - - SFCR_ON_SURFACE - SFCR - 6.0 - - - - FRICV_ON_SURFACE - FRICV - NCEP - 4.0 - - - - CD_ON_SURFACE - CD - NCEP - 6.0 - - - - UFLX_ON_SURFACE - UFLX - 4.0 - - - - VFLX_ON_SURFACE - VFLX - 4.0 - - - - AVE_SHTFL_ON_SURFACE - SHTFL - 4.0 - - - - AVE_LHTFL_ON_SURFACE - LHTFL - 4.0 - - - - ACM_EVP_ON_SURFACE - EVP - 4.0 - - - - INST_SHTFL_ON_SURFACE - SHTFL - 4.0 - - - - INST_LHTFL_ON_SURFACE - LHTFL - 4.0 - - - - NLAT_ON_SURFACE - NLAT - NCEP - 4.0 - - - - ELON_ON_SURFACE - ELON - NCEP - 4.0 - - - - LAND_ON_SURFACE - LAND - 1.0 - - - - WTMP_ON_SURFACE - WTMP - 4.0 - - - - PRES_ON_TROPOPAUSE - PRES - 6.0 - - - - HGT_ON_TROPOPAUSE - HGT - 6.0 - - - - TMP_ON_TROPOPAUSE - TMP - 4.0 - - - - POT_ON_TROPOPAUSE - POT - 4.0 - - - - UGRD_ON_TROPOPAUSE - UGRD - 4.0 - - - - VGRD_ON_TROPOPAUSE - VGRD - 4.0 - - - - VWSH_ON_TROPOPAUSE - VWSH - NCEP - 3.0 - - - - TMP_ON_CLOUD_TOP - TMP - 4.0 - - - - REFC_ON_ENTIRE_ATMOS - REFC - NCEP - 4.0 - - - - HPBL_ON_SURFACE - HPBL - NCEP - 6.0 - - - - TCOLW_ON_ENTIRE_ATMOS - TCOLW - NCEP - 5.0 - - - - TCOLI_ON_ENTIRE_ATMOS - TCOLI - NCEP - 5.0 - - - - TCOLR_ON_ENTIRE_ATMOS - TCOLR - NCEP - 5.0 - - - - TCOLS_ON_ENTIRE_ATMOS - TCOLS - NCEP - 5.0 - - - - TCOLC_ON_ENTIRE_ATMOS - TCOLC - NCEP - 5.0 - - - - TCLSW_ON_ENTIRE_ATMOS - TCLSW - NCEP - 5.0 - - - - TCOLM_ON_ENTIRE_ATMOS - TCOLM - NCEP - 5.0 - - - - LWHR_ON_ENTIRE_ATMOS - LWHR - NCEP - 5.0 - - - - AVE_LRGHR_ON_ENTIRE_ATMOS - LRGHR - NCEP - 5.0 - - - - MAX_PRATE_ON_SURFACE - PRATE - 6.0 - - - - - diff --git a/parm/post/postcntrl_hafs.xml b/parm/post/postcntrl_hafs.xml new file mode 120000 index 000000000..aad455036 --- /dev/null +++ b/parm/post/postcntrl_hafs.xml @@ -0,0 +1 @@ +../../sorc/hafs_post.fd/parm/postcntrl_hafs.xml \ No newline at end of file diff --git a/parm/post/postcntrl_readme b/parm/post/postcntrl_readme index 347f2d393..69edb6285 100644 --- a/parm/post/postcntrl_readme +++ b/parm/post/postcntrl_readme @@ -1,4 +1,4 @@ -* The following files in this directory come from ../../sorc/hafs_post.fd/parm/ +* The following files in this directory are linked from ../../sorc/hafs_post.fd/parm/ nam_micro_lookup.dat params_grib2_tbl_new postcntrl_hafs.xml diff --git a/parm/post/postxconfig-NT-hafs.txt b/parm/post/postxconfig-NT-hafs.txt deleted file mode 100644 index 03e551e5d..000000000 --- a/parm/post/postxconfig-NT-hafs.txt +++ /dev/null @@ -1,3274 +0,0 @@ -1 -88 -HURPRS -32769 -ncep_nco -v2003 -local_tab_yes1 -fcst -oper -fcst -fcst -hour -nws_ncep -hafs -complex_packing_spatial_diff -2nd_ord_sptdiff -fltng_pnt -lossless -12 -HGT_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -HGT -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -13 -TMP_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -TMP -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -16 -SPFH_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -SPFH -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -7.0 -0 -0 -0 -? -? -? -17 -RH_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -RH -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -3.0 -0 -0 -0 -? -? -? -18 -UGRD_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -UGRD -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -19 -VGRD_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -VGRD -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -284 -DZDT_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -DZDT -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -20 -VVEL_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -VVEL -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -21 -ABSV_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -ABSV -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -22 -TKE_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -TKE -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -3.0 -0 -0 -0 -? -? -? -153 -CLWMR_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -CLWMR -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -166 -ICMR_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -ICMR -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -183 -RWMR_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -RWMR -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -184 -SNMR_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -SNMR -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -416 -GRLE_ON_ISOBARIC_SFC -Graupel mixing ration on isobaric surface -1 -tmpl4_0 -GRLE -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -251 -REFD_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -REFD -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -23 -MSLET_ON_MEAN_SEA_LVL -? -1 -tmpl4_0 -MSLET -NCEP -? -mean_sea_lvl -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -105 -PRES_ON_MEAN_SEA_LVL -? -1 -tmpl4_0 -PRMSL -? -? -mean_sea_lvl -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -106 -TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m -? -1 -tmpl4_0 -TMP -? -? -spec_hgt_lvl_above_grnd -0 -? -1 -2. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -112 -SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m -? -1 -tmpl4_0 -SPFH -? -? -spec_hgt_lvl_above_grnd -0 -? -1 -2. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -7.0 -0 -0 -0 -? -? -? -113 -DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m -? -1 -tmpl4_0 -DPT -? -? -spec_hgt_lvl_above_grnd -0 -? -1 -2. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -114 -RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m -? -1 -tmpl4_0 -RH -? -? -spec_hgt_lvl_above_grnd -0 -? -1 -2. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -3.0 -0 -0 -0 -? -? -? -64 -UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m -? -1 -tmpl4_0 -UGRD -? -? -spec_hgt_lvl_above_grnd -0 -? -1 -10. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -65 -VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m -? -1 -tmpl4_0 -VGRD -? -? -spec_hgt_lvl_above_grnd -0 -? -1 -10. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -245 -GUST_ON_SURFACE -? -1 -tmpl4_0 -GUST -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -158 -POT_ON_SPEC_HGT_LVL_ABOVE_GRND_10m -? -1 -tmpl4_0 -POT -? -? -spec_hgt_lvl_above_grnd -0 -? -1 -10. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -24 -PRES_ON_SURFACE -? -1 -tmpl4_0 -PRES -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -25 -HGT_ON_SURFACE -? -1 -tmpl4_0 -HGT -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -27 -POT_ON_SURFACE -? -1 -tmpl4_0 -POT -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -28 -SPFH_ON_SURFACE -? -1 -tmpl4_0 -SPFH -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -3.0 -0 -0 -0 -? -? -? -26 -TMP_ON_SURFACE -? -1 -tmpl4_0 -TMP -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -120 -SNOWC_ON_SURFACE -? -1 -tmpl4_0 -SNOWC -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -3.0 -0 -0 -0 -? -? -? -169 -SFEXC_ON_SURFACE -? -1 -tmpl4_0 -SFEXC -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -32 -CAPE_ON_SURFACE -? -1 -tmpl4_0 -CAPE -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -107 -CIN_ON_SURFACE -? -1 -tmpl4_0 -CIN -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -80 -PWAT_ON_ENTIRE_ATMOS_SINGLE_LYR -? -1 -tmpl4_0 -PWAT -? -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -162 -HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND -? -1 -tmpl4_0 -HLCY -? -? -spec_hgt_lvl_above_grnd -0 -? -1 -3000. -spec_hgt_lvl_above_grnd -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -87 -ACM_APCP_ON_SURFACE -? -1 -tmpl4_8 -APCP -? -ACM -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 --4.0 -0 -0 -0 -? -? -? -34 -ACM_NCPCP_ON_SURFACE -? -1 -tmpl4_8 -NCPCP -? -ACM -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 --4.0 -0 -0 -0 -? -? -? -167 -INST_PRATE_ON_SURFACE -? -1 -tmpl4_0 -PRATE -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -161 -INST_TCDC_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCDC -? -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -144 -AVE_TCDC_ON_ENTIRE_ATMOS -? -1 -tmpl4_8 -TCDC -? -AVE -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -139 -AVE_CDLYR_ON_ENTIRE_ATMOS -? -1 -tmpl4_8 -CDLYR -NCEP -AVE -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -3.0 -0 -0 -0 -? -? -? -141 -INST_USWRF_ON_SURFACE -? -1 -tmpl4_0 -USWRF -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -142 -INST_ULWRF_ON_SURFACE -? -1 -tmpl4_0 -ULWRF -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -126 -AVE_DSWRF_ON_SURFACE -? -1 -tmpl4_8 -DSWRF -NCEP -AVE -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -127 -AVE_DLWRF_ON_SURFACE -? -1 -tmpl4_8 -DLWRF -NCEP -AVE -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -128 -AVE_USWRF_ON_SURFACE -? -1 -tmpl4_8 -USWRF -NCEP -AVE -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -129 -AVE_ULWRF_ON_SURFACE -? -1 -tmpl4_8 -ULWRF -NCEP -AVE -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -130 -AVE_USWRF_ON_TOP_OF_ATMOS -? -1 -tmpl4_8 -USWRF -NCEP -AVE -top_of_atmos -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -131 -AVE_ULWRF_ON_TOP_OF_ATMOS -? -1 -tmpl4_8 -ULWRF -NCEP -AVE -top_of_atmos -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -274 -INST_ULWRF_ON_TOP_OF_ATMOS -? -1 -tmpl4_0 -ULWRF -NCEP -? -top_of_atmos -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -275 -BRTMP_ON_TOP_OF_ATMOS -? -1 -tmpl4_0 -BRTMP -? -? -top_of_atmos -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -156 -INST_DSWRF_ON_SURFACE -? -1 -tmpl4_0 -DSWRF -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -157 -INST_DLWRF_ON_SURFACE -? -1 -tmpl4_0 -DLWRF -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -44 -SFCR_ON_SURFACE -? -1 -tmpl4_0 -SFCR -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -45 -FRICV_ON_SURFACE -? -1 -tmpl4_0 -FRICV -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -132 -CD_ON_SURFACE -? -1 -tmpl4_0 -CD -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -133 -UFLX_ON_SURFACE -? -1 -tmpl4_0 -UFLX -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -134 -VFLX_ON_SURFACE -? -1 -tmpl4_0 -VFLX -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -43 -AVE_SHTFL_ON_SURFACE -? -1 -tmpl4_8 -SHTFL -? -AVE -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -42 -AVE_LHTFL_ON_SURFACE -? -1 -tmpl4_8 -LHTFL -? -AVE -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -47 -ACM_EVP_ON_SURFACE -? -1 -tmpl4_8 -EVP -? -ACM -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -154 -INST_SHTFL_ON_SURFACE -? -1 -tmpl4_0 -SHTFL -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -155 -INST_LHTFL_ON_SURFACE -? -1 -tmpl4_0 -LHTFL -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -48 -NLAT_ON_SURFACE -? -1 -tmpl4_0 -NLAT -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -49 -ELON_ON_SURFACE -? -1 -tmpl4_0 -ELON -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -50 -LAND_ON_SURFACE -? -1 -tmpl4_0 -LAND -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -1.0 -0 -0 -0 -? -? -? -151 -WTMP_ON_SURFACE -? -1 -tmpl4_0 -WTMP -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -54 -PRES_ON_TROPOPAUSE -? -1 -tmpl4_0 -PRES -? -? -tropopause -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -177 -HGT_ON_TROPOPAUSE -? -1 -tmpl4_0 -HGT -? -? -tropopause -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -55 -TMP_ON_TROPOPAUSE -? -1 -tmpl4_0 -TMP -? -? -tropopause -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -108 -POT_ON_TROPOPAUSE -? -1 -tmpl4_0 -POT -? -? -tropopause -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -56 -UGRD_ON_TROPOPAUSE -? -1 -tmpl4_0 -UGRD -? -? -tropopause -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -57 -VGRD_ON_TROPOPAUSE -? -1 -tmpl4_0 -VGRD -? -? -tropopause -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -58 -VWSH_ON_TROPOPAUSE -? -1 -tmpl4_0 -VWSH -NCEP -? -tropopause -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -3.0 -0 -0 -0 -? -? -? -168 -TMP_ON_CLOUD_TOP -? -1 -tmpl4_0 -TMP -? -? -cloud_top -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -252 -REFC_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -REFC -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -221 -HPBL_ON_SURFACE -? -1 -tmpl4_0 -HPBL -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -200 -TCOLW_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLW -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -201 -TCOLI_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLI -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -202 -TCOLR_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLR -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -203 -TCOLS_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLS -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -204 -TCOLC_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLC -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -285 -TCLSW_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCLSW -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -286 -TCOLM_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCOLM -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -291 -LWHR_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -LWHR -NCEP -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? -292 -AVE_LRGHR_ON_ENTIRE_ATMOS -? -1 -tmpl4_8 -LRGHR -NCEP -AVE -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -5.0 -0 -0 -0 -? -? -? diff --git a/parm/post/postxconfig-NT-hafs.txt b/parm/post/postxconfig-NT-hafs.txt new file mode 120000 index 000000000..b83f54c4e --- /dev/null +++ b/parm/post/postxconfig-NT-hafs.txt @@ -0,0 +1 @@ +../../sorc/hafs_post.fd/parm/postxconfig-NT-hafs.txt \ No newline at end of file diff --git a/parm/product/namelist.gettrk_tmp b/parm/product/namelist.gettrk_tmp index 01070c768..d6788f6c4 100644 --- a/parm/product/namelist.gettrk_tmp +++ b/parm/product/namelist.gettrk_tmp @@ -8,7 +8,7 @@ inp%modtyp = "regional", inp%lt_units = "hours", inp%file_seq = "multi", - inp%nesttyp = "moveable", + inp%nesttyp = "fixed", / &atcfinfo diff --git a/parm/system.conf.hera b/parm/system.conf.hera index 57b8db088..e388d25b4 100644 --- a/parm/system.conf.hera +++ b/parm/system.conf.hera @@ -48,7 +48,7 @@ glob_layouty=10 layoutx=40 layouty=30 write_groups=1 -write_tasks_per_group=80 +write_tasks_per_group=140 [rocotostr] FORECAST_RESOURCES=FORECAST_RESOURCES_regional_{forecast/layoutx}x{forecast/layouty}io{forecast/write_groups}x{forecast/write_tasks_per_group}_omp2 diff --git a/parm/system.conf.jet b/parm/system.conf.jet index 1b5d00dc9..4b0cef88e 100644 --- a/parm/system.conf.jet +++ b/parm/system.conf.jet @@ -46,7 +46,7 @@ WHICH_JET=x ;; Which part of Jet? [forecast] write_groups=1 -write_tasks_per_group=96 +write_tasks_per_group=120 [rocotostr] FORECAST_RESOURCES=FORECAST_RESOURCES_regional_{forecast/layoutx}x{forecast/layouty}io{forecast/write_groups}x{forecast/write_tasks_per_group}_omp2 diff --git a/parm/system.conf.wcoss_cray b/parm/system.conf.wcoss_cray index dd227de34..3e419b26c 100644 --- a/parm/system.conf.wcoss_cray +++ b/parm/system.conf.wcoss_cray @@ -47,8 +47,8 @@ WHERE_AM_I=wcoss_cray ;; Which cluster? (For setting up environment.) WHICH_JET=none ;; Which part of Jet are we on? None; we are not on Jet. [forecast] -write_groups=2 -write_tasks_per_group=48 +write_groups=1 +write_tasks_per_group=96 [rocotostr] FORECAST_RESOURCES=FORECAST_RESOURCES_regional_{forecast/layoutx}x{forecast/layouty}io{forecast/write_groups}x{forecast/write_tasks_per_group}_omp2 diff --git a/parm/system.conf.wcoss_dell_p3 b/parm/system.conf.wcoss_dell_p3 index edd04c99d..47573253f 100644 --- a/parm/system.conf.wcoss_dell_p3 +++ b/parm/system.conf.wcoss_dell_p3 @@ -46,8 +46,8 @@ WHERE_AM_I=wcoss_dell_p3 ;; Which cluster? (For setting up environment.) WHICH_JET=none ;; Which part of Jet are we on? None; we are not on Jet. [forecast] -write_groups=2 -write_tasks_per_group=48 +write_groups=1 +write_tasks_per_group=96 [rocotostr] FORECAST_RESOURCES=FORECAST_RESOURCES_regional_{forecast/layoutx}x{forecast/layouty}io{forecast/write_groups}x{forecast/write_tasks_per_group}_omp2 diff --git a/rocoto/cronjob_hafsv0p2a_phase2.sh b/rocoto/cronjob_hafsv0p2a_phase3.sh similarity index 95% rename from rocoto/cronjob_hafsv0p2a_phase2.sh rename to rocoto/cronjob_hafsv0p2a_phase3.sh index c532aef7d..c549b86f5 100755 --- a/rocoto/cronjob_hafsv0p2a_phase2.sh +++ b/rocoto/cronjob_hafsv0p2a_phase3.sh @@ -34,9 +34,9 @@ EXPT=$(basename ${HOMEhafs}) #=============================================================================== - # hafsv0p2a phase2 - confopts="config.EXPT=${EXPT} config.SUBEXPT=hafsv0p2a_phase2 \ - ../parm/hafsv0p2a_phase2_AL.conf \ + # hafsv0p2a phase3 final + confopts="config.EXPT=${EXPT} config.SUBEXPT=hafsv0p2a_phase3_final \ + ../parm/hafsv0p2a_phase3_AL.conf \ ../parm/hafs_hycom.conf" ## Technical test for 2020082506-2020082512 13L2020 diff --git a/rocoto/cronjob_hafsv0p2a_da.sh b/rocoto/cronjob_hafsv0p2a_phase3_da.sh similarity index 86% rename from rocoto/cronjob_hafsv0p2a_da.sh rename to rocoto/cronjob_hafsv0p2a_phase3_da.sh index f43f6832c..4f71752a5 100755 --- a/rocoto/cronjob_hafsv0p2a_da.sh +++ b/rocoto/cronjob_hafsv0p2a_phase3_da.sh @@ -35,42 +35,38 @@ EXPT=$(basename ${HOMEhafs}) #=============================================================================== # h2db: hafsv0p2a with fgat+3denvar - confh2db="config.EXPT=${EXPT} config.SUBEXPT=hafs_h2db \ + confh2db="config.EXPT=${EXPT} config.SUBEXPT=hafsv0p2a_phase3_h2db \ config.run_gsi_vr=no config.run_gsi_vr_fgat=no config.run_gsi_vr_ens=no \ config.run_gsi=yes config.run_fgat=yes config.run_envar=yes \ config.run_ensda=no config.ENS_SIZE=40 config.run_enkf=no \ config.GRID_RATIO_ENS=2 \ gsi.use_bufr_nr=yes \ - ../parm/hafsv0p2a_da_AL.conf \ + ../parm/hafsv0p2a_phase3_da_AL.conf \ ../parm/hafs_hycom.conf" # h2dc: hafsv0p2a with fgat+3denvar+enkf - confh2dc="config.EXPT=${EXPT} config.SUBEXPT=hafs_h2dc \ + confh2dc="config.EXPT=${EXPT} config.SUBEXPT=hafsv0p2a_phase3_h2dc \ config.run_gsi_vr=no config.run_gsi_vr_fgat=no config.run_gsi_vr_ens=no \ config.run_gsi=yes config.run_fgat=yes config.run_envar=yes \ config.run_ensda=yes config.ENS_SIZE=40 config.run_enkf=yes \ config.GRID_RATIO_ENS=2 \ gsi.use_bufr_nr=yes \ - ../parm/hafsv0p2a_da_AL.conf \ + ../parm/hafsv0p2a_phase3_da_AL.conf \ ../parm/hafs_hycom.conf" # h2dd: hafsv0p2a with gsi_vr+fgat+3denvar+enkf - confh2dd="config.EXPT=${EXPT} config.SUBEXPT=hafs_h2dd \ + confh2dd="config.EXPT=${EXPT} config.SUBEXPT=hafsv0p2a_phase3_h2dd \ config.run_gsi_vr=yes config.run_gsi_vr_fgat=yes config.run_gsi_vr_ens=yes \ config.run_gsi=yes config.run_fgat=yes config.run_envar=yes \ config.run_ensda=yes config.ENS_SIZE=40 config.run_enkf=yes \ config.GRID_RATIO_ENS=2 \ gsi.use_bufr_nr=yes \ - ../parm/hafsv0p2a_da_AL.conf \ + ../parm/hafsv0p2a_phase3_da_AL.conf \ ../parm/hafs_hycom.conf" - # On Orion use 40x30 PEs for FV3ATM to reduce the forecast job hanging while - # writing restart files - confopts="${confh2db} forecast.layoutx=40 forecast.layouty=30" -#confopts="${confh2dc} forecast.layoutx=40 forecast.layouty=30" -## On other platforms, use 48x30 PEs for FV3ATM -#confopts=${confh2db} -#confopts=${confh2dc} + # Choose the configuration to run + confopts="${confh2db}" +#confopts="${confh2dc}" ## Technical test for 2020082506-2020082512 13L2020 #${PYTHON3} ./run_hafs.py -t ${dev} 2020082506-2020082512 00L HISTORY ${confopts} \ diff --git a/rocoto/cronjob_hafsv0p2a_regional_da.sh b/rocoto/cronjob_hafsv0p2a_regional_da.sh new file mode 100755 index 000000000..8d7e3aabe --- /dev/null +++ b/rocoto/cronjob_hafsv0p2a_regional_da.sh @@ -0,0 +1,103 @@ +#!/bin/sh +set -x +date + +# NOAA WCOSS Dell Phase3 +#HOMEhafs=/gpfs/dell2/emc/modeling/noscrub/${USER}/save/HAFS +#dev="-s sites/wcoss_dell_p3.ent -f" +#PYTHON3=/usrx/local/prod/packages/python/3.6.3/bin/python3 + +# NOAA WCOSS Cray +#HOMEhafs=/gpfs/hps3/emc/hwrf/noscrub/${USER}/save/HAFS +#dev="-s sites/wcoss_cray.ent -f" +#PYTHON3=/opt/intel/intelpython3/bin/python3 + +# NOAA RDHPCS Jet +#HOMEhafs=/mnt/lfs4/HFIP/hwrfv3/${USER}/HAFS +##dev="-s sites/xjet.ent -f" +#dev="-s sites/xjet_hafsv0p2a.ent -f" +#PYTHON3=/apps/intel/intelpython3/bin/python3 + +# MSU Orion + HOMEhafs=/work/noaa/hwrf/save/${USER}/HAFS + dev="-s sites/orion.ent -f" + PYTHON3=/apps/intel-2020/intel-2020/intelpython3/bin/python3 + +# NOAA RDHPCS Hera +#HOMEhafs=/scratch1/NCEPDEV/hwrf/save/${USER}/HAFS +#dev="-s sites/hera.ent -f" +#PYTHON3=/apps/intel/intelpython3/bin/python3 + +cd ${HOMEhafs}/rocoto + +EXPT=$(basename ${HOMEhafs}) + +#=============================================================================== + + # h2db: hafsv0p2a with fgat+3denvar + confh2db="config.EXPT=${EXPT} config.SUBEXPT=hafsv0p2a_regional_h2db \ + config.run_gsi_vr=no config.run_gsi_vr_fgat=no config.run_gsi_vr_ens=no \ + config.run_gsi=yes config.run_fgat=yes config.run_envar=yes \ + config.run_ensda=no config.ENS_SIZE=40 config.run_enkf=no \ + config.NHRS=102 \ + config.GRID_RATIO_ENS=2 \ + gsi.use_bufr_nr=yes \ + ../parm/hafsv0p2a_regional_da_AL.conf \ + ../parm/hafs_hycom.conf" + + # h2dc: hafsv0p2a with fgat+3denvar+enkf + confh2dc="config.EXPT=${EXPT} config.SUBEXPT=hafsv0p2a_regional_h2dc \ + config.run_gsi_vr=no config.run_gsi_vr_fgat=no config.run_gsi_vr_ens=no \ + config.run_gsi=yes config.run_fgat=yes config.run_envar=yes \ + config.run_ensda=yes config.ENS_SIZE=40 config.run_enkf=yes \ + config.NHRS=102 \ + config.GRID_RATIO_ENS=2 \ + gsi.use_bufr_nr=yes \ + ../parm/hafsv0p2a_regional_da_AL.conf \ + ../parm/hafs_hycom.conf" + + # h2dd: hafsv0p2a with gsi_vr+fgat+3denvar+enkf + confh2dd="config.EXPT=${EXPT} config.SUBEXPT=hafsv0p2a_regional_h2dd \ + config.run_gsi_vr=yes config.run_gsi_vr_fgat=yes config.run_gsi_vr_ens=yes \ + config.run_gsi=yes config.run_fgat=yes config.run_envar=yes \ + config.run_ensda=yes config.ENS_SIZE=40 config.run_enkf=yes \ + config.NHRS=102 \ + config.GRID_RATIO_ENS=2 \ + gsi.use_bufr_nr=yes \ + ../parm/hafsv0p2a_regional_da_AL.conf \ + ../parm/hafs_hycom.conf" + + # Choose the configuration to run + confopts="${confh2db}" +#confopts="${confh2dc}" + +## Technical test for 2020082506-2020082512 13L2020 +#${PYTHON3} ./run_hafs.py -t ${dev} 2020082506-2020082512 00L HISTORY ${confopts} \ +# config.run_emcgraphics=no \ +# config.scrub_work=no config.scrub_com=no + +## 2020 NATL storm slots +#${PYTHON3} ./run_hafs.py -t ${dev} 2020060112-2020060812 00L HISTORY ${confopts} # Slot 1.0: 03L +#${PYTHON3} ./run_hafs.py -t ${dev} 2020062112-2020062406 00L HISTORY ${confopts} # Slot 1.1: 04L +#${PYTHON3} ./run_hafs.py -t ${dev} 2020070400-2020070612 00L HISTORY ${confopts} # Slot 1.2: 05L +#${PYTHON3} ./run_hafs.py -t ${dev} 2020070912-2020071100 00L HISTORY ${confopts} # Slot 1.3: 06L +#${PYTHON3} ./run_hafs.py -t ${dev} 2020072112-2020072618 00L HISTORY ${confopts} # Slot 1.4: 07L, 08L +#${PYTHON3} ./run_hafs.py -t ${dev} 2020072806-2020080500 00L HISTORY ${confopts} # Slot 2: 09L, 10L +#${PYTHON3} ./run_hafs.py -t ${dev} 2020081100-2020081612 00L HISTORY ${confopts} # Slot 3: 11L, 12L +#${PYTHON3} ./run_hafs.py -t ${dev} 2020081918-2020082718 00L HISTORY ${confopts} # Slot 4: 13L, 14L +#${PYTHON3} ./run_hafs.py -t ${dev} 2020083112-2020090512 00L HISTORY ${confopts} # Slot 5: 15L, 16L +#${PYTHON3} ./run_hafs.py -t ${dev} 2020090612-2020091118 00L HISTORY ${confopts} # Slot 6: 17Lp1, 18Lp1 +#${PYTHON3} ./run_hafs.py -t ${dev} 2020091200-2020092300 00L HISTORY ${confopts} # Slot 7: 17Lp2, 18Lp2, 19-24L +#${PYTHON3} ./run_hafs.py -t ${dev} 2020100212-2020101018 00L HISTORY ${confopts} # Slot 8: 25L, 26L +#${PYTHON3} ./run_hafs.py -t ${dev} 2020101618-2020102912 00L HISTORY ${confopts} # Slot 9: 27L, 28L +#${PYTHON3} ./run_hafs.py -t ${dev} 2020101618-2020102912 00L HISTORY ${confopts} # Slot 10: 29-31L # No GFSv16 version input data + +## 2019 NATL storm slots +#${PYTHON3} ./run_hafs.py -t ${dev} 2019082406-2019091006 00L HISTORY ${confopts} # Slot 5: 05-08L +#${PYTHON3} ./run_hafs.py -t ${dev} 2019091212-2019092712 00L HISTORY ${confopts} # Slot 6: 09-12L + +#=============================================================================== + +date + +echo 'cronjob done' diff --git a/rocoto/hafs_rt_status.sh b/rocoto/hafs_rt_status.sh index 1f866e6b1..18652fb6b 100755 --- a/rocoto/hafs_rt_status.sh +++ b/rocoto/hafs_rt_status.sh @@ -6,9 +6,8 @@ # the different configuration names. # The script looks for: # 1. storm1.done 2. *atcfunix.all 3. hafsprs.synoptic.f012.grb2 -# 4. dynf012.nc 5. phyf012.nc 6. the number of dyn and phy files -# 5. hycominit2.done for coupled runs 6. post/product job done in post and prod log files -# 7. SUCCEEDED for completion task +# 4. hycominit2.done for coupled runs 5. post/product job done in post and prod log files +# 6. SUCCEEDED for completion task # Author: Mrinal Biswas DTC/NCAR # Do not contact: biswas@ucar.edu @@ -40,13 +39,8 @@ for file in *.xml; do storm1_done=${HAFS_out}/${subexpt}/com/${storm_init}/${sid}/storm1.done atcfunix=$(/usr/bin/find ${HAFS_out}/${subexpt}/com/${storm_init}/${sid} -type f -name "*atcfunix.all") hafsprs_synoptic=$(/usr/bin/find ${HAFS_out}/${subexpt}/com/${storm_init}/${sid} -type f -name "*.hafsprs.synoptic.0p03.f012.grb2") - dynf_files=$(/usr/bin/find ${HAFS_out}/${subexpt}/${storm_init}/${sid}/forecast -type f -name "dynf012.nc") - phyf_files=$(/usr/bin/find ${HAFS_out}/${subexpt}/${storm_init}/${sid}/forecast -type f -name "phyf012.nc") hafs_hycom=$(/usr/bin/find ${HAFS_out}/${subexpt}/com/${storm_init}/${sid} -type f -name "*hafs_hycom*") - dynf_files_cnt="`ls ${HAFS_out}/${subexpt}/${storm_init}/${sid}/forecast/dynf*.nc|wc -l`" - phyf_files_cnt="`ls ${HAFS_out}/${subexpt}/${storm_init}/${sid}/forecast/phyf*.nc|wc -l`" - # Check if HYCOM init ran successfully or not if [[ `echo $file|grep "regional_static_cplocean3"|wc -l` == "1" ]]; then @@ -92,14 +86,6 @@ for file in *.xml; do fi fi - # Count the number of dyn and phy files - - if [[ $dynf_files_cnt == "5" && $phyf_files_cnt == "5" ]]; then - echo "ALL DYN AND PHY FILES PRESENT" - else - echo "ALL DYN AND PHY FILES NOT PRESENT" - fi - # Check storm1.done atcfunix and hafsprs.synoptic files if [[ -e ${storm1_done} && -e ${atcfunix} && -e ${hafsprs_synoptic} ]]; then @@ -108,18 +94,9 @@ for file in *.xml; do echo "STORM1.DONE, TRACKER OUTPUT, HAFSPRS.SYNOPTIC FILES DO NOT EXIST" fi - # Check to see if dyn and phy files are present - - if [[ -f "${dynf_files}" && -f "${phyf_files}" ]]; then - echo "FOUND ALL DYN AND PHY FILES IN THE FORECAST DIRECTORY" - else - echo "DID NOT FIND ALL THE DYN AND PHY FILES IN THE FORECAST DIRECTORY" - fi - # Check if everything passed if [[ $if_complete == "1" ]]; then - if [[ $dynf_files_cnt == "5" && $phyf_files_cnt == "5" ]]; then if [[ -e ${storm1_done} && -e ${atcfunix} && -e ${hafsprs_synoptic} ]]; then if [[ $post_log == "post job done" ]]; then if [[ $prod_log == "product job done" ]]; then @@ -129,7 +106,6 @@ for file in *.xml; do fi fi fi - fi fi done diff --git a/rocoto/hafs_workflow.xml.in b/rocoto/hafs_workflow.xml.in index a222f434a..b274bc5a8 100644 --- a/rocoto/hafs_workflow.xml.in +++ b/rocoto/hafs_workflow.xml.in @@ -407,6 +407,49 @@ @** endif @** if RUN_GSI==YES + + + &JOBhafs;/JHAFS_OBS_PROC + hafs_obs_proc_&SID;_@Y@m@d@H + &WORKhafs;/hafs_obs_proc.log + &ACCOUNT; + &RESERVATION; + &QUEUE_PE; + &PE_EXTRA; + &OBS_PROC_RESOURCES; + &ENV_VARS; + + + + + + + + + +@** if RUN_ATM_INIT==YES + + &JOBhafs;/JHAFS_ATM_INIT + hafs_atm_init_&SID;_@Y@m@d@H + &WORKhafs;/hafs_atm_init.log + &ACCOUNT; + &RESERVATION; + &QUEUE_PE; + &PE_EXTRA; + &ATM_INIT_RESOURCES; + &ENV_VARS; + + + + +@** if gtype==regional + +@** endif + + + +@** endif + &JOBhafs;/JHAFS_ANALYSIS hafs_analysis_&SID;_@Y@m@d@H @@ -420,6 +463,7 @@ + &RUN_GSI;YES @** if RUN_GSI_VR==YES @@ -449,29 +493,6 @@ @** endif @** endif -@** if RUN_ATM_INIT==YES - - &JOBhafs;/JHAFS_ATM_INIT - hafs_atm_init_&SID;_@Y@m@d@H - &WORKhafs;/hafs_atm_init.log - &ACCOUNT; - &RESERVATION; - &QUEUE_PE; - &PE_EXTRA; - &ATM_INIT_RESOURCES; - &ENV_VARS; - - - - -@** if gtype==regional - -@** endif - - - -@** endif - &JOBhafs;/JHAFS_FORECAST hafs_forecast_&SID;_@Y@m@d@H @@ -966,7 +987,7 @@ - + diff --git a/rocoto/sites/hera.ent b/rocoto/sites/hera.ent index bc7d97c09..6f38f7a06 100644 --- a/rocoto/sites/hera.ent +++ b/rocoto/sites/hera.ent @@ -15,14 +15,14 @@ 1G"> 6:ppn=2:tpp=6TOTAL_TASKS12NCTSK2OMP_THREADS600:30:0024G"> + 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK40OMP_THREADS100:30:00"> 6:ppn=20:tpp=1TOTAL_TASKS120NCTSK20OMP_THREADS100:30:00"> 6:ppn=20:tpp=1TOTAL_TASKS120NCTSK20OMP_THREADS101:00:00"> 6:ppn=20:tpp=1TOTAL_TASKS120NCTSK20OMP_THREADS100:30:00"> 6:ppn=20:tpp=1TOTAL_TASKS120NCTSK20OMP_THREADS101:00:00"> 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK40OMP_THREADS100:30:00"> - - 80:ppn=10:tpp=1TOTAL_TASKS800NCTSK10OMP_THREADS103:00:00"> - 60:ppn=1:tpp=1TOTAL_TASKS60NCTSK1OMP_THREADS102:00:00"> + 40:ppn=20:tpp=2TOTAL_TASKS800NCTSK20OMP_THREADS203:00:00"> + 41:ppn=1:tpp=40TOTAL_TASKS41NCTSK1OMP_THREADS4002:00:00"> 1:ppn=20:tpp=1TOTAL_TASKS20NCTSK20OMP_THREADS102:00:00"> 07:59:00"> @@ -34,28 +34,80 @@ 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 168:ppn=12:tpp=2TOTAL_TASKS2016NCTSK12&FORECAST_EXTRA;"> + 20:ppn=12:tpp=2TOTAL_TASKS240NCTSK12&FORECAST_EXTRA;"> + 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> + 168:ppn=12:tpp=2TOTAL_TASKS2016NCTSK12&FORECAST_EXTRA;"> + + 21:ppn=12:tpp=2TOTAL_TASKS252NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + + 22:ppn=12:tpp=2TOTAL_TASKS264NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=2TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 170:ppn=12:tpp=2TOTAL_TASKS2040NCTSK12&FORECAST_EXTRA;"> + 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 100:ppn=20:tpp=2TOTAL_TASKS2000NCTSK20&FORECAST_EXTRA;"> + 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> + 103:ppn=20:tpp=2TOTAL_TASKS2060NCTSK20&FORECAST_EXTRA;"> + 6:ppn=12:tpp=2TOTAL_TASKS72NCTSK12&FORECAST_EXTRA;"> 4:ppn=20:tpp=2TOTAL_TASKS80NCTSK20&FORECAST_EXTRA;"> + 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> 133:ppn=12:tpp=2TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> 173:ppn=12:tpp=2TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 129:ppn=12:tpp=2TOTAL_TASKS1548NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> + 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + 133:ppn=12:tpp=2TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> + 173:ppn=12:tpp=2TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=2TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + 134:ppn=12:tpp=2TOTAL_TASKS1608NCTSK12&FORECAST_EXTRA;"> + 174:ppn=12:tpp=2TOTAL_TASKS2088NCTSK12&FORECAST_EXTRA;"> + + 45:ppn=12:tpp=2TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=2TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 135:ppn=12:tpp=2TOTAL_TASKS1620NCTSK12&FORECAST_EXTRA;"> + 175:ppn=12:tpp=2TOTAL_TASKS2100NCTSK12&FORECAST_EXTRA;"> + 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> 79:ppn=20:tpp=2TOTAL_TASKS1580NCTSK20&FORECAST_EXTRA;"> 103:ppn=20:tpp=2TOTAL_TASKS2060NCTSK20&FORECAST_EXTRA;"> + 25:ppn=20:tpp=2TOTAL_TASKS500NCTSK20&FORECAST_EXTRA;"> + 70:ppn=20:tpp=2TOTAL_TASKS1400NCTSK20&FORECAST_EXTRA;"> + 82:ppn=20:tpp=2TOTAL_TASKS1640NCTSK20&FORECAST_EXTRA;"> + 106:ppn=20:tpp=2TOTAL_TASKS2120NCTSK20&FORECAST_EXTRA;"> + 52:ppn=12:tpp=2TOTAL_TASKS624NCTSK12&FORECAST_EXTRA;"> 140:ppn=12:tpp=2TOTAL_TASKS1680NCTSK12&FORECAST_EXTRA;"> 148:ppn=12:tpp=2TOTAL_TASKS1776NCTSK12&FORECAST_EXTRA;"> + 52:ppn=12:tpp=2TOTAL_TASKS624NCTSK12&FORECAST_EXTRA;"> + 140:ppn=12:tpp=2TOTAL_TASKS1680NCTSK12&FORECAST_EXTRA;"> + 148:ppn=12:tpp=2TOTAL_TASKS1776NCTSK12&FORECAST_EXTRA;"> + 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> + 141:ppn=12:tpp=2TOTAL_TASKS1692NCTSK12&FORECAST_EXTRA;"> + 149:ppn=12:tpp=2TOTAL_TASKS1788NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=2TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 142:ppn=12:tpp=2TOTAL_TASKS1704NCTSK12&FORECAST_EXTRA;"> + 150:ppn=12:tpp=2TOTAL_TASKS1800NCTSK12&FORECAST_EXTRA;"> 88:ppn=20:tpp=2TOTAL_TASKS1760NCTSK20&FORECAST_EXTRA;"> + 91:ppn=20:tpp=2TOTAL_TASKS1820NCTSK20&FORECAST_EXTRA;"> 6:ppn=12:tpp=2TOTAL_TASKS72NCTSK12&FORECAST_EXTRA;"> @@ -66,8 +118,46 @@ 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + + 34:ppn=12:tpp=2TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=2TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 104:ppn=12:tpp=2TOTAL_TASKS1248NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + + 28:ppn=12:tpp=2TOTAL_TASKS336NCTSK12&FORECAST_EXTRA;"> + 33:ppn=12:tpp=2TOTAL_TASKS396NCTSK12&FORECAST_EXTRA;"> + 38:ppn=12:tpp=2TOTAL_TASKS456NCTSK12&FORECAST_EXTRA;"> + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> + 48:ppn=12:tpp=2TOTAL_TASKS576NCTSK12&FORECAST_EXTRA;"> + 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> + 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> + 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + + 29:ppn=12:tpp=2TOTAL_TASKS348NCTSK12&FORECAST_EXTRA;"> + 34:ppn=12:tpp=2TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=2TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=2TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=2TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + + 30:ppn=12:tpp=2TOTAL_TASKS360NCTSK12&FORECAST_EXTRA;"> + 35:ppn=12:tpp=2TOTAL_TASKS420NCTSK12&FORECAST_EXTRA;"> + 40:ppn=12:tpp=2TOTAL_TASKS480NCTSK12&FORECAST_EXTRA;"> + 45:ppn=12:tpp=2TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 50:ppn=12:tpp=2TOTAL_TASKS600NCTSK12&FORECAST_EXTRA;"> + 55:ppn=12:tpp=2TOTAL_TASKS660NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=2TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=2TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 4:ppn=20:tpp=2TOTAL_TASKS80NCTSK20&FORECAST_EXTRA;"> 7:ppn=20:tpp=2TOTAL_TASKS140NCTSK20&FORECAST_EXTRA;"> + + 16:ppn=20:tpp=2TOTAL_TASKS320NCTSK20&FORECAST_EXTRA;"> + 19:ppn=20:tpp=2TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 19:ppn=20:tpp=2TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 28:ppn=20:tpp=2TOTAL_TASKS560NCTSK20&FORECAST_EXTRA;"> @@ -75,9 +165,19 @@ 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> - 4:ppn=40:tpp=1TOTAL_TASKS160NCTSK40OMP_THREADS107:59:00"> + 19:ppn=20:tpp=2TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> + 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> + 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> + 25:ppn=20:tpp=2TOTAL_TASKS500NCTSK20&FORECAST_EXTRA;"> + 31:ppn=20:tpp=2TOTAL_TASKS620NCTSK20&FORECAST_EXTRA;"> + 34:ppn=20:tpp=2TOTAL_TASKS680NCTSK20&FORECAST_EXTRA;"> + 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> + 70:ppn=20:tpp=2TOTAL_TASKS1400NCTSK20&FORECAST_EXTRA;"> + + 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK40OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:0024G"> 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK1OMP_THREADS107:59:00"> - 10:ppn=40:tpp=1TOTAL_TASKS400NCTSK40OMP_THREADS101:15:00"> + 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK40OMP_THREADS107:59:00"> + diff --git a/rocoto/sites/kjet.ent b/rocoto/sites/kjet.ent index f2cb72529..64fa7c523 100644 --- a/rocoto/sites/kjet.ent +++ b/rocoto/sites/kjet.ent @@ -15,14 +15,14 @@ 1G"> 6:ppn=2:tpp=6TOTAL_TASKS12NCTSK2OMP_THREADS600:30:0024G"> + 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK40OMP_THREADS100:30:00"> 6:ppn=20:tpp=1TOTAL_TASKS120NCTSK20OMP_THREADS100:30:00"> 6:ppn=20:tpp=1TOTAL_TASKS120NCTSK20OMP_THREADS101:00:00"> 6:ppn=20:tpp=1TOTAL_TASKS120NCTSK20OMP_THREADS100:30:00"> 6:ppn=20:tpp=1TOTAL_TASKS120NCTSK20OMP_THREADS101:00:00"> 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK40OMP_THREADS100:30:00"> - - 80:ppn=10:tpp=1TOTAL_TASKS800NCTSK10OMP_THREADS103:00:00"> - 60:ppn=1:tpp=1TOTAL_TASKS60NCTSK1OMP_THREADS102:00:00"> + 40:ppn=20:tpp=2TOTAL_TASKS800NCTSK20OMP_THREADS203:00:00"> + 41:ppn=1:tpp=40TOTAL_TASKS41NCTSK1OMP_THREADS4002:00:00"> 1:ppn=20:tpp=1TOTAL_TASKS20NCTSK20OMP_THREADS102:00:00"> 07:59:00"> @@ -34,18 +34,52 @@ 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 168:ppn=12:tpp=2TOTAL_TASKS2016NCTSK12&FORECAST_EXTRA;"> + 20:ppn=12:tpp=2TOTAL_TASKS240NCTSK12&FORECAST_EXTRA;"> + 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> + 168:ppn=12:tpp=2TOTAL_TASKS2016NCTSK12&FORECAST_EXTRA;"> + + 21:ppn=12:tpp=2TOTAL_TASKS252NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + + 22:ppn=12:tpp=2TOTAL_TASKS264NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=2TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 170:ppn=12:tpp=2TOTAL_TASKS2040NCTSK12&FORECAST_EXTRA;"> + 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 100:ppn=20:tpp=2TOTAL_TASKS2000NCTSK20&FORECAST_EXTRA;"> 6:ppn=12:tpp=2TOTAL_TASKS72NCTSK12&FORECAST_EXTRA;"> 4:ppn=20:tpp=2TOTAL_TASKS80NCTSK20&FORECAST_EXTRA;"> + 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> 133:ppn=12:tpp=2TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> 173:ppn=12:tpp=2TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 129:ppn=12:tpp=2TOTAL_TASKS1548NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> + 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + 133:ppn=12:tpp=2TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> + 173:ppn=12:tpp=2TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=2TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + 134:ppn=12:tpp=2TOTAL_TASKS1608NCTSK12&FORECAST_EXTRA;"> + 174:ppn=12:tpp=2TOTAL_TASKS2088NCTSK12&FORECAST_EXTRA;"> + + 45:ppn=12:tpp=2TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=2TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 135:ppn=12:tpp=2TOTAL_TASKS1620NCTSK12&FORECAST_EXTRA;"> + 175:ppn=12:tpp=2TOTAL_TASKS2100NCTSK12&FORECAST_EXTRA;"> + 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> 79:ppn=20:tpp=2TOTAL_TASKS1580NCTSK20&FORECAST_EXTRA;"> @@ -55,6 +89,15 @@ 52:ppn=12:tpp=2TOTAL_TASKS624NCTSK12&FORECAST_EXTRA;"> 140:ppn=12:tpp=2TOTAL_TASKS1680NCTSK12&FORECAST_EXTRA;"> 148:ppn=12:tpp=2TOTAL_TASKS1776NCTSK12&FORECAST_EXTRA;"> + 52:ppn=12:tpp=2TOTAL_TASKS624NCTSK12&FORECAST_EXTRA;"> + 140:ppn=12:tpp=2TOTAL_TASKS1680NCTSK12&FORECAST_EXTRA;"> + 148:ppn=12:tpp=2TOTAL_TASKS1776NCTSK12&FORECAST_EXTRA;"> + 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> + 141:ppn=12:tpp=2TOTAL_TASKS1692NCTSK12&FORECAST_EXTRA;"> + 149:ppn=12:tpp=2TOTAL_TASKS1788NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=2TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 142:ppn=12:tpp=2TOTAL_TASKS1704NCTSK12&FORECAST_EXTRA;"> + 150:ppn=12:tpp=2TOTAL_TASKS1800NCTSK12&FORECAST_EXTRA;"> 88:ppn=20:tpp=2TOTAL_TASKS1760NCTSK20&FORECAST_EXTRA;"> @@ -66,8 +109,45 @@ 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + + 34:ppn=12:tpp=2TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=2TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 104:ppn=12:tpp=2TOTAL_TASKS1248NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + + 28:ppn=12:tpp=2TOTAL_TASKS336NCTSK12&FORECAST_EXTRA;"> + 33:ppn=12:tpp=2TOTAL_TASKS396NCTSK12&FORECAST_EXTRA;"> + 38:ppn=12:tpp=2TOTAL_TASKS456NCTSK12&FORECAST_EXTRA;"> + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> + 48:ppn=12:tpp=2TOTAL_TASKS576NCTSK12&FORECAST_EXTRA;"> + 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> + 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> + 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + + 29:ppn=12:tpp=2TOTAL_TASKS348NCTSK12&FORECAST_EXTRA;"> + 34:ppn=12:tpp=2TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=2TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=2TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=2TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + + 30:ppn=12:tpp=2TOTAL_TASKS360NCTSK12&FORECAST_EXTRA;"> + 35:ppn=12:tpp=2TOTAL_TASKS420NCTSK12&FORECAST_EXTRA;"> + 40:ppn=12:tpp=2TOTAL_TASKS480NCTSK12&FORECAST_EXTRA;"> + 45:ppn=12:tpp=2TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 50:ppn=12:tpp=2TOTAL_TASKS600NCTSK12&FORECAST_EXTRA;"> + 55:ppn=12:tpp=2TOTAL_TASKS660NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=2TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=2TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 4:ppn=20:tpp=2TOTAL_TASKS80NCTSK20&FORECAST_EXTRA;"> 7:ppn=20:tpp=2TOTAL_TASKS140NCTSK20&FORECAST_EXTRA;"> + 16:ppn=20:tpp=2TOTAL_TASKS320NCTSK20&FORECAST_EXTRA;"> + 19:ppn=20:tpp=2TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 19:ppn=20:tpp=2TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 28:ppn=20:tpp=2TOTAL_TASKS560NCTSK20&FORECAST_EXTRA;"> @@ -75,9 +155,10 @@ 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> - 6:ppn=40:tpp=1TOTAL_TASKS240NCTSK40OMP_THREADS107:59:00"> + 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK40OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:0024G"> 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK1OMP_THREADS107:59:00"> - 10:ppn=40:tpp=1TOTAL_TASKS400NCTSK40OMP_THREADS101:15:00"> + 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK40OMP_THREADS107:59:00"> + diff --git a/rocoto/sites/orion.ent b/rocoto/sites/orion.ent index a86bba72d..0f76f2b7a 100644 --- a/rocoto/sites/orion.ent +++ b/rocoto/sites/orion.ent @@ -15,14 +15,14 @@ 1G"> 6:ppn=2:tpp=6TOTAL_TASKS12NCTSK2OMP_THREADS600:30:0024G"> + 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK40OMP_THREADS100:30:00"> 6:ppn=20:tpp=1TOTAL_TASKS120NCTSK20OMP_THREADS100:30:00"> 6:ppn=20:tpp=1TOTAL_TASKS120NCTSK20OMP_THREADS101:00:00"> 6:ppn=20:tpp=1TOTAL_TASKS120NCTSK20OMP_THREADS100:30:00"> 6:ppn=20:tpp=1TOTAL_TASKS120NCTSK20OMP_THREADS101:00:00"> 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK40OMP_THREADS100:30:00"> - - 80:ppn=10:tpp=1TOTAL_TASKS800NCTSK10OMP_THREADS103:00:00"> - 60:ppn=1:tpp=1TOTAL_TASKS60NCTSK1OMP_THREADS102:00:00"> + 40:ppn=20:tpp=2TOTAL_TASKS800NCTSK20OMP_THREADS203:00:00"> + 41:ppn=1:tpp=40TOTAL_TASKS41NCTSK1OMP_THREADS4002:00:00"> 1:ppn=20:tpp=1TOTAL_TASKS20NCTSK20OMP_THREADS102:00:00"> 07:59:00"> @@ -34,6 +34,18 @@ 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 168:ppn=12:tpp=2TOTAL_TASKS2016NCTSK12&FORECAST_EXTRA;"> + 20:ppn=12:tpp=2TOTAL_TASKS240NCTSK12&FORECAST_EXTRA;"> + 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> + 168:ppn=12:tpp=2TOTAL_TASKS2016NCTSK12&FORECAST_EXTRA;"> + + 21:ppn=12:tpp=2TOTAL_TASKS252NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + + 22:ppn=12:tpp=2TOTAL_TASKS264NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=2TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 170:ppn=12:tpp=2TOTAL_TASKS2040NCTSK12&FORECAST_EXTRA;"> + 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 100:ppn=20:tpp=2TOTAL_TASKS2000NCTSK20&FORECAST_EXTRA;"> @@ -48,6 +60,26 @@ 133:ppn=12:tpp=2TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> 173:ppn=12:tpp=2TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 129:ppn=12:tpp=2TOTAL_TASKS1548NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> + 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + 133:ppn=12:tpp=2TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> + 173:ppn=12:tpp=2TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=2TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + 134:ppn=12:tpp=2TOTAL_TASKS1608NCTSK12&FORECAST_EXTRA;"> + 174:ppn=12:tpp=2TOTAL_TASKS2088NCTSK12&FORECAST_EXTRA;"> + + 45:ppn=12:tpp=2TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=2TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 135:ppn=12:tpp=2TOTAL_TASKS1620NCTSK12&FORECAST_EXTRA;"> + 175:ppn=12:tpp=2TOTAL_TASKS2100NCTSK12&FORECAST_EXTRA;"> + 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> 79:ppn=20:tpp=2TOTAL_TASKS1580NCTSK20&FORECAST_EXTRA;"> @@ -57,6 +89,15 @@ 52:ppn=12:tpp=2TOTAL_TASKS624NCTSK12&FORECAST_EXTRA;"> 140:ppn=12:tpp=2TOTAL_TASKS1680NCTSK12&FORECAST_EXTRA;"> 148:ppn=12:tpp=2TOTAL_TASKS1776NCTSK12&FORECAST_EXTRA;"> + 52:ppn=12:tpp=2TOTAL_TASKS624NCTSK12&FORECAST_EXTRA;"> + 140:ppn=12:tpp=2TOTAL_TASKS1680NCTSK12&FORECAST_EXTRA;"> + 148:ppn=12:tpp=2TOTAL_TASKS1776NCTSK12&FORECAST_EXTRA;"> + 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> + 141:ppn=12:tpp=2TOTAL_TASKS1692NCTSK12&FORECAST_EXTRA;"> + 149:ppn=12:tpp=2TOTAL_TASKS1788NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=2TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 142:ppn=12:tpp=2TOTAL_TASKS1704NCTSK12&FORECAST_EXTRA;"> + 150:ppn=12:tpp=2TOTAL_TASKS1800NCTSK12&FORECAST_EXTRA;"> 88:ppn=20:tpp=2TOTAL_TASKS1760NCTSK20&FORECAST_EXTRA;"> @@ -68,8 +109,45 @@ 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + + 34:ppn=12:tpp=2TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=2TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 104:ppn=12:tpp=2TOTAL_TASKS1248NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + + 28:ppn=12:tpp=2TOTAL_TASKS336NCTSK12&FORECAST_EXTRA;"> + 33:ppn=12:tpp=2TOTAL_TASKS396NCTSK12&FORECAST_EXTRA;"> + 38:ppn=12:tpp=2TOTAL_TASKS456NCTSK12&FORECAST_EXTRA;"> + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> + 48:ppn=12:tpp=2TOTAL_TASKS576NCTSK12&FORECAST_EXTRA;"> + 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> + 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> + 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + + 29:ppn=12:tpp=2TOTAL_TASKS348NCTSK12&FORECAST_EXTRA;"> + 34:ppn=12:tpp=2TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=2TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=2TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=2TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + + 30:ppn=12:tpp=2TOTAL_TASKS360NCTSK12&FORECAST_EXTRA;"> + 35:ppn=12:tpp=2TOTAL_TASKS420NCTSK12&FORECAST_EXTRA;"> + 40:ppn=12:tpp=2TOTAL_TASKS480NCTSK12&FORECAST_EXTRA;"> + 45:ppn=12:tpp=2TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 50:ppn=12:tpp=2TOTAL_TASKS600NCTSK12&FORECAST_EXTRA;"> + 55:ppn=12:tpp=2TOTAL_TASKS660NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=2TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=2TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 4:ppn=20:tpp=2TOTAL_TASKS80NCTSK20&FORECAST_EXTRA;"> 7:ppn=20:tpp=2TOTAL_TASKS140NCTSK20&FORECAST_EXTRA;"> + 16:ppn=20:tpp=2TOTAL_TASKS320NCTSK20&FORECAST_EXTRA;"> + 19:ppn=20:tpp=2TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 19:ppn=20:tpp=2TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 28:ppn=20:tpp=2TOTAL_TASKS560NCTSK20&FORECAST_EXTRA;"> @@ -77,9 +155,10 @@ 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> - 4:ppn=40:tpp=1TOTAL_TASKS160NCTSK40OMP_THREADS107:59:00"> + 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK40OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:0024G"> 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK1OMP_THREADS107:59:00"> - 10:ppn=40:tpp=1TOTAL_TASKS400NCTSK40OMP_THREADS101:15:00"> + 1:ppn=40:tpp=1TOTAL_TASKS40NCTSK40OMP_THREADS107:59:00"> + diff --git a/rocoto/sites/wcoss_cray.ent b/rocoto/sites/wcoss_cray.ent index a6acf186e..f7db0c4ff 100644 --- a/rocoto/sites/wcoss_cray.ent +++ b/rocoto/sites/wcoss_cray.ent @@ -15,14 +15,15 @@ 1G"> 3:ppn=4:tpp=6TOTAL_TASKS12NCTSK4OMP_THREADS600:30:00"> + 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS100:30:00"> 30:ppn=12:tpp=1TOTAL_TASKS360NCTSK12OMP_THREADS100:30:00"> 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS103:30:00"> 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS100:30:00"> 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS103:30:00"> 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS100:30:00"> - 60:ppn=12:tpp=1TOTAL_TASKS720NCTSK12OMP_THREADS102:00:00"> - 60:ppn=1:tpp=1TOTAL_TASKS60NCTSK1OMP_THREADS102:00:00"> + 50:ppn=12:tpp=2TOTAL_TASKS600NCTSK12OMP_THREADS202:00:00"> + 60:ppn=1:tpp=24TOTAL_TASKS60NCTSK1OMP_THREADS2402:00:00"> 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS102:00:00"> 07:59:00"> @@ -34,18 +35,52 @@ 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 168:ppn=12:tpp=2TOTAL_TASKS2016NCTSK12&FORECAST_EXTRA;"> + 20:ppn=12:tpp=2TOTAL_TASKS240NCTSK12&FORECAST_EXTRA;"> + 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> + 168:ppn=12:tpp=2TOTAL_TASKS2016NCTSK12&FORECAST_EXTRA;"> + + 21:ppn=12:tpp=2TOTAL_TASKS252NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + + 22:ppn=12:tpp=2TOTAL_TASKS264NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=2TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 170:ppn=12:tpp=2TOTAL_TASKS2040NCTSK12&FORECAST_EXTRA;"> + 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 100:ppn=20:tpp=2TOTAL_TASKS2000NCTSK20&FORECAST_EXTRA;"> 6:ppn=12:tpp=2TOTAL_TASKS72NCTSK12&FORECAST_EXTRA;"> 4:ppn=20:tpp=2TOTAL_TASKS80NCTSK20&FORECAST_EXTRA;"> + 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> 133:ppn=12:tpp=2TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> 173:ppn=12:tpp=2TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 129:ppn=12:tpp=2TOTAL_TASKS1548NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> + 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + 133:ppn=12:tpp=2TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> + 173:ppn=12:tpp=2TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=2TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + 134:ppn=12:tpp=2TOTAL_TASKS1608NCTSK12&FORECAST_EXTRA;"> + 174:ppn=12:tpp=2TOTAL_TASKS2088NCTSK12&FORECAST_EXTRA;"> + + 45:ppn=12:tpp=2TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=2TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 135:ppn=12:tpp=2TOTAL_TASKS1620NCTSK12&FORECAST_EXTRA;"> + 175:ppn=12:tpp=2TOTAL_TASKS2100NCTSK12&FORECAST_EXTRA;"> + 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> 79:ppn=20:tpp=2TOTAL_TASKS1580NCTSK20&FORECAST_EXTRA;"> @@ -55,6 +90,15 @@ 52:ppn=12:tpp=2TOTAL_TASKS624NCTSK12&FORECAST_EXTRA;"> 140:ppn=12:tpp=2TOTAL_TASKS1680NCTSK12&FORECAST_EXTRA;"> 148:ppn=12:tpp=2TOTAL_TASKS1776NCTSK12&FORECAST_EXTRA;"> + 52:ppn=12:tpp=2TOTAL_TASKS624NCTSK12&FORECAST_EXTRA;"> + 140:ppn=12:tpp=2TOTAL_TASKS1680NCTSK12&FORECAST_EXTRA;"> + 148:ppn=12:tpp=2TOTAL_TASKS1776NCTSK12&FORECAST_EXTRA;"> + 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> + 141:ppn=12:tpp=2TOTAL_TASKS1692NCTSK12&FORECAST_EXTRA;"> + 149:ppn=12:tpp=2TOTAL_TASKS1788NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=2TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 142:ppn=12:tpp=2TOTAL_TASKS1704NCTSK12&FORECAST_EXTRA;"> + 150:ppn=12:tpp=2TOTAL_TASKS1800NCTSK12&FORECAST_EXTRA;"> 88:ppn=20:tpp=2TOTAL_TASKS1760NCTSK20&FORECAST_EXTRA;"> @@ -66,8 +110,45 @@ 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + + 34:ppn=12:tpp=2TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=2TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 104:ppn=12:tpp=2TOTAL_TASKS1248NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + + 28:ppn=12:tpp=2TOTAL_TASKS336NCTSK12&FORECAST_EXTRA;"> + 33:ppn=12:tpp=2TOTAL_TASKS396NCTSK12&FORECAST_EXTRA;"> + 38:ppn=12:tpp=2TOTAL_TASKS456NCTSK12&FORECAST_EXTRA;"> + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> + 48:ppn=12:tpp=2TOTAL_TASKS576NCTSK12&FORECAST_EXTRA;"> + 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> + 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> + 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + + 29:ppn=12:tpp=2TOTAL_TASKS348NCTSK12&FORECAST_EXTRA;"> + 34:ppn=12:tpp=2TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=2TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=2TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=2TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + + 30:ppn=12:tpp=2TOTAL_TASKS360NCTSK12&FORECAST_EXTRA;"> + 35:ppn=12:tpp=2TOTAL_TASKS420NCTSK12&FORECAST_EXTRA;"> + 40:ppn=12:tpp=2TOTAL_TASKS480NCTSK12&FORECAST_EXTRA;"> + 45:ppn=12:tpp=2TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 50:ppn=12:tpp=2TOTAL_TASKS600NCTSK12&FORECAST_EXTRA;"> + 55:ppn=12:tpp=2TOTAL_TASKS660NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=2TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=2TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 4:ppn=20:tpp=2TOTAL_TASKS80NCTSK20&FORECAST_EXTRA;"> 7:ppn=20:tpp=2TOTAL_TASKS140NCTSK20&FORECAST_EXTRA;"> + 16:ppn=20:tpp=2TOTAL_TASKS320NCTSK20&FORECAST_EXTRA;"> + 19:ppn=20:tpp=2TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 19:ppn=20:tpp=2TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 28:ppn=20:tpp=2TOTAL_TASKS560NCTSK20&FORECAST_EXTRA;"> @@ -75,9 +156,10 @@ 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> - 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS107:59:00"> + 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:002G"> - 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS107:59:00"> - 36:ppn=12:tpp=1TOTAL_TASKS432NCTSK12OMP_THREADS101:15:00"> + 2:ppn=12:tpp=1TOTAL_TASKS24NCTSK12OMP_THREADS107:59:00"> + 2:ppn=12:tpp=1TOTAL_TASKS24NCTSK12OMP_THREADS107:59:00"> + diff --git a/rocoto/sites/wcoss_dell_p3.ent b/rocoto/sites/wcoss_dell_p3.ent index ce1e4be20..50224234e 100644 --- a/rocoto/sites/wcoss_dell_p3.ent +++ b/rocoto/sites/wcoss_dell_p3.ent @@ -16,14 +16,15 @@ 1:ppn=6:tpp=1TOTAL_TASKS6NCTSK6OMP_THREADS4-R affinity[core\(4\):distribute=balance]00:30:00"> + 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS100:30:00"> 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS101:30:00"> 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS103:30:00"> 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS101:30:00"> 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS103:30:00"> 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS100:30:00"> - 60:ppn=12:tpp=1TOTAL_TASKS720NCTSK12OMP_THREADS102:00:00"> - 60:ppn=1:tpp=1TOTAL_TASKS60NCTSK1OMP_THREADS102:00:00"> + 50:ppn=12:tpp=1TOTAL_TASKS600NCTSK12OMP_THREADS2-R affinity[core\(2\):distribute=balance]02:00:00"> + 60:ppn=1:tpp=1TOTAL_TASKS60NCTSK1OMP_THREADS24-R affinity[core\(24\):distribute=balance]02:00:00"> 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS102:00:00"> 07:59:00"> @@ -35,18 +36,52 @@ 108:ppn=12:tpp=1TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 168:ppn=12:tpp=1TOTAL_TASKS2016NCTSK12&FORECAST_EXTRA;"> + 20:ppn=12:tpp=1TOTAL_TASKS240NCTSK12&FORECAST_EXTRA;"> + 108:ppn=12:tpp=1TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> + 168:ppn=12:tpp=1TOTAL_TASKS2016NCTSK12&FORECAST_EXTRA;"> + + 21:ppn=12:tpp=1TOTAL_TASKS252NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=1TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=1TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + + 22:ppn=12:tpp=1TOTAL_TASKS264NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=1TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 170:ppn=12:tpp=1TOTAL_TASKS2040NCTSK12&FORECAST_EXTRA;"> + 64:ppn=20:tpp=1TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 100:ppn=20:tpp=1TOTAL_TASKS2000NCTSK20&FORECAST_EXTRA;"> 6:ppn=12:tpp=1TOTAL_TASKS72NCTSK12&FORECAST_EXTRA;"> 4:ppn=20:tpp=1TOTAL_TASKS80NCTSK20&FORECAST_EXTRA;"> + 64:ppn=20:tpp=1TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> + 43:ppn=12:tpp=1TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=1TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> 133:ppn=12:tpp=1TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> 173:ppn=12:tpp=1TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=1TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=1TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 129:ppn=12:tpp=1TOTAL_TASKS1548NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=1TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + + 43:ppn=12:tpp=1TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> + 113:ppn=12:tpp=1TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + 133:ppn=12:tpp=1TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> + 173:ppn=12:tpp=1TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + + 44:ppn=12:tpp=1TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=1TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + 134:ppn=12:tpp=1TOTAL_TASKS1608NCTSK12&FORECAST_EXTRA;"> + 174:ppn=12:tpp=1TOTAL_TASKS2088NCTSK12&FORECAST_EXTRA;"> + + 45:ppn=12:tpp=1TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=1TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 135:ppn=12:tpp=1TOTAL_TASKS1620NCTSK12&FORECAST_EXTRA;"> + 175:ppn=12:tpp=1TOTAL_TASKS2100NCTSK12&FORECAST_EXTRA;"> + 22:ppn=20:tpp=1TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=1TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> 79:ppn=20:tpp=1TOTAL_TASKS1580NCTSK20&FORECAST_EXTRA;"> @@ -56,6 +91,15 @@ 52:ppn=12:tpp=1TOTAL_TASKS624NCTSK12&FORECAST_EXTRA;"> 140:ppn=12:tpp=1TOTAL_TASKS1680NCTSK12&FORECAST_EXTRA;"> 148:ppn=12:tpp=1TOTAL_TASKS1776NCTSK12&FORECAST_EXTRA;"> + 52:ppn=12:tpp=1TOTAL_TASKS624NCTSK12&FORECAST_EXTRA;"> + 140:ppn=12:tpp=1TOTAL_TASKS1680NCTSK12&FORECAST_EXTRA;"> + 148:ppn=12:tpp=1TOTAL_TASKS1776NCTSK12&FORECAST_EXTRA;"> + 53:ppn=12:tpp=1TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> + 141:ppn=12:tpp=1TOTAL_TASKS1692NCTSK12&FORECAST_EXTRA;"> + 149:ppn=12:tpp=1TOTAL_TASKS1788NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=1TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 142:ppn=12:tpp=1TOTAL_TASKS1704NCTSK12&FORECAST_EXTRA;"> + 150:ppn=12:tpp=1TOTAL_TASKS1800NCTSK12&FORECAST_EXTRA;"> 88:ppn=20:tpp=1TOTAL_TASKS1760NCTSK20&FORECAST_EXTRA;"> @@ -67,8 +111,45 @@ 53:ppn=12:tpp=1TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> 108:ppn=12:tpp=1TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=1TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + + 34:ppn=12:tpp=1TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=1TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=1TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=1TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 104:ppn=12:tpp=1TOTAL_TASKS1248NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=1TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + + 28:ppn=12:tpp=1TOTAL_TASKS336NCTSK12&FORECAST_EXTRA;"> + 33:ppn=12:tpp=1TOTAL_TASKS396NCTSK12&FORECAST_EXTRA;"> + 38:ppn=12:tpp=1TOTAL_TASKS456NCTSK12&FORECAST_EXTRA;"> + 43:ppn=12:tpp=1TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> + 48:ppn=12:tpp=1TOTAL_TASKS576NCTSK12&FORECAST_EXTRA;"> + 53:ppn=12:tpp=1TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> + 108:ppn=12:tpp=1TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> + 113:ppn=12:tpp=1TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + + 29:ppn=12:tpp=1TOTAL_TASKS348NCTSK12&FORECAST_EXTRA;"> + 34:ppn=12:tpp=1TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=1TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=1TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=2TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=1TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=1TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=1TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + + 30:ppn=12:tpp=1TOTAL_TASKS360NCTSK12&FORECAST_EXTRA;"> + 35:ppn=12:tpp=1TOTAL_TASKS420NCTSK12&FORECAST_EXTRA;"> + 40:ppn=12:tpp=1TOTAL_TASKS480NCTSK12&FORECAST_EXTRA;"> + 45:ppn=12:tpp=1TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 50:ppn=12:tpp=1TOTAL_TASKS600NCTSK12&FORECAST_EXTRA;"> + 55:ppn=12:tpp=1TOTAL_TASKS660NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=1TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=1TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 4:ppn=20:tpp=1TOTAL_TASKS80NCTSK20&FORECAST_EXTRA;"> 7:ppn=20:tpp=1TOTAL_TASKS140NCTSK20&FORECAST_EXTRA;"> + 16:ppn=20:tpp=1TOTAL_TASKS320NCTSK20&FORECAST_EXTRA;"> + 19:ppn=20:tpp=1TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 19:ppn=20:tpp=1TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 22:ppn=20:tpp=1TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 28:ppn=20:tpp=1TOTAL_TASKS560NCTSK20&FORECAST_EXTRA;"> @@ -76,9 +157,10 @@ 64:ppn=20:tpp=1TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=1TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> - 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS107:59:00"> + 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:0024G"> - 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS107:59:00"> - 36:ppn=12:tpp=1TOTAL_TASKS432NCTSK12OMP_THREADS101:15:00"> + 2:ppn=12:tpp=1TOTAL_TASKS24NCTSK12OMP_THREADS107:59:00"> + 2:ppn=12:tpp=1TOTAL_TASKS24NCTSK12OMP_THREADS107:59:00"> + diff --git a/rocoto/sites/xjet.ent b/rocoto/sites/xjet.ent index 5916a0bc8..8430ecbcf 100644 --- a/rocoto/sites/xjet.ent +++ b/rocoto/sites/xjet.ent @@ -15,14 +15,15 @@ 1G"> 3:ppn=4:tpp=6TOTAL_TASKS12NCTSK4OMP_THREADS600:30:00"> + 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS100:30:00"> 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS101:30:00"> - 8:ppn=12:tpp=1TOTAL_TASKS96NCTSK12OMP_THREADS103:30:00"> - 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS100:30:00"> - 8:ppn=12:tpp=1TOTAL_TASKS96NCTSK12OMP_THREADS103:30:00"> + 5:ppn=12:tpp=1TOTAL_TASKS60NCTSK12OMP_THREADS103:30:00"> + 5:ppn=24:tpp=1TOTAL_TASKS120NCTSK24OMP_THREADS100:30:00"> + 5:ppn=12:tpp=1TOTAL_TASKS60NCTSK12OMP_THREADS103:30:00"> 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS100:30:00"> - 80:ppn=6:tpp=1TOTAL_TASKS480NCTSK6OMP_THREADS102:00:00"> - 60:ppn=1:tpp=1TOTAL_TASKS60NCTSK1OMP_THREADS102:00:00"> + 50:ppn=12:tpp=2TOTAL_TASKS600NCTSK12OMP_THREADS202:00:00"> + 60:ppn=1:tpp=24TOTAL_TASKS60NCTSK1OMP_THREADS2402:00:00"> 2:ppn=12:tpp=1TOTAL_TASKS24NCTSK12OMP_THREADS102:00:00"> 07:59:00"> @@ -38,23 +39,48 @@ 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 168:ppn=12:tpp=2TOTAL_TASKS2016NCTSK12&FORECAST_EXTRA;"> + 21:ppn=12:tpp=2TOTAL_TASKS252NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + + 22:ppn=12:tpp=2TOTAL_TASKS264NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=2TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 170:ppn=12:tpp=2TOTAL_TASKS2040NCTSK12&FORECAST_EXTRA;"> + 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 100:ppn=20:tpp=2TOTAL_TASKS2000NCTSK20&FORECAST_EXTRA;"> 6:ppn=12:tpp=2TOTAL_TASKS72NCTSK12&FORECAST_EXTRA;"> 4:ppn=20:tpp=2TOTAL_TASKS80NCTSK20&FORECAST_EXTRA;"> + 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> 133:ppn=12:tpp=2TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> 173:ppn=12:tpp=2TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 129:ppn=12:tpp=2TOTAL_TASKS1548NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> 133:ppn=12:tpp=2TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> 173:ppn=12:tpp=2TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=2TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + 134:ppn=12:tpp=2TOTAL_TASKS1608NCTSK12&FORECAST_EXTRA;"> + 174:ppn=12:tpp=2TOTAL_TASKS2088NCTSK12&FORECAST_EXTRA;"> + + 45:ppn=12:tpp=2TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=2TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 135:ppn=12:tpp=2TOTAL_TASKS1620NCTSK12&FORECAST_EXTRA;"> + 175:ppn=12:tpp=2TOTAL_TASKS2100NCTSK12&FORECAST_EXTRA;"> + 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> 79:ppn=20:tpp=2TOTAL_TASKS1580NCTSK20&FORECAST_EXTRA;"> @@ -67,6 +93,12 @@ 52:ppn=12:tpp=2TOTAL_TASKS624NCTSK12&FORECAST_EXTRA;"> 140:ppn=12:tpp=2TOTAL_TASKS1680NCTSK12&FORECAST_EXTRA;"> 148:ppn=12:tpp=2TOTAL_TASKS1776NCTSK12&FORECAST_EXTRA;"> + 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> + 141:ppn=12:tpp=2TOTAL_TASKS1692NCTSK12&FORECAST_EXTRA;"> + 149:ppn=12:tpp=2TOTAL_TASKS1788NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=2TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 142:ppn=12:tpp=2TOTAL_TASKS1704NCTSK12&FORECAST_EXTRA;"> + 150:ppn=12:tpp=2TOTAL_TASKS1800NCTSK12&FORECAST_EXTRA;"> 88:ppn=20:tpp=2TOTAL_TASKS1760NCTSK20&FORECAST_EXTRA;"> @@ -79,6 +111,15 @@ 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + 34:ppn=12:tpp=2TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=2TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 104:ppn=12:tpp=2TOTAL_TASKS1248NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + + 28:ppn=12:tpp=2TOTAL_TASKS336NCTSK12&FORECAST_EXTRA;"> + 33:ppn=12:tpp=2TOTAL_TASKS396NCTSK12&FORECAST_EXTRA;"> 38:ppn=12:tpp=2TOTAL_TASKS456NCTSK12&FORECAST_EXTRA;"> 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> 48:ppn=12:tpp=2TOTAL_TASKS576NCTSK12&FORECAST_EXTRA;"> @@ -86,8 +127,28 @@ 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + 29:ppn=12:tpp=2TOTAL_TASKS348NCTSK12&FORECAST_EXTRA;"> + 34:ppn=12:tpp=2TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=2TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=2TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=2TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + + 30:ppn=12:tpp=2TOTAL_TASKS360NCTSK12&FORECAST_EXTRA;"> + 35:ppn=12:tpp=2TOTAL_TASKS420NCTSK12&FORECAST_EXTRA;"> + 40:ppn=12:tpp=2TOTAL_TASKS480NCTSK12&FORECAST_EXTRA;"> + 45:ppn=12:tpp=2TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 50:ppn=12:tpp=2TOTAL_TASKS600NCTSK12&FORECAST_EXTRA;"> + 55:ppn=12:tpp=2TOTAL_TASKS660NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=2TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=2TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 4:ppn=20:tpp=2TOTAL_TASKS80NCTSK20&FORECAST_EXTRA;"> 7:ppn=20:tpp=2TOTAL_TASKS140NCTSK20&FORECAST_EXTRA;"> + 16:ppn=20:tpp=2TOTAL_TASKS320NCTSK20&FORECAST_EXTRA;"> + 19:ppn=20:tpp=2TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 19:ppn=20:tpp=2TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 28:ppn=20:tpp=2TOTAL_TASKS560NCTSK20&FORECAST_EXTRA;"> @@ -95,9 +156,10 @@ 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> - 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS107:59:00"> + 1:ppn=12:tpp=1TOTAL_TASKS12NCTSK12OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:0024G"> - 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS107:59:00"> - 36:ppn=12:tpp=1TOTAL_TASKS432NCTSK12OMP_THREADS101:15:00"> + 2:ppn=12:tpp=1TOTAL_TASKS24NCTSK12OMP_THREADS107:59:00"> + 2:ppn=12:tpp=1TOTAL_TASKS24NCTSK12OMP_THREADS107:59:00"> + diff --git a/rocoto/sites/xjet_hafsv0p1a.ent b/rocoto/sites/xjet_hafsv0p1a.ent deleted file mode 100644 index 9d27aeca4..000000000 --- a/rocoto/sites/xjet_hafsv0p1a.ent +++ /dev/null @@ -1,90 +0,0 @@ - - - - - --partition=xjet"> - - --partition=xjet"> - - --partition=xjet"> - - --partition=service"> - 24"> - 24"> - - 1G"> - - 3:ppn=4:tpp=6TOTAL_TASKS12NCTSK4OMP_THREADS600:30:00"> - 6:ppn=24:tpp=1TOTAL_TASKS144NCTSK24OMP_THREADS100:30:00"> - 6:ppn=24:tpp=1TOTAL_TASKS144NCTSK24OMP_THREADS103:30:00"> - 1:ppn=6:tpp=1TOTAL_TASKS6NCTSK6OMP_THREADS100:30:008G"> - - 40:ppn=24:tpp=1TOTAL_TASKS960NCTSK24OMP_THREADS101:00:00"> - 10:ppn=24:tpp=1TOTAL_TASKS240NCTSK24OMP_THREADS101:00:00"> - 10:ppn=24:tpp=1TOTAL_TASKS240NCTSK24OMP_THREADS101:00:00"> - - 07:59:00"> - OMP_THREADS2"> - - - - 21:ppn=12:tpp=2TOTAL_TASKS252NCTSK12&FORECAST_EXTRA;"> - 24:ppn=12:tpp=2TOTAL_TASKS288NCTSK12&FORECAST_EXTRA;"> - 30:ppn=12:tpp=2TOTAL_TASKS360NCTSK12&FORECAST_EXTRA;"> - 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> - 112:ppn=12:tpp=2TOTAL_TASKS1344NCTSK12&FORECAST_EXTRA;"> - 118:ppn=12:tpp=2TOTAL_TASKS1416NCTSK12&FORECAST_EXTRA;"> - 168:ppn=12:tpp=2TOTAL_TASKS2016NCTSK12&FORECAST_EXTRA;"> - 171:ppn=12:tpp=2TOTAL_TASKS2052NCTSK12&FORECAST_EXTRA;"> - 177:ppn=12:tpp=2TOTAL_TASKS2124NCTSK12&FORECAST_EXTRA;"> - - 164:ppn=12:tpp=2TOTAL_TASKS1968NCTSK12&FORECAST_EXTRA;"> - - 162:ppn=12:tpp=2TOTAL_TASKS1944NCTSK12&FORECAST_EXTRA;"> - - 66:ppn=20:tpp=2TOTAL_TASKS1320NCTSK20&FORECAST_EXTRA;"> - - - 122:ppn=12:tpp=2TOTAL_TASKS1464NCTSK12&FORECAST_EXTRA;"> - 117:ppn=12:tpp=2TOTAL_TASKS1404NCTSK12&FORECAST_EXTRA;"> - 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> - - 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> - 105:ppn=12:tpp=2TOTAL_TASKS1260NCTSK12&FORECAST_EXTRA;"> - - 16:ppn=12:tpp=2TOTAL_TASKS192NCTSK12&FORECAST_EXTRA;"> - 10:ppn=12:tpp=2TOTAL_TASKS120NCTSK12&FORECAST_EXTRA;"> - - - 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> - 56:ppn=12:tpp=2TOTAL_TASKS672NCTSK12&FORECAST_EXTRA;"> - 62:ppn=12:tpp=2TOTAL_TASKS744NCTSK12&FORECAST_EXTRA;"> - 141:ppn=12:tpp=2TOTAL_TASKS1692NCTSK12&FORECAST_EXTRA;"> - 144:ppn=12:tpp=2TOTAL_TASKS1728NCTSK12&FORECAST_EXTRA;"> - 150:ppn=12:tpp=2TOTAL_TASKS1800NCTSK12&FORECAST_EXTRA;"> - 208:ppn=12:tpp=2TOTAL_TASKS2496NCTSK12&FORECAST_EXTRA;"> - 211:ppn=12:tpp=2TOTAL_TASKS2432NCTSK12&FORECAST_EXTRA;"> - 230:ppn=12:tpp=2TOTAL_TASKS2760NCTSK12&FORECAST_EXTRA;"> - - 90:ppn=20:tpp=2TOTAL_TASKS1800NCTSK20&FORECAST_EXTRA;"> - - 152:ppn=12:tpp=2TOTAL_TASKS1824NCTSK12&FORECAST_EXTRA;"> - 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> - 172:ppn=12:tpp=2TOTAL_TASKS2064NCTSK12&FORECAST_EXTRA;"> - 178:ppn=12:tpp=2TOTAL_TASKS2136NCTSK12&FORECAST_EXTRA;"> - 177:ppn=12:tpp=2TOTAL_TASKS2124NCTSK12&FORECAST_EXTRA;"> - 180:ppn=12:tpp=2TOTAL_TASKS2160NCTSK12&FORECAST_EXTRA;"> - 186:ppn=12:tpp=2TOTAL_TASKS2232NCTSK12&FORECAST_EXTRA;"> - 161:ppn=12:tpp=2TOTAL_TASKS1932NCTSK12&FORECAST_EXTRA;"> - 164:ppn=12:tpp=2TOTAL_TASKS1968NCTSK12&FORECAST_EXTRA;"> - 170:ppn=12:tpp=2TOTAL_TASKS2040NCTSK12&FORECAST_EXTRA;"> - - - 170:ppn=12:tpp=2TOTAL_TASKS2040NCTSK12&FORECAST_EXTRA;"> - - 5:ppn=24:tpp=1TOTAL_TASKS120NCTSK24OMP_THREADS107:59:00"> - 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:00"> - 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:0024G"> - - 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS107:59:00"> - 36:ppn=12:tpp=1TOTAL_TASKS432NCTSK12OMP_THREADS101:15:00"> diff --git a/rocoto/sites/xjet_hafsv0p2a.ent b/rocoto/sites/xjet_hafsv0p2a.ent index bfee78029..0f7e03fc3 100644 --- a/rocoto/sites/xjet_hafsv0p2a.ent +++ b/rocoto/sites/xjet_hafsv0p2a.ent @@ -15,14 +15,15 @@ 1G"> 3:ppn=4:tpp=6TOTAL_TASKS12NCTSK4OMP_THREADS600:30:00"> + 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS100:30:00"> 30:ppn=24:tpp=1TOTAL_TASKS720NCTSK24OMP_THREADS101:30:00"> - 8:ppn=12:tpp=1TOTAL_TASKS96NCTSK12OMP_THREADS103:30:00"> - 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS100:30:00"> - 8:ppn=12:tpp=1TOTAL_TASKS96NCTSK12OMP_THREADS103:30:00"> + 5:ppn=12:tpp=1TOTAL_TASKS60NCTSK12OMP_THREADS103:30:00"> + 5:ppn=24:tpp=1TOTAL_TASKS120NCTSK24OMP_THREADS100:30:00"> + 5:ppn=12:tpp=1TOTAL_TASKS60NCTSK12OMP_THREADS103:30:00"> 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS100:30:00"> - 80:ppn=6:tpp=1TOTAL_TASKS480NCTSK6OMP_THREADS102:00:00"> - 60:ppn=1:tpp=1TOTAL_TASKS60NCTSK1OMP_THREADS102:00:00"> + 50:ppn=12:tpp=2TOTAL_TASKS600NCTSK12OMP_THREADS202:00:00"> + 60:ppn=1:tpp=24TOTAL_TASKS60NCTSK1OMP_THREADS2402:00:00"> 2:ppn=12:tpp=1TOTAL_TASKS24NCTSK12OMP_THREADS102:00:00"> 07:59:00"> @@ -38,23 +39,48 @@ 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 168:ppn=12:tpp=2TOTAL_TASKS2016NCTSK12&FORECAST_EXTRA;"> + 21:ppn=12:tpp=2TOTAL_TASKS252NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + + 22:ppn=12:tpp=2TOTAL_TASKS264NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=2TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 170:ppn=12:tpp=2TOTAL_TASKS2040NCTSK12&FORECAST_EXTRA;"> + 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 100:ppn=20:tpp=2TOTAL_TASKS2000NCTSK20&FORECAST_EXTRA;"> 6:ppn=12:tpp=2TOTAL_TASKS72NCTSK12&FORECAST_EXTRA;"> 4:ppn=20:tpp=2TOTAL_TASKS80NCTSK20&FORECAST_EXTRA;"> + 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> 133:ppn=12:tpp=2TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> 173:ppn=12:tpp=2TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 129:ppn=12:tpp=2TOTAL_TASKS1548NCTSK12&FORECAST_EXTRA;"> + 169:ppn=12:tpp=2TOTAL_TASKS2028NCTSK12&FORECAST_EXTRA;"> + 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> 133:ppn=12:tpp=2TOTAL_TASKS1596NCTSK12&FORECAST_EXTRA;"> 173:ppn=12:tpp=2TOTAL_TASKS2076NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=2TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + 134:ppn=12:tpp=2TOTAL_TASKS1608NCTSK12&FORECAST_EXTRA;"> + 174:ppn=12:tpp=2TOTAL_TASKS2088NCTSK12&FORECAST_EXTRA;"> + + 45:ppn=12:tpp=2TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=2TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 135:ppn=12:tpp=2TOTAL_TASKS1620NCTSK12&FORECAST_EXTRA;"> + 175:ppn=12:tpp=2TOTAL_TASKS2100NCTSK12&FORECAST_EXTRA;"> + 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> 79:ppn=20:tpp=2TOTAL_TASKS1580NCTSK20&FORECAST_EXTRA;"> @@ -67,6 +93,12 @@ 52:ppn=12:tpp=2TOTAL_TASKS624NCTSK12&FORECAST_EXTRA;"> 140:ppn=12:tpp=2TOTAL_TASKS1680NCTSK12&FORECAST_EXTRA;"> 148:ppn=12:tpp=2TOTAL_TASKS1776NCTSK12&FORECAST_EXTRA;"> + 53:ppn=12:tpp=2TOTAL_TASKS636NCTSK12&FORECAST_EXTRA;"> + 141:ppn=12:tpp=2TOTAL_TASKS1692NCTSK12&FORECAST_EXTRA;"> + 149:ppn=12:tpp=2TOTAL_TASKS1788NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=2TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 142:ppn=12:tpp=2TOTAL_TASKS1704NCTSK12&FORECAST_EXTRA;"> + 150:ppn=12:tpp=2TOTAL_TASKS1800NCTSK12&FORECAST_EXTRA;"> 88:ppn=20:tpp=2TOTAL_TASKS1760NCTSK20&FORECAST_EXTRA;"> @@ -79,6 +111,15 @@ 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + 34:ppn=12:tpp=2TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=2TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 104:ppn=12:tpp=2TOTAL_TASKS1248NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + + 28:ppn=12:tpp=2TOTAL_TASKS336NCTSK12&FORECAST_EXTRA;"> + 33:ppn=12:tpp=2TOTAL_TASKS396NCTSK12&FORECAST_EXTRA;"> 38:ppn=12:tpp=2TOTAL_TASKS456NCTSK12&FORECAST_EXTRA;"> 43:ppn=12:tpp=2TOTAL_TASKS516NCTSK12&FORECAST_EXTRA;"> 48:ppn=12:tpp=2TOTAL_TASKS576NCTSK12&FORECAST_EXTRA;"> @@ -86,8 +127,28 @@ 108:ppn=12:tpp=2TOTAL_TASKS1296NCTSK12&FORECAST_EXTRA;"> 113:ppn=12:tpp=2TOTAL_TASKS1356NCTSK12&FORECAST_EXTRA;"> + 29:ppn=12:tpp=2TOTAL_TASKS348NCTSK12&FORECAST_EXTRA;"> + 34:ppn=12:tpp=2TOTAL_TASKS408NCTSK12&FORECAST_EXTRA;"> + 39:ppn=12:tpp=2TOTAL_TASKS468NCTSK12&FORECAST_EXTRA;"> + 44:ppn=12:tpp=2TOTAL_TASKS528NCTSK12&FORECAST_EXTRA;"> + 49:ppn=12:tpp=2TOTAL_TASKS588NCTSK12&FORECAST_EXTRA;"> + 54:ppn=12:tpp=2TOTAL_TASKS648NCTSK12&FORECAST_EXTRA;"> + 109:ppn=12:tpp=2TOTAL_TASKS1308NCTSK12&FORECAST_EXTRA;"> + 114:ppn=12:tpp=2TOTAL_TASKS1368NCTSK12&FORECAST_EXTRA;"> + + 30:ppn=12:tpp=2TOTAL_TASKS360NCTSK12&FORECAST_EXTRA;"> + 35:ppn=12:tpp=2TOTAL_TASKS420NCTSK12&FORECAST_EXTRA;"> + 40:ppn=12:tpp=2TOTAL_TASKS480NCTSK12&FORECAST_EXTRA;"> + 45:ppn=12:tpp=2TOTAL_TASKS540NCTSK12&FORECAST_EXTRA;"> + 50:ppn=12:tpp=2TOTAL_TASKS600NCTSK12&FORECAST_EXTRA;"> + 55:ppn=12:tpp=2TOTAL_TASKS660NCTSK12&FORECAST_EXTRA;"> + 110:ppn=12:tpp=2TOTAL_TASKS1320NCTSK12&FORECAST_EXTRA;"> + 115:ppn=12:tpp=2TOTAL_TASKS1380NCTSK12&FORECAST_EXTRA;"> + 4:ppn=20:tpp=2TOTAL_TASKS80NCTSK20&FORECAST_EXTRA;"> 7:ppn=20:tpp=2TOTAL_TASKS140NCTSK20&FORECAST_EXTRA;"> + 16:ppn=20:tpp=2TOTAL_TASKS320NCTSK20&FORECAST_EXTRA;"> + 19:ppn=20:tpp=2TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 19:ppn=20:tpp=2TOTAL_TASKS380NCTSK20&FORECAST_EXTRA;"> 22:ppn=20:tpp=2TOTAL_TASKS440NCTSK20&FORECAST_EXTRA;"> 28:ppn=20:tpp=2TOTAL_TASKS560NCTSK20&FORECAST_EXTRA;"> @@ -95,9 +156,10 @@ 64:ppn=20:tpp=2TOTAL_TASKS1280NCTSK20&FORECAST_EXTRA;"> 67:ppn=20:tpp=2TOTAL_TASKS1340NCTSK20&FORECAST_EXTRA;"> - 8:ppn=24:tpp=1TOTAL_TASKS192NCTSK24OMP_THREADS107:59:00"> + 1:ppn=12:tpp=1TOTAL_TASKS12NCTSK12OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:00"> 1:ppn=1:tpp=1TOTAL_TASKS1NCTSK1OMP_THREADS107:59:0024G"> - 1:ppn=24:tpp=1TOTAL_TASKS24NCTSK24OMP_THREADS107:59:00"> - 36:ppn=12:tpp=1TOTAL_TASKS432NCTSK12OMP_THREADS101:15:00"> + 2:ppn=12:tpp=1TOTAL_TASKS24NCTSK12OMP_THREADS107:59:00"> + 2:ppn=12:tpp=1TOTAL_TASKS24NCTSK12OMP_THREADS107:59:00"> + diff --git a/scripts/exhafs_analysis.sh b/scripts/exhafs_analysis.sh index 5e085a4c0..16894d99b 100755 --- a/scripts/exhafs_analysis.sh +++ b/scripts/exhafs_analysis.sh @@ -9,6 +9,9 @@ export COMINhafs=${COMgfs:-/gpfs/dell1/nco/ops/com/gfs/para} export DONST=${DONST:-"NO"} export LEVS=${LEVS:-65} export use_bufr_nr=${use_bufr_nr:-no} +export grid_ratio_fv3_regional=${grid_ratio_fv3_regional:-1} +export s_ens_h=${s_ens_h:-150} +export s_ens_v=${s_ens_v:--0.5} export out_prefix=${out_prefix:-$(echo "${STORM}${STORMID}.${YMDH}" | tr '[A-Z]' '[a-z]')} export RUN_GSI_VR=${RUN_GSI_VR:-NO} @@ -374,7 +377,12 @@ B1AVHPM=${B1AVHPM:-${COMIN_OBS}/${OPREFIX}avcspm.tm00.bufr_d${OSUFFIX}} ##HDOB=${HDOB:-${COMIN_OBS}/${OPREFIX}hdob.tm00.bufr_d${OSUFFIX}} # Observational data -$NLN $PREPQC prepbufr +if [ -s $PREPQC ]; then + $NCP -Lp $PREPQC prepbufr +else + touch prepbufr +fi +#$NLN $PREPQC prepbufr ##$NLN $PREPQCPF prepbufr_profl $NLN $SATWND satwndbufr ##$NLN $OSCATBF oscatbufr @@ -435,12 +443,25 @@ $NLN $B1AVHPM avhpmbufr ##[[ $DONST = "YES" ]] && $NLN $NSSTBF nsstbufr if [[ ${use_bufr_nr:-no} = "yes" ]]; then - $NLN ${PREPQC}.nr prepbufr + +if [ -s ${PREPQC}.nr ]; then + $NCP -L ${PREPQC}.nr prepbufr +fi +# $NLN ${PREPQC}.nr prepbufr $NLN ${SAPHIRBF}.nr saphirbufr ##[[ $DONST = "YES" ]] && $NLN /dev/null nsstbufr + fi # HAFS specific observations +# Use updated prepbufr if exists +if [ -s ${WORKhafs}/intercom/obs_proc/hafs.prepbufr ]; then + ${NCP} ${WORKhafs}/intercom/obs_proc/hafs.prepbufr prepbufr +fi +# cat tempdrop.prepbufr with drifting correction into prepbufr +if [ -s ${WORKhafs}/intercom/obs_proc/tempdrop.prepbufr ]; then + cat ${WORKhafs}/intercom/obs_proc/tempdrop.prepbufr >> prepbufr +fi COMINhafs_obs=${COMINhafs_obs:-${COMINhafs}/hafs.$PDY/$cyc/${atmos}} ${NLN} ${COMINhafs_obs}/hafs.t${cyc}z.hdob.tm00.bufr_d hdobbufr ${NLN} ${COMINhafs_obs}/hafs.t${cyc}z.nexrad.tm00.bufr_d l2rwbufr @@ -495,10 +516,12 @@ sed -e "s/_MITER_/${MITER:-2}/g" \ -e "s/_REDUCE_DIAG_/${REDUCE_DIAG:-.false.}/g" \ -e "s/_L_HYB_ENS_/${L_HYB_ENS:-.false.}/g" \ -e "s/_N_ENS_/${N_ENS:-80}/g" \ + -e "s/_S_ENS_H_/${s_ens_h:-150}/g" \ + -e "s/_S_ENS_V_/${s_ens_v:--0.5}/g" \ -e "s/_BETA_S0_/${BETA_S0:-0.2}/g" \ -e "s/_GRID_RATIO_ENS_/${GRID_RATIO_ENS:-1}/g" \ -e "s/_REGIONAL_ENSEMBLE_OPTION_/${REGIONAL_ENSEMBLE_OPTION:-1}/g" \ - -e "s/_GRID_RATIO_FV3_REGIONAL_/${refine_ratio:-4}/g" \ + -e "s/_GRID_RATIO_FV3_REGIONAL_/${grid_ratio_fv3_regional:-1}/g" \ gsiparm.anl.tmp > gsiparm.anl #------------------------------------------------------------------- @@ -545,7 +568,7 @@ if [ $GENDIAG = "YES" ] ; then # Set up lists and variables for various types of diagnostic files. ntype=3 - diagtype[0]="conv conv_gps conv_ps conv_pw conv_q conv_sst conv_t conv_tcp conv_uv conv_spd" + diagtype[0]="conv conv_gps conv_ps conv_pw conv_q conv_sst conv_t conv_tcp conv_uv conv_spd conv_rw" diagtype[1]="pcp_ssmi_dmsp pcp_tmi_trmm" diagtype[2]="sbuv2_n16 sbuv2_n17 sbuv2_n18 sbuv2_n19 gome_metop-a gome_metop-b omi_aura mls30_aura ompsnp_npp ompstc8_npp gome_metop-c" diagtype[3]="hirs2_n14 msu_n14 sndr_g08 sndr_g11 sndr_g12 sndr_g13 sndr_g08_prep sndr_g11_prep sndr_g12_prep sndr_g13_prep sndrd1_g11 sndrd2_g11 sndrd3_g11 sndrd4_g11 sndrd1_g12 sndrd2_g12 sndrd3_g12 sndrd4_g12 sndrd1_g13 sndrd2_g13 sndrd3_g13 sndrd4_g13 sndrd1_g14 sndrd2_g14 sndrd3_g14 sndrd4_g14 sndrd1_g15 sndrd2_g15 sndrd3_g15 sndrd4_g15 hirs3_n15 hirs3_n16 hirs3_n17 amsua_n15 amsua_n16 amsua_n17 amsub_n15 amsub_n16 amsub_n17 hsb_aqua airs_aqua amsua_aqua imgr_g08 imgr_g11 imgr_g12 imgr_g14 imgr_g15 ssmi_f13 ssmi_f15 hirs4_n18 hirs4_metop-a amsua_n18 amsua_metop-a mhs_n18 mhs_metop-a amsre_low_aqua amsre_mid_aqua amsre_hig_aqua ssmis_f16 ssmis_f17 ssmis_f18 ssmis_f19 ssmis_f20 iasi_metop-a hirs4_n19 amsua_n19 mhs_n19 seviri_m08 seviri_m09 seviri_m10 seviri_m11 cris_npp cris-fsr_npp cris-fsr_n20 atms_npp atms_n20 hirs4_metop-b amsua_metop-b mhs_metop-b iasi_metop-b avhrr_metop-b avhrr_n18 avhrr_n19 avhrr_metop-a amsr2_gcom-w1 gmi_gpm saphir_meghat ahi_himawari8 abi_g16 abi_g17 amsua_metop-c mhs_metop-c iasi_metop-c avhrr_metop-c" diff --git a/scripts/exhafs_analysis_vr.sh b/scripts/exhafs_analysis_vr.sh index 31d13085f..a7f986d4e 100755 --- a/scripts/exhafs_analysis_vr.sh +++ b/scripts/exhafs_analysis_vr.sh @@ -26,6 +26,9 @@ export COMgfs=${COMgfs:-/gpfs/dell1/nco/ops/com/gfs/para} export COMINhafs=${COMgfs:-/gpfs/dell1/nco/ops/com/gfs/para} export DONST=${DONST:-"NO"} export use_bufr_nr=${use_bufr_nr:-no} +export grid_ratio_fv3_regional=${grid_ratio_fv3_regional:-1} +export s_ens_h=${s_ens_h:-150} +export s_ens_v=${s_ens_v:--0.5} export out_prefix=${out_prefix:-$(echo "${STORM}${STORMID}.${YMDH}" | tr '[A-Z]' '[a-z]')} export RUN_GSI_VR=${RUN_GSI_VR:-NO} @@ -330,10 +333,12 @@ sed -e "s/_MITER_/${MITER:-2}/g" \ -e "s/_REDUCE_DIAG_/${REDUCE_DIAG:-.false.}/g" \ -e "s/_L_HYB_ENS_/${L_HYB_ENS:-.false.}/g" \ -e "s/_N_ENS_/${N_ENS:-80}/g" \ + -e "s/_S_ENS_H_/${s_ens_h:-150}/g" \ + -e "s/_S_ENS_V_/${s_ens_v:--0.5}/g" \ -e "s/_BETA_S0_/${BETA_S0:-0.2}/g" \ -e "s/_GRID_RATIO_ENS_/${GRID_RATIO_ENS:-1}/g" \ -e "s/_REGIONAL_ENSEMBLE_OPTION_/${REGIONAL_ENSEMBLE_OPTION:-1}/g" \ - -e "s/_GRID_RATIO_FV3_REGIONAL_/${refine_ratio:-4}/g" \ + -e "s/_GRID_RATIO_FV3_REGIONAL_/${grid_ratio_fv3_regional:-1}/g" \ gsiparm.anl.tmp > gsiparm.anl #------------------------------------------------------------------- diff --git a/scripts/exhafs_atm_post.sh b/scripts/exhafs_atm_post.sh index 7dac08be5..416154b95 100755 --- a/scripts/exhafs_atm_post.sh +++ b/scripts/exhafs_atm_post.sh @@ -98,35 +98,70 @@ echo "skip post for forecast hour ${FHR3} valid at ${NEWDATE}" # Otherwise run post for this forecast hour else +if [ ${write_dopost:-.false.} = .true. ]; then + +# Wait for model output +n=1 +while [ $n -le 600 ] +do + if [ ! -s ${INPdir}/logf${FHR3} ] || [ ! -s ${INPdir}/HURPRS.GrbF${FHR2} ]; then + echo "${INPdir}/logf${FHR3} not ready, sleep 60" + sleep 60s + else + echo "${INPdir}/logf${FHR3}, ${INPdir}/HURPRS.GrbF${FHR2} ready, continue" + sleep 3s + break + fi + if [ $n -ge 600 ]; then + echo "ERROR: waited too many times: $n. exitting" + exit 1 + fi + n=$(( n+1 )) +done + +else + # Wait for model output n=1 while [ $n -le 600 ] do - if [ ! -s ${INPdir}/logf${FHR3} ] || [ ! -s ${INPdir}/dynf${FHR3}.nc ] || [ ! -s ${INPdir}/phyf${FHR3}.nc ]; then + if [ ! -s ${INPdir}/logf${FHR3} ] || [ ! -s ${INPdir}/atmf${FHR3}.nc ] || [ ! -s ${INPdir}/sfcf${FHR3}.nc ]; then echo "${INPdir}/logf${FHR3} not ready, sleep 60" sleep 60s else - echo "${INPdir}/logf${FHR3}, ${INPdir}/dynf${FHR3}.nc ${INPdir}/phyf${FHR3}.nc ready, do post" + echo "${INPdir}/logf${FHR3}, ${INPdir}/atmf${FHR3}.nc ${INPdir}/sfcf${FHR3}.nc ready, do post" sleep 3s break fi + if [ $n -ge 600 ]; then + echo "ERROR: waited too many times: $n. exitting" + exit 1 + fi n=$(( n+1 )) done +fi #if [ ${write_dopost:-.false.} = .true. ] + # Create the post working dir for the time level DATA_POST=${DATA}/post_${NEWDATE} rm -rf ${DATA_POST} mkdir -p ${DATA_POST} cd ${DATA_POST} +if [ ${write_dopost:-.false.} = .true. ]; then + +cp -p ${INPdir}/HURPRS.GrbF${FHR2} ${synop_grb2post} + +else + # Preparte itag namelist input file cat>itag< outpost_${NEWDATE} -mv HURPRS.GrbF${FHR2} ${synop_grb2post} +mv HURPRS.GrbF${FHR2} ${synop_grb2post} + +fi #if [ ${write_dopost:-.false.} = .true. ] if [ "$output_grid" = rotated_latlon ]; then # For rotated_latlon output grid # Convert from rotate lat-lon grib2 to regular lat-lon grib2 #${WGRIB2} ${synop_grb2post} -set_bitmap 1 -set_grib_type c3 -new_grid_winds grid -new_grid_vectors "UGRD:VGRD" -new_grid_interpolation neighbor -new_grid ${synop_gridspecs} ${synop_grb2file} -# Parallelize this section to speed up wgrib2 +# Parallelize this section to speed up wgrib2 #opts='-set_bitmap 1 -set_grib_type c3 -new_grid_winds grid -new_grid_vectors "UGRD:VGRD" -new_grid_interpolation neighbor' opts='-set_grib_type c2 -new_grid_winds grid -new_grid_vectors "UGRD:VGRD" -new_grid_interpolation neighbor' rm -f cmdfile @@ -183,8 +220,8 @@ mv ${synop_grb2post} ${synop_grb2file} else - echo "ERROR: output grid: ${output_grid} not supported exitting" - exit 1 +echo "ERROR: output grid: ${output_grid} not supported exitting" +exit 1 fi diff --git a/scripts/exhafs_emcgraphics.sh b/scripts/exhafs_emcgraphics.sh index 44485de1a..f899f0826 120000 --- a/scripts/exhafs_emcgraphics.sh +++ b/scripts/exhafs_emcgraphics.sh @@ -1 +1 @@ -exhafs_emcgraphics2.sh \ No newline at end of file +exhafs_emcgraphics1.sh \ No newline at end of file diff --git a/scripts/exhafs_emcgraphics1.sh b/scripts/exhafs_emcgraphics1.sh index 56e6d6583..e2eff78e8 100755 --- a/scripts/exhafs_emcgraphics1.sh +++ b/scripts/exhafs_emcgraphics1.sh @@ -10,6 +10,7 @@ storm=${STORM,,} STORMID=${STORMID:-00L} stormid=${STORMID,,} +export NOUTHRS=${NOUTHRS:-3} export run_ocean=${run_ocean:-no} stormModel=${stormModel:-HAFS} diff --git a/scripts/exhafs_emcgraphics2.sh b/scripts/exhafs_emcgraphics2.sh index 27fcfcaed..beeae908e 100755 --- a/scripts/exhafs_emcgraphics2.sh +++ b/scripts/exhafs_emcgraphics2.sh @@ -10,6 +10,7 @@ storm=${STORM,,} STORMID=${STORMID:-00L} stormid=${STORMID,,} +export NOUTHRS=${NOUTHRS:-3} export run_ocean=${run_ocean:-no} stormModel=${stormModel:-HAFS} diff --git a/scripts/exhafs_enkf.sh b/scripts/exhafs_enkf.sh index e8947aa85..4ee7a7f71 100755 --- a/scripts/exhafs_enkf.sh +++ b/scripts/exhafs_enkf.sh @@ -50,6 +50,8 @@ fi export PARMgsi=${PARMgsi:-${PARMhafs}/analysis/gsi} export ldo_enscalc_option=${ldo_enscalc_option:-1} export nens=${ENS_SIZE:-40} +export corrlength=${corrlength:-500} +export lnsigcutoff=${lnsigcutoff:-1.3} # Diagnostic files options netcdf_diag=${netcdf_diag:-".true."} @@ -85,7 +87,7 @@ DATA=${DATA:-${WORKhafs}/enkf_mean} mkdir -p ${DATA} cd ${DATA} -if [ $ldo_enscalc_option -ne 2 ]; then # enkf_mean or enkf_update +if [ $ldo_enscalc_option -eq 1 ] || [ $ldo_enscalc_option -eq 0 ]; then # enkf_mean or enkf_update # prepare ensemble mean files memstr="mem001" ensmean="ensmean" @@ -101,6 +103,10 @@ if [ $ldo_enscalc_option -ne 2 ]; then # enkf_mean or enkf_update ncks -A -v ${tracer_list} fv3sar_tile1_${ensmean}_tracer fv3sar_tile1_${ensmean}_dynvars mv fv3sar_tile1_${ensmean}_dynvars fv3sar_tile1_${ensmean}_dynvartracer rm -f fv3sar_tile1_${ensmean}_tracer + # For the enkf_update step, copy the ensemble mean generated by the enkf_mean step + if [ $ldo_enscalc_option -eq 0 ]; then # enkf_update + ${NCP} ${RESTARTens_anl}/ensmean/${PDY}.${cyc}0000.fv_dynvartracer fv3sar_tile1_ensmean_dynvartracer + fi cp ${RESTARTens_inp}/${memstr}/${PDY}.${cyc}0000.fv_core.res.nc fv3sar_tile1_akbk.nc cp ${RESTARTens_inp}/${memstr}/${PDY}.${cyc}0000.sfc_data.nc fv3_sfcdata cp ${RESTARTens_inp}/${memstr}/grid_spec.nc fv3sar_tile1_grid_spec.nc @@ -229,6 +235,8 @@ ${NLN} ${COMgfs}/gdas.$PDYprior/${hhprior}/${atmos}gdas.t${hhprior}z.abias_pc ${NCP} ${PARMgsi}/enkf.nml.tmp ./ sed -e "s/_datestring_/${CDATE}/g" \ + -e "s/_corrlength_/${corrlength:-500}/g" \ + -e "s/_lnsigcutoff_/${lnsigcutoff:-1.3}/g" \ -e "s/_nlons_/$((${npx_ens:-$npx}-1))/g" \ -e "s/_nlats_/$((${npy_ens:-$npy}-1))/g" \ -e "s/_nlevs_/${npz_ens:-$npz}/g" \ diff --git a/scripts/exhafs_enkf_hx.sh b/scripts/exhafs_enkf_hx.sh index 2b7b3fd63..409caee64 100755 --- a/scripts/exhafs_enkf_hx.sh +++ b/scripts/exhafs_enkf_hx.sh @@ -10,6 +10,9 @@ export COMgfs=${COMgfs:-/gpfs/dell1/nco/ops/com/gfs/para} export COMINhafs=${COMgfs:-/gpfs/dell1/nco/ops/com/gfs/para} export DONST=${DONST:-"NO"} export use_bufr_nr=${use_bufr_nr:-no} +export grid_ratio_fv3_regional=${grid_ratio_fv3_regional:-1} +export s_ens_h=${s_ens_h:-150} +export s_ens_v=${s_ens_v:--0.5} export out_prefix=${out_prefix:-$(echo "${STORM}${STORMID}.${YMDH}" | tr '[A-Z]' '[a-z]')} if [ ${ENSDA} = YES ]; then @@ -343,7 +346,12 @@ B1AVHPM=${B1AVHPM:-${COMIN_OBS}/${OPREFIX}avcspm.tm00.bufr_d${OSUFFIX}} ##HDOB=${HDOB:-${COMIN_OBS}/${OPREFIX}hdob.tm00.bufr_d${OSUFFIX}} # Observational data -$NLN $PREPQC prepbufr +if [ -s $PREPQC ]; then + $NCP -Lp $PREPQC prepbufr +else + touch prepbufr +fi +#$NLN $PREPQC prepbufr ##$NLN $PREPQCPF prepbufr_profl $NLN $SATWND satwndbufr ##$NLN $OSCATBF oscatbufr @@ -404,12 +412,25 @@ $NLN $B1AVHPM avhpmbufr ##[[ $DONST = "YES" ]] && $NLN $NSSTBF nsstbufr if [[ ${use_bufr_nr:-no} = "yes" ]]; then - $NLN ${PREPQC}.nr prepbufr + +if [ -s ${PREPQC}.nr ]; then + $NCP -L ${PREPQC}.nr prepbufr +fi +# $NLN ${PREPQC}.nr prepbufr $NLN ${SAPHIRBF}.nr saphirbufr ##[[ $DONST = "YES" ]] && $NLN /dev/null nsstbufr + fi # HAFS specific observations +# Use updated prepbufr if exists +if [ -s ${WORKhafs}/intercom/obs_proc/hafs.prepbufr ]; then + ${NCP} ${WORKhafs}/intercom/obs_proc/hafs.prepbufr prepbufr +fi +# cat tempdrop.prepbufr with drifting correction into prepbufr +if [ -s ${WORKhafs}/intercom/obs_proc/tempdrop.prepbufr ]; then + cat ${WORKhafs}/intercom/obs_proc/tempdrop.prepbufr >> prepbufr +fi COMINhafs_obs=${COMINhafs_obs:-${COMINhafs}/hafs.$PDY/$cyc/${atmos}} ${NLN} ${COMINhafs_obs}/hafs.t${cyc}z.hdob.tm00.bufr_d hdobbufr ${NLN} ${COMINhafs_obs}/hafs.t${cyc}z.nexrad.tm00.bufr_d l2rwbufr @@ -464,10 +485,12 @@ sed -e "s/_MITER_/${MITER:-2}/g" \ -e "s/_REDUCE_DIAG_/${REDUCE_DIAG:-.false.}/g" \ -e "s/_L_HYB_ENS_/${L_HYB_ENS:-.false.}/g" \ -e "s/_N_ENS_/${N_ENS:-80}/g" \ + -e "s/_S_ENS_H_/${s_ens_h:-150}/g" \ + -e "s/_S_ENS_V_/${s_ens_v:--0.5}/g" \ -e "s/_BETA_S0_/${BETA_S0:-0.2}/g" \ -e "s/_GRID_RATIO_ENS_/${GRID_RATIO_ENS:-1}/g" \ -e "s/_REGIONAL_ENSEMBLE_OPTION_/${REGIONAL_ENSEMBLE_OPTION:-1}/g" \ - -e "s/_GRID_RATIO_FV3_REGIONAL_/${refine_ratio:-4}/g" \ + -e "s/_GRID_RATIO_FV3_REGIONAL_/${grid_ratio_fv3_regional:-1}/g" \ gsiparm.anl.tmp > gsiparm.anl #------------------------------------------------------------------- @@ -514,7 +537,7 @@ if [ $GENDIAG = "YES" ] ; then # Set up lists and variables for various types of diagnostic files. ntype=3 - diagtype[0]="conv conv_gps conv_ps conv_pw conv_q conv_sst conv_t conv_tcp conv_uv conv_spd" + diagtype[0]="conv conv_gps conv_ps conv_pw conv_q conv_sst conv_t conv_tcp conv_uv conv_spd conv_rw" diagtype[1]="pcp_ssmi_dmsp pcp_tmi_trmm" diagtype[2]="sbuv2_n16 sbuv2_n17 sbuv2_n18 sbuv2_n19 gome_metop-a gome_metop-b omi_aura mls30_aura ompsnp_npp ompstc8_npp gome_metop-c" diagtype[3]="hirs2_n14 msu_n14 sndr_g08 sndr_g11 sndr_g12 sndr_g13 sndr_g08_prep sndr_g11_prep sndr_g12_prep sndr_g13_prep sndrd1_g11 sndrd2_g11 sndrd3_g11 sndrd4_g11 sndrd1_g12 sndrd2_g12 sndrd3_g12 sndrd4_g12 sndrd1_g13 sndrd2_g13 sndrd3_g13 sndrd4_g13 sndrd1_g14 sndrd2_g14 sndrd3_g14 sndrd4_g14 sndrd1_g15 sndrd2_g15 sndrd3_g15 sndrd4_g15 hirs3_n15 hirs3_n16 hirs3_n17 amsua_n15 amsua_n16 amsua_n17 amsub_n15 amsub_n16 amsub_n17 hsb_aqua airs_aqua amsua_aqua imgr_g08 imgr_g11 imgr_g12 imgr_g14 imgr_g15 ssmi_f13 ssmi_f15 hirs4_n18 hirs4_metop-a amsua_n18 amsua_metop-a mhs_n18 mhs_metop-a amsre_low_aqua amsre_mid_aqua amsre_hig_aqua ssmis_f16 ssmis_f17 ssmis_f18 ssmis_f19 ssmis_f20 iasi_metop-a hirs4_n19 amsua_n19 mhs_n19 seviri_m08 seviri_m09 seviri_m10 seviri_m11 cris_npp cris-fsr_npp cris-fsr_n20 atms_npp atms_n20 hirs4_metop-b amsua_metop-b mhs_metop-b iasi_metop-b avhrr_metop-b avhrr_n18 avhrr_n19 avhrr_metop-a amsr2_gcom-w1 gmi_gpm saphir_meghat ahi_himawari8 abi_g16 abi_g17 amsua_metop-c mhs_metop-c iasi_metop-c avhrr_metop-c" diff --git a/scripts/exhafs_forecast.sh b/scripts/exhafs_forecast.sh index 95d42e6eb..cdfb7227c 100755 --- a/scripts/exhafs_forecast.sh +++ b/scripts/exhafs_forecast.sh @@ -50,6 +50,8 @@ if [ "${ENSDA}" != YES ]; then quilting=${quilting:-.true.} write_groups=${write_groups:-3} write_tasks_per_group=${write_tasks_per_group:-72} + write_dopost=${write_dopost:-.false.} + output_history=${output_history:-.true.} glob_k_split=${glob_k_split:-1} glob_n_split=${glob_n_split:-7} glob_layoutx=${glob_layoutx:-12} @@ -85,6 +87,8 @@ else quilting=${quilting_ens:-.true.} write_groups=${write_groups_ens:-3} write_tasks_per_group=${write_tasks_per_group_ens:-72} + write_dopost=${write_dopost_ens:-.false.} + output_history=${output_history_ens:-.true.} glob_k_split=${glob_k_split_ens:-1} glob_n_split=${glob_n_split_ens:-7} glob_layoutx=${glob_layoutx_ens:-12} @@ -315,7 +319,7 @@ for file in $(ls ${FIXam}/fix_co2_proj/global_co2historicaldata*); do done # If needed, copy fix files needed by the hwrf ccpp physics suite -if [[ ${ccpp_suite_regional} == *"hwrf"* ]] || [[ ${ccpp_suite_glob} == *"hwrf"* ]] || [[ ${ccpp_suite_nest} == *"hwrf"* ]]; then +if [[ ${ccpp_suite_regional} == *"hwrf"* ]] || [[ ${ccpp_suite_glob} == *"hwrf"* ]] || [[ ${ccpp_suite_nest} == *"hwrf"* ]]; then ${NCP} ${PARMhafs}/forecast/hwrf_physics_fix/* . fi @@ -363,8 +367,10 @@ glob_pes=$(( ${glob_layoutx} * ${glob_layouty} * 6 )) nest_pes=$(( ${layoutx} * ${layouty} )) ioffset=$(( (istart_nest-1)/2 + 1)) joffset=$(( (jstart_nest-1)/2 + 1)) +blocksize=$(( ${glob_npy}/${glob_layouty} )) sed -e "s/_fhmax_/${NHRS}/g" \ + -e "s/_blocksize_/${blocksize:-64}/g" \ -e "s/_ccpp_suite_/${ccpp_suite_glob}/g" \ -e "s/_deflate_level_/${deflate_level:--1}/g" \ -e "s/_layoutx_/${glob_layoutx}/g" \ @@ -388,6 +394,8 @@ sed -e "s/_fhmax_/${NHRS}/g" \ -e "s/_glob_pes_/${glob_pes}/g" \ -e "s/_nest_pes_/${nest_pes}/g" \ -e "s/_levp_/${LEVS}/g" \ + -e "s/_fhswr_/${fhswr:-1800.}/g" \ + -e "s/_fhlwr_/${fhlwr:-1800.}/g" \ -e "s/_nstf_n1_/${nstf_n1:-2}/g" \ -e "s/_nstf_n2_/${nstf_n2:-0}/g" \ -e "s/_nstf_n3_/${nstf_n3:-0}/g" \ @@ -397,7 +405,9 @@ sed -e "s/_fhmax_/${NHRS}/g" \ -e "s/_merge_import_/${merge_import:-.false.}/g" \ input.nml.tmp > input.nml +blocksize=$(( ${npy}/${layouty} )) sed -e "s/_fhmax_/${NHRS}/g" \ + -e "s/_blocksize_/${blocksize:-64}/g" \ -e "s/_ccpp_suite_/${ccpp_suite_nest}/g" \ -e "s/_deflate_level_/${deflate_level:--1}/g" \ -e "s/_layoutx_/${layoutx}/g" \ @@ -421,6 +431,8 @@ sed -e "s/_fhmax_/${NHRS}/g" \ -e "s/_glob_pes_/${glob_pes}/g" \ -e "s/_nest_pes_/${nest_pes}/g" \ -e "s/_levp_/${LEVS}/g" \ + -e "s/_fhswr_/${fhswr:-1800.}/g" \ + -e "s/_fhlwr_/${fhlwr:-1800.}/g" \ -e "s/_nstf_n1_/${nstf_n1:-2}/g" \ -e "s/_nstf_n2_/${nstf_n2:-0}/g" \ -e "s/_nstf_n3_/${nstf_n3:-0}/g" \ @@ -491,7 +503,9 @@ else exit 9 fi +blocksize=$(( ${npy}/${layouty} )) sed -e "s/_fhmax_/${NHRS}/g" \ + -e "s/_blocksize_/${blocksize:-64}/g" \ -e "s/_ccpp_suite_/${ccpp_suite_regional}/g" \ -e "s/_deflate_level_/${deflate_level:--1}/g" \ -e "s/_layoutx_/${layoutx}/g" \ @@ -512,6 +526,8 @@ sed -e "s/_fhmax_/${NHRS}/g" \ -e "s/_bc_update_interval_/${NBDYHRS}/g" \ -e "s/_nrows_blend_/${halo_blend}/g" \ -e "s/_levp_/${LEVS}/g" \ + -e "s/_fhswr_/${fhswr:-1800.}/g" \ + -e "s/_fhlwr_/${fhlwr:-1800.}/g" \ -e "s/_nstf_n1_/${nstf_n1:-2}/g" \ -e "s/_nstf_n2_/${nstf_n2:-0}/g" \ -e "s/_nstf_n3_/${nstf_n3:-0}/g" \ @@ -523,11 +539,11 @@ sed -e "s/_fhmax_/${NHRS}/g" \ if [ ${run_ocean} = yes ]; then # Copy hycom related files - ${NCP} ${WORKhafs}/intercom/hycominit/hycom_settings hycom_settings + ${NCP} ${WORKhafs}/intercom/hycominit/hycom_settings hycom_settings hycom_basin=$(grep RUNmodIDout ./hycom_settings | cut -c20-) # copy IC/BC - ${NCP} ${WORKhafs}/intercom/hycominit/restart_out.a restart_in.a - ${NCP} ${WORKhafs}/intercom/hycominit/restart_out.b restart_in.b + ${NCP} ${WORKhafs}/intercom/hycominit/restart_out.a restart_in.a + ${NCP} ${WORKhafs}/intercom/hycominit/restart_out.b restart_in.b # copy forcing ${NCP} ${WORKhafs}/intercom/hycominit/forcing* . ${NLN} forcing.presur.a forcing.mslprs.a @@ -554,7 +570,7 @@ if [ ${run_ocean} = yes ]; then ${NCP} ${FIXhycom}/hafs_${hycom_basin}.basin.relax.rmu.a relax.rmu.a ${NCP} ${FIXhycom}/hafs_${hycom_basin}.basin.relax.rmu.b relax.rmu.b # copy parms - ${NCP} ${PARMhycom}/hafs_${hycom_basin}.basin.fcst.blkdat.input blkdat.input + ${NCP} ${PARMhycom}/hafs_${hycom_basin}.basin.fcst.blkdat.input blkdat.input ${NCP} ${PARMhycom}/hafs_${hycom_basin}.basin.ports.input ports.input ${NCP} ${PARMhycom}/hafs_${hycom_basin}.basin.patch.input.${ocean_tasks} patch.input # create hycom limits @@ -605,6 +621,8 @@ sed -e "s/NTASKS/${TOTAL_TASKS}/g" -e "s/YR/$yr/g" \ -e "s/_quilting_/${quilting}/g" \ -e "s/_write_groups_/${write_groups}/g" \ -e "s/_write_tasks_per_group_/${write_tasks_per_group}/g" \ + -e "s/_write_dopost_/${write_dopost:-.false.}/g" \ + -e "s/_output_history_/${output_history:-.true.}/g" \ -e "s/_app_domain_/${app_domain}/g" \ -e "s/_OUTPUT_GRID_/$output_grid/g" \ -e "s/_CEN_LON_/$output_grid_cen_lon/g" \ @@ -618,8 +636,16 @@ sed -e "s/NTASKS/${TOTAL_TASKS}/g" -e "s/YR/$yr/g" \ -e "s/_cpl_/${cplflx:-.false.}/g" \ model_configure.tmp > model_configure +# Copy fix files needed by inline_post +if [ ${write_dopost:-.false.} = .true. ]; then + ${NCP} ${PARMhafs}/post/itag ./itag + ${NCP} ${PARMhafs}/post/postxconfig-NT-hafs.txt ./postxconfig-NT.txt + ${NCP} ${PARMhafs}/post/postxconfig-NT-hafs.txt ./postxconfig-NT_FH00.txt + ${NCP} ${PARMhafs}/post/params_grib2_tbl_new ./params_grib2_tbl_new +fi + # Copy the fd_nems.yaml file -${NCP} ${HOMEhafs}/sorc/hafs_forecast.fd/CMEPS-interface/CMEPS/mediator/fd_nems.yaml ./ +${NCP} ${HOMEhafs}/sorc/hafs_forecast.fd/tests/parm/fd_nems.yaml ./ # Copy the executable and run the forecast FORECASTEXEC=${FORECASTEXEC:-${EXEChafs}/hafs_forecast.x} diff --git a/scripts/exhafs_obs_proc.sh b/scripts/exhafs_obs_proc.sh new file mode 100755 index 000000000..816d6f267 --- /dev/null +++ b/scripts/exhafs_obs_proc.sh @@ -0,0 +1,137 @@ +#!/bin/sh + +set -xe + +export PARMgsi=${PARMgsi:-${PARMhafs}/analysis/gsi} +export COMgfs=${COMgfs:-/gpfs/dell1/nco/ops/com/gfs/para} +export COMINhafs=${COMgfs:-/gpfs/dell1/nco/ops/com/gfs/para} +export use_bufr_nr=${use_bufr_nr:-no} +export out_prefix=${out_prefix:-$(echo "${STORM}${STORMID}.${YMDH}" | tr '[A-Z]' '[a-z]')} + +export RUN_GSI=${RUN_GSI:-NO} + +TOTAL_TASKS=${TOTAL_TASKS:-2016} +NCTSK=${NCTSK:-12} +NCNODE=${NCNODE:-24} +OMP_NUM_THREADS=${OMP_NUM_THREADS:-2} +APRUNC=${APRUNC:-"aprun -b -j1 -n${TOTAL_TASKS} -N${NCTSK} -d${OMP_NUM_THREADS} -cc depth"} + +# Utilities +NDATE=${NDATE:-ndate} +export NCP=${NCP:-"/bin/cp"} +export NMV=${NMV:-"/bin/mv"} +export NLN=${NLN:-"/bin/ln -sf"} +export CHGRP_CMD=${CHGRP_CMD:-"chgrp ${group_name:-rstprod}"} +export MPISERIAL=${MPISERIAL:-${EXEChafs}/hafs_mpiserial.x} +export COMPRESS=${COMPRESS:-gzip} +export UNCOMPRESS=${UNCOMPRESS:-gunzip} +export TAR=${TAR:-tar} + +if [ $GFSVER = PROD2021 ]; then + export atmos="atmos/" +elif [ $GFSVER = PROD2019 ]; then + export atmos="" +else + export atmos="" +fi + +yr=`echo $CDATE | cut -c1-4` +mn=`echo $CDATE | cut -c5-6` +dy=`echo $CDATE | cut -c7-8` + + +if [ ${RUN_GSI} = "NO" ]; then + echo "RUN_GSI: $RUN_GSI" + echo "Do nothing. Exiting" + exit +fi + +COMhafs=${COMhafs:-/gpfs/hps3/ptmp/${USER}/${SUBEXPT}/com/${CDATE}/${STORMID}} +WORKhafs=${WORKhafs:-/gpfs/hps3/ptmp/${USER}/${SUBEXPT}/${CDATE}/${STORMID}} +intercom=${intercom:-${WORKhafs}/intercom/obs_proc} +SENDCOM=${SENDCOM:-YES} + +DATA=${DATA:-${WORKhafs}/obs_proc} + +mkdir -p ${DATA} + +cd ${DATA} + +# Update the original prepbufr data +# To enable assimilating METAR observations +mkdir -p prepbufr +cd prepbufr + +# Copy gfs prepbufr file +COMIN_OBS=${COMIN_OBS:-${COMgfs}/gfs.$PDY/$cyc/${atmos}} +if [[ ${use_bufr_nr:-no} = "yes" ]]; then + PREPQC=${COMIN_OBS}/gfs.t${cyc}z.prepbufr.nr +else + PREPQC=${COMIN_OBS}/gfs.t${cyc}z.prepbufr +fi + +${NCP} -L ${PREPQC} ./prepbufr.orig +${NCP} -L ${PREPQC} ./prepbufr.qm_typ + +${NLN} -sf ./prepbufr.orig ./fort.21 +${NLN} -sf ./prepbufr.qm_typ ./fort.51 + +# Link and run the executable +${NCP} -p ${EXEChafs}/hafs_change_prepbufr_qm_typ.x ./hafs_change_prepbufr_qm_typ.x +${APRUNS} ./hafs_change_prepbufr_qm_typ.x > ./hafs_change_prepbufr_qm_typ.out 2>&1 + +# Deliver to com +if [ $SENDCOM = YES ]; then + mkdir -p ${COMhafs} + ${NCP} -p ./prepbufr.qm_typ ${COMhafs}/${out_prefix}.hafs.prepbufr +fi + +# Deliver to intercom +mkdir -p ${intercom} +${NCP} -p ./prepbufr.qm_typ ${intercom}/hafs.prepbufr + +# Deal with tempdrop drifting +cd ${DATA} +mkdir -p tempdrop +cd tempdrop + +COMINhafs_OBS=${COMINhafs_OBS:-${COMINhafs}/hafs.$PDY/$cyc/${atmos}} +dropsondetarfile=${COMINhafs_OBS}/hafs.t${cyc}z.dropsonde.tar +# Proceed if dropsondetarfile exists and non-empty +if [ -s ${dropsondetarfile} ]; then + ${TAR} -xvf ${dropsondetarfile} + #Genereate the tempdrop.filelist + /bin/ls -1 ./*.mod | sed -e 's/^/"/g' -e 's/$/"/g' > ./tempdrop.filelist +fi + +# Proceed if tempdrop.filelist non-empty +if [ -s ./tempdrop.filelist ]; then + +# Copy the needed files +${NCP} ${PARMgsi}/prepobs_prep.bufrtable ./ +${NCP} ${PARMgsi}/bufrinfo.json.tempdrop ./bufrinfo.json +${NCP} ${PARMgsi}/obs-preproc.input.tempdrop.tmp ./obs-preproc.input.tmp + +# Prepare the namelist +analdate="${yr}-${mn}-${dy}_${cyc}:00:00" +sed -e "s/_analdate_/${analdate}/g" \ + obs-preproc.input.tmp > obs-preproc.input + +# Link and run the executable +OBSPREPROCEXEC=${OBSPREPROCEXEC:-${EXEChafs}/hafs_obs_preproc.x} +${NCP} -p ${OBSPREPROCEXEC} ./hafs_obs_preproc.x +${APRUNS} ./hafs_obs_preproc.x 1> ./hafs_obs_preproc.out 2>&1 + +# Deliver to com +if [ $SENDCOM = YES ]; then + mkdir -p ${COMhafs} + ${NCP} -p ./tempdrop.prepbufr ${COMhafs}/${out_prefix}.tempdrop.prepbufr +fi + +# Deliver to intercom +mkdir -p ${intercom} +${NCP} -p ./tempdrop.prepbufr ${intercom}/tempdrop.prepbufr + +fi # end if [ -s ./tempdrop.filelist ]; then + +exit diff --git a/sorc/build_forecast.sh b/sorc/build_forecast.sh index eba30d59a..ebb5ca40e 100755 --- a/sorc/build_forecast.sh +++ b/sorc/build_forecast.sh @@ -9,6 +9,6 @@ if [ $target = jet ]; then target=jet.intel ; fi cd hafs_forecast.fd/tests -./compile.sh "$target" "APP=HAFS CCPP=Y STATIC=Y SUITES=HAFS_v0_gfdlmp_tedmf_nonsst,HAFS_v0_gfdlmp_tedmf,HAFS_v0_gfdlmp_nocpnsst,HAFS_v0_gfdlmp_nonsst,HAFS_v0_gfdlmp_nocp,HAFS_v0_gfdlmp,HAFS_v0_hwrf_thompson,HAFS_v0_hwrf 32BIT=Y" 32bit YES NO +./compile.sh "$target" "-DAPP=HAFS -DCCPP_SUITES=HAFS_v0_gfdlmp_tedmf_nonsst,HAFS_v0_gfdlmp_tedmf,HAFS_v0_gfdlmp_nocpnsst,HAFS_v0_gfdlmp_nonsst,HAFS_v0_gfdlmp_nocp,HAFS_v0_gfdlmp,HAFS_v0_hwrf_thompson,HAFS_v0_hwrf -D32BIT=ON" 32bit YES NO exit diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index 7d18241f1..e5cb32e9f 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit 7d18241f14b64ee2d1f6f9e9fe89e49839281b00 +Subproject commit e5cb32e9ff65c4b434879733aef79ab72157b3d7 diff --git a/sorc/hafs_graphics.fd/emc_graphics b/sorc/hafs_graphics.fd/emc_graphics index f08133335..92b6b535d 160000 --- a/sorc/hafs_graphics.fd/emc_graphics +++ b/sorc/hafs_graphics.fd/emc_graphics @@ -1 +1 @@ -Subproject commit f081333350ffa0d3e34c4429b82862bf6d5daa98 +Subproject commit 92b6b535d728d7ea97ec5e39659515f2fe6e88d0 diff --git a/sorc/hafs_graphics.fd/hrd_gplot b/sorc/hafs_graphics.fd/hrd_gplot index d7f254614..48d6a7045 160000 --- a/sorc/hafs_graphics.fd/hrd_gplot +++ b/sorc/hafs_graphics.fd/hrd_gplot @@ -1 +1 @@ -Subproject commit d7f254614adfc0b1194ed63e09eb5b76abb08fcb +Subproject commit 48d6a704503a9ad8ba059a69991b50994eae3f79 diff --git a/sorc/hafs_gsi.fd b/sorc/hafs_gsi.fd index 68b46a342..2b182d5ad 160000 --- a/sorc/hafs_gsi.fd +++ b/sorc/hafs_gsi.fd @@ -1 +1 @@ -Subproject commit 68b46a342370a473eb6701e9d703657901f0e672 +Subproject commit 2b182d5ad603a95b067cafd947772887f7e4375b diff --git a/sorc/hafs_post.fd b/sorc/hafs_post.fd index ce67fb9f5..3c9ff6514 160000 --- a/sorc/hafs_post.fd +++ b/sorc/hafs_post.fd @@ -1 +1 @@ -Subproject commit ce67fb9f5dc738e9ddd118a626b45419f359a70f +Subproject commit 3c9ff6514648b224a3758a9e17f4ab59c2e56de5 diff --git a/sorc/hafs_tools.fd/sorc/build_hafs_utils.sh b/sorc/hafs_tools.fd/sorc/build_hafs_utils.sh index cfd36c8de..0b10002ea 100755 --- a/sorc/hafs_tools.fd/sorc/build_hafs_utils.sh +++ b/sorc/hafs_tools.fd/sorc/build_hafs_utils.sh @@ -42,6 +42,7 @@ ## Cleaning hafs_tools.fd: Biju Thomas 2021-03-23 ## * Removing sources that are not needed or no longer used ## * Merging internal libraries into a single folder with a single driver script +## * Ported hafs_change_prepbufr under hafs_tools.fd from HWRF (2021-06-07) ################################################################################# set -x -e @@ -135,6 +136,50 @@ _hafsutils_obs_preproc (){ #---- +# FUNCTION: + +# _hafsutils_change_prepbufr.sh + +# DESCRIPTION: + +# This function compiles and install the HAFS utility change_prepbufr +# application. + +# NOTE: + +# This function should never be called directly by the user and is for +# internal use only within this script. + +_hafsutils_change_prepbufr (){ + + # Remove the build dir if it exists from previous build + if [ -d "${HAFS_UTILS_SORC}/build" ]; then + rm -rf ${HAFS_UTILS_SORC}/build + fi + + # Create a build directory for a fresh build + mkdir ${HAFS_UTILS_SORC}/build + + cd ${HAFS_UTILS_SORC}/build + + # Generate makefile using CMake for the application + if [[ $target = "wcoss_cray" ]]; then + cmake ../hafs_change_prepbufr -DCMAKE_Fortran_COMPILER=ftn -DCMAKE_C_COMPILER=cc + else + cmake ../hafs_change_prepbufr -DCMAKE_Fortran_COMPILER=ifort -DCMAKE_C_COMPILER=icc + fi + + # Build the hafs_change_prepbufr application. + make all + + # Move the hafs_change_prepbufr application executable to the HAFS + # utility application executables path. + make install +} + +#---- + + # FUNCTION: # build_hafsutils.sh @@ -164,6 +209,10 @@ build_hafsutils (){ _hafsutils_obs_preproc + # Build the change_prepbufr application. + + _hafsutils_change_prepbufr + } #---- diff --git a/sorc/hafs_tools.fd/sorc/hafs_change_prepbufr/CMakeLists.txt b/sorc/hafs_tools.fd/sorc/hafs_change_prepbufr/CMakeLists.txt new file mode 100644 index 000000000..fdec879a8 --- /dev/null +++ b/sorc/hafs_tools.fd/sorc/hafs_change_prepbufr/CMakeLists.txt @@ -0,0 +1,58 @@ +#======================================================================= +#$$$ CMAKEFILE DOCUMENTATION BLOCK +# Biju Thomas +# Email: biju.thomas@noaa.gov +#======================================================================= + +cmake_minimum_required(VERSION 3.15) +project( + CHANGE_PREPBUFR + LANGUAGES C Fortran) + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/Modules/") + +if(NOT CMAKE_Fortran_COMPILER_ID MATCHES "^(Intel|GNU)$") + message(WARNING "Compiler not officially supported: ${CMAKE_Fortran_COMPILER_ID}") +endif() + +if(NOT CMAKE_C_COMPILER_ID MATCHES "^(Intel|GNU)$") + message(WARNING "Compiler not officially supported: ${CMAKE_C_COMPILER_ID}") +endif() + +find_package(NetCDF REQUIRED C Fortran) +find_package(w3nco REQUIRED) +find_package(w3emc REQUIRED) +find_package(bufr REQUIRED) +find_package(MPI REQUIRED) + +message("TYPE CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}") +set(exec_dir ${CMAKE_SOURCE_DIR}/../../exec) + +set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -O3 -msse2 -fp-model precise -assume byterecl -convert big_endian") + +add_executable(hafs_change_prepbufr_rm_typ_in_circle.x change_prepbufr_rm_typ_in_circle.f) +add_executable(hafs_change_prepbufr_qm_in_circle.x change_prepbufr_qm_in_circle.f) +add_executable(hafs_change_prepbufr_qm_typ.x change_prepbufr_qm_typ.f) + +target_link_libraries( + hafs_change_prepbufr_rm_typ_in_circle.x + w3emc::w3emc_4 + w3nco::w3nco_4 + bufr::bufr_4 + MPI::MPI_Fortran) +target_link_libraries( + hafs_change_prepbufr_qm_in_circle.x + w3emc::w3emc_4 + w3nco::w3nco_4 + bufr::bufr_4 + MPI::MPI_Fortran) +target_link_libraries( + hafs_change_prepbufr_qm_typ.x + w3emc::w3emc_4 + w3nco::w3nco_4 + bufr::bufr_4 + MPI::MPI_Fortran) + +install(TARGETS hafs_change_prepbufr_rm_typ_in_circle.x DESTINATION ${exec_dir}) +install(TARGETS hafs_change_prepbufr_qm_in_circle.x DESTINATION ${exec_dir}) +install(TARGETS hafs_change_prepbufr_qm_typ.x DESTINATION ${exec_dir}) diff --git a/sorc/hafs_tools.fd/sorc/hafs_change_prepbufr/change_prepbufr_qm_in_circle.f b/sorc/hafs_tools.fd/sorc/hafs_change_prepbufr/change_prepbufr_qm_in_circle.f new file mode 100644 index 000000000..c0f3f4480 --- /dev/null +++ b/sorc/hafs_tools.fd/sorc/hafs_change_prepbufr/change_prepbufr_qm_in_circle.f @@ -0,0 +1,635 @@ + + PROGRAM CHANGE_PREPBUFR_QM_IN_CIRCLE + +C----------------------------------------------------------------------- +C MAIN PROGRAM CHANGE_PREPBUFR_QM_IN_CIRCLE +C +C PRGMMR: M. TONG DATE: 2012-03-13 +C Modified subroutine EDTPRP for HWRF, but do not add BOGUS data +C Flag psob within max(ROCI,RBLDC), when categorary is greater than 0 +C and input RRBLD > 0. +C Flag dropsonde u,v obs within max(111.,3*RMW,RRADC), when input +C RRADC > 0 +C +C SUBPROGRAM: EDTPRP COPIES/EDITS PREPBUFR FILE, ADDS BOGUS +C PRGMMR: D. A. KEYSER ORG: NP22 DATE: 2005-07-01 +C +C ABSTRACT: FIRST, READS THROUGH THE INPUT PREPBUFR FILE AND COPIES +C ALL DATA TO THE OUTPUT PREPBUFR FILE. IN THE PROCESS OF DOING +C THIS, - IF REQUESTED - CHECKS FOR MASS REPORTS IN THE VICINITY OF +C ALL STORMS PROCESSED AND FLAGS THE PRESSURE Q.M. ON ALL LEVELS +C FOR THESE REPORTS, ALSO - IF REQUESTED - CHECKS FOR DROPWINSONDE +C WIND REPORTS IN THE VICINITY OF ALL STORMS PROCESSED AND FLAGS THE +C WIND Q.M. ON ALL LEVELS FOR THESE REPORTS (SEE COMMENTS IN THIS +C SUBROUTINE FOR DEFINITION OF "IN THE VICINITY"). IN BOTH CASES, +C THIS WILL PREVENT THESE REPORTS FROM BEING ASSIMILATED BY THE +C ANALYSIS. +C +C----------------------------------------------------------------------- + + CHARACTER*52 HDSTR,PESTR,WESTR + character*9 stmnam + CHARACTER*80 CRADC,CBLDC + CHARACTER*8 STNID,SUBSET,LAST + INTEGER LSTORM + PARAMETER(LSTORM=20) + + character*4 tcv_center + character*3 tcv_storm_id + character*9 tcv_storm_name ! Storm name + integer tcv_century + integer tcv_yymmdd + integer tcv_hhmm + integer tcv_lat + character*1 tcv_latns + integer tcv_lon + character*1 tcv_lonew + integer tcv_stdir + integer tcv_stspd + integer tcv_pcen + integer tcv_penv + integer tcv_penvrad + integer tcv_vmax + integer tcv_vmaxrad + integer tcv_r341 + integer tcv_r342 + integer tcv_r343 + integer tcv_r344 + character*1 tcv_depth + integer tcv_r501 + integer tcv_r502 + integer tcv_r503 + integer tcv_r504 + integer tcv_mfh + integer tcv_flat + character*1 tcv_flatns + integer tcv_flon + character*1 tcv_flonew + integer tcv_r641 + integer tcv_r642 + integer tcv_r643 + integer tcv_r644 + + INTEGER RDIST64 + + DIMENSION HDR(6),PES(4,255),WES(5,255),TZS(13,255),UVS(10,255) + DIMENSION RMW(LSTORM),ROCI(LSTORM),STMLAT(LSTORM), + $ STMLON(LSTORM),RLON(LSTORM),vmax(lstorm), + $ icat(lstorm),padj(0:5),stmnam(lstorm) + + REAL(8) HDR_8(6),PES_8(4,255),WES_8(5,255) + EQUIVALENCE (STNID,HDR_8(1)) + + LOGICAL FLMASS,DROP,FLBWND,UFLBWND,CFLBWND + + DATA HDSTR/'SID XOB YOB DHR TYP TSB '/ + DATA PESTR/'POB PQM PPC PRC '/ + DATA WESTR/'UOB VOB WQM WPC WRC '/ + + DATA IUNTPN/21/,IUNTPO/51/ + + DATA BMISS/10E10/ + +C Storm center pressure adjustment (from guess pressure) based on +C Category -- cat. 0 1 2 3 4 5 + data padj / 0., 0., 4., 8., 12., 15. / + + SAVE + + CALL GETENV('RRADC',CRADC) + IF(CRADC.EQ.' ') CALL ERREXIT(99) + CALL GETENV('RBLDC',CBLDC) + IF(CBLDC.EQ.' ') CALL ERREXIT(99) + READ(CRADC,'(F6.0)') RRADC + READ(CBLDC,'(F6.0)') RBLDC + + print *, 'RRADC, RBLDC: ', RRADC, RBLDC + if(RBLDC > 0.0)then + FLMASS=.true. + else + FLMASS=.false. + end if + if(RRADC > 0.0)then + FLBWND=.true. + else + FLBWND=.false. + end if + if(RRADC < 0.0)then + UFLBWND=.true. + else + UFLBWND=.false. + end if + if(FLBWND .OR. UFLBWND)then + CFLBWND=.true. + else + CFLBWND=.false. + end if + + print *, 'FLMASS, FLBWND=', FLMASS, FLBWND + print *, 'UFLBWND=', UFLBWND + print *, 'CFLBWND=', CFLBWND + +C Read tcvitals, incluing R34, R50, and R64 quadrants 1-4 + OPEN(11,file='tcvitals',form='formatted') + ii=0 + do while (.true.) + read (11,22,END=801,ERR=891) tcv_center,tcv_storm_id, + $ tcv_storm_name,tcv_century,tcv_yymmdd,tcv_hhmm,tcv_lat, + $ tcv_latns,tcv_lon,tcv_lonew,tcv_stdir,tcv_stspd,tcv_pcen, + $ tcv_penv,tcv_penvrad,tcv_vmax,tcv_vmaxrad,tcv_r341,tcv_r342, + $ tcv_r343,tcv_r344,tcv_depth,tcv_r501,tcv_r502,tcv_r503, + $ tcv_r504,tcv_mfh,tcv_flat,tcv_flatns,tcv_flon,tcv_flonew, + $ tcv_r641,tcv_r642,tcv_r643,tcv_r644 + ii = ii + 1 + enddo + + 801 continue + + numstorms=ii + rewind(11) + + LAST = 'XXXXXXXX' + +C OPEN THE INPUT AND OUTPUT BUFR FILES +C ------------------------------------ + + CALL DATELEN(10) + + CALL OPENBF(IUNTPN,'IN',IUNTPN) + CALL READMG(IUNTPN,SUBSET,IDATBF,IRET) + IF(IRET.NE.0) THEN + PRINT *, 'EDTPRP - ERROR OPENING INPUT PREPBUFR FILE' + CALL ERREXIT(20) + END IF + PRINT 789, IUNTPN,IDATBF + 789 FORMAT(/' ===> EDTPRP: INPUT PREPBUFR FILE IN UNIT',I3, + $ ' SUCCESSFULLY OPENED - SECTION 1 MESSAGE DATE =',I11/) + + IF(IDATBF.LT.1000000000) THEN + +C If 2-digit year returned in IDATBF, must use "windowing" technique +C to create a 4-digit year + +C IMPORTANT: IF DATELEN(10) IS CALLED, THE DATE HERE SHOULD ALWAYS +C CONTAIN A 4-DIGIT YEAR, EVEN IF INPUT FILE IS NOT +C Y2K COMPLIANT (BUFRLIB DOES THE WINDOWING HERE) + + PRINT *, '##SYNDATA - THE FOLLOWING SHOULD NEVER HAPPEN!!!!!' + PRINT *, '##SYNDATA - 2-DIGIT YEAR IN IDATBF RETURNED FROM ', + $ 'READMG (IDATBF IS: ',IDATBF,') - USE WINDOWING TECHNIQUE ', + $ 'TO OBTAIN 4-DIGIT YEAR' + IF(IDATBF/1000000.GT.20) THEN + IDATBF = 1900000000 + IDATBF + ELSE + IDATBF = 2000000000 + IDATBF + ENDIF + PRINT *, '##SYNDATA - CORRECTED IDATBF WITH 4-DIGIT YEAR, ', + $ 'IDATBF NOW IS: ',IDATBF + ENDIF + + PRINT 1234 + 1234 FORMAT(//' ===> EDTPRP: THE ENTIRE PREPBUFR FILE WILL BE READ, ', + $ 'ALL MESSAGES ARE COPIED FROM INPUT PREPBUFR FILE TO OUTPUT ', + $ 'PREPBUFR FILE.'/15X,'STORM BOUNDARIES AND RADIUS OF MAXIMUM ', + $ 'SURFACE WIND WILL FOLLOW.'//) + IF(FLMASS) PRINT 1335 + 1335 FORMAT(' ===> EDTPRP: ALL MASS REPORTS WITHIN THE STORM ', + $ 'BOUNDARIES WILL HAVE THEIR PRESSURE Q.M. FLAGGED ON EVERY ', + $ 'LEVEL.'//) + IF(FLBWND) PRINT 1236 + 1236 FORMAT(' ===> EDTPRP: ALL DROPWINSONDE REPORTS WITHIN A ', + $ 'DISTANCE TO STORM CENTER OF THE LARGER OF 111 KM OR 3 X THE ', + $ 'RADIUS OF MAXIMUM'/15X,'SURFACE WIND WILL HAVE THEIR WIND Q.M.', + $ ' FLAGGED ON EVERY LEVEL.'//) + IF(UFLBWND) PRINT 1237 + 1237 FORMAT(' ===> EDTPRP: ALL DROPWINSONDE REPORTS WITHIN A ', + $ 'DISTANCE TO STORM CENTER OF THE LARGER OF 111 KM OR 3 X THE ', + $ 'RADIUS OF MAXIMUM'/15X,'SURFACE WIND WILL HAVE THEIR WIND Q.M.', + $ ' UNFLAGGED ON EVERY LEVEL.'//) + + DO J = 1,numstorms + read (11,22) tcv_center,tcv_storm_id, + $ tcv_storm_name,tcv_century,tcv_yymmdd,tcv_hhmm,tcv_lat, + $ tcv_latns,tcv_lon,tcv_lonew,tcv_stdir,tcv_stspd,tcv_pcen, + $ tcv_penv,tcv_penvrad,tcv_vmax,tcv_vmaxrad,tcv_r341,tcv_r342, + $ tcv_r343,tcv_r344,tcv_depth,tcv_r501,tcv_r502,tcv_r503, + $ tcv_r504,tcv_mfh,tcv_flat,tcv_flatns,tcv_flon,tcv_flonew, + $ tcv_r641,tcv_r642,tcv_r643,tcv_r644 + + stmnam(J)=tcv_storm_name + STMLAT(J)=tcv_lat/10 + if(tcv_lonew .EQ. 'W')then + STMLON(J)=360.-0.1*tcv_lon + else + STMLON(J)=0.1*tcv_lon + end if + ROCI(J)=tcv_penvrad*1.0 + RMW(J)=tcv_vmaxrad*1.0 + vmax(J)=tcv_vmax*1.0 + +C FOR HWRF ONLY HAVE 1 STORM, NO NEED FOR ARRAYS +C east/west motion in km/h (1 m/s = 3.6 km/h) + DXDT=tcv_stspd/10.*SIND(tcv_stdir*1.0)*3.6 +C convert to degrees + DDXDT=-DXDT/(111.*COSD(STMLAT(J)*1.0)) +C north/south motion in km/h (1 m/s = 3.6 km/h) + DYDT=tcv_stspd/10.*COSD(tcv_stdir*1.0)*3.6 +C convert to degrees + DDYDT=DYDT/111. + +C Determine the Saffir-Simpson Storm Category based on the maximum +C reported wind speed (use cateogry 0 for all speeds below hurricane +C strength) + + vmax(j) = 1.94 * vmax(j) + if(vmax(j).gt.135.0) then + icat(j) = 5 + else if(vmax(j).gt.113.0) then + icat(j) = 4 + else if(vmax(j).gt.95.0) then + icat(j) = 3 + else if(vmax(j).gt.82.0) then + icat(j) = 2 + else if(vmax(j).gt.63.0) then + icat(j) = 1 + else + icat(j) = 0 + end if + +C Convert the storm center longitude to west longitude (0-360) +C (this is assuming storm center longitude comes in as 0-360 E) +C -------------------------------------------------------------- + + RLON(J) = 360. - STMLON(J) + IF(RLON(J).EQ.360.) RLON(J) = 0. + + PRINT 1294, stmnam(j),J,STMLAT(J),RLON(J),ROCI(J), + $ nint(RMW(J)),nint(vmax(j)),icat(j) + 1294 FORMAT(1X,A9,'(storm #',i2,'):: center:',f7.2,'N lat, ',f8.2, + $ 'W lon; ROCI: ',F7.2,' km', + $ /24X,'Radius of max. wind speed is ',I4, + $ ' km; Max. wind speed is ',I3,' knots making this a Cat. ',I1, + $ ' storm'//) + ENDDO + + CLOSE(11) + + 22 format (a4,1x,a3,1x,a9,1x,i2,i6,1x,i4,1x,i3,a1,1x,i4,a1, + $ 1x,i3,1x,i3,3(1x,i4),1x,i2,1x,i3,4(1x,i4),1x,a1, + $ 4(1x,i4),1x,i2,1x,i3,a1,1x,i4,a1,1x,4(1x,i4)) + + CALL CLOSBF(IUNTPN) + CALL OPENBF(IUNTPN,'IN',IUNTPN) + + CALL OPENBF(IUNTPO,'OUT',IUNTPN) + CALL UFBQCD(IUNTPO,'SYNDATA',SYNPC) + +C VARIOUS COPYING OPTIONS +C ----------------------- + + ICPYMG = 0 + ICNTOT = 0 + ICNTMM = 0 + ICNTMW = 0 + ICNTTA = 0 + + 30 CONTINUE + + CALL READMG(IUNTPN,SUBSET,JDATBF,IRET) + IF(IRET.NE.0) GO TO 20 + IF(.NOT.FLMASS.AND.(.NOT.CFLBWND.OR.SUBSET.NE.'ADPUPA ')) THEN + +C NO NEED TO DECODE THIS MESSAGE IF FLMASS IS FALSE AND EITHER +C CFLBWND IS FALSE OR THIS MESSAGE TYPE IS NOT ADPUPA +C ------------------------------------------------------------ + + IF(SUBSET.NE.LAST) THEN + IF(LAST.NE.'XXXXXXXX') THEN + IF(LAST.NE.'ADPUPA ') THEN + PRINT 2249, IUNTPN,LAST + 2249 FORMAT(/' ===> EDTPRP: ALL MESSAGES IN INPUT PREPBUFR FILE IN ', + $ 'UNIT',I3,' WITH TABLE A ENTRY "',A8,'" PROCESSED -- '/15X, + $ 'SINCE FLMASS IS FALSE, NO INDIVIDUAL REPORTS WERE DECODED OUT ', + $ 'OF THESE MESSAGES'/) + ELSE + IF(.NOT.CFLBWND) THEN + PRINT 2250, IUNTPN,LAST + 2250 FORMAT(/' ===> EDTPRP: ALL MESSAGES IN INPUT PREPBUFR FILE IN ', + $ 'UNIT',I3,' WITH TABLE A ENTRY "',A8,'" PROCESSED -- '/15X, + $ 'SINCE FLMASS AND CFLBWND BOTH FALSE, NO INDIVIDUAL REPORTS', + $ 'WERE DECODED OUT OF THESE MESSAGES'/) + ELSE + PRINT 1249, IUNTPN,LAST,ICNTTA + CALL CLOSMG(IUNTPO) + END IF + END IF + PRINT 1240, IUNTPN,SUBSET,JDATBF + END IF + END IF + LAST = SUBSET + CALL COPYMG(IUNTPN,IUNTPO) + GO TO 30 + END IF + IF(SUBSET.NE.LAST) THEN + ICPYMG = 0 + IF(LAST.NE.'XXXXXXXX') PRINT 1249, IUNTPN,LAST,ICNTTA + 1249 FORMAT(/' ===> EDTPRP: ALL MESSAGES IN INPUT PREPBUFR FILE IN ', + $ 'UNIT',I3,' WITH TABLE A ENTRY "',A8,'" PROCESSED -- '/15X, + $ 'NUMBER OF INDIVIDUAL REPORTS DECODED OUT OF THESE MESSAGES =', + $ I5/) + ICNTTA = 0 + PRINT 1240, IUNTPN,SUBSET,JDATBF + 1240 FORMAT(/' ===> EDTPRP: NEXT MESSAGE IN INPUT PREPBUFR FILE IN ', + $ 'UNIT',I3,' HAS NEW TABLE A ENTRY OF "',A8,'" -- DATE IS',I11) + +C NO NEED TO DECODE MESSAGES CONTAINING ONLY WIND DATA OR NO PRESSURE +C ------------------------------------------------------------------- + + IF(SUBSET.EQ.'SATWND '.OR.SUBSET.EQ.'PROFLR '.OR. + $ SUBSET.EQ.'VADWND '.OR.SUBSET.EQ.'GOESND '.OR. + $ SUBSET.EQ.'SPSSMI '.OR.SUBSET.EQ.'ERS1DA '.OR. + $ SUBSET.EQ.'GPSIPW ') THEN + PRINT 1241, IUNTPO + 1241 FORMAT(/' ===> EDTPRP: MESSAGES WITH THIS TABLE A ENTRY WILL ', + $ 'NEVER BE MODIFIED - COPY MESSAGES TO OUTPUT PREPBUFR FILE IN ', + $ 'UNIT',I3/) + +cc dak 7/3/05 - icpymg is ALWAYS zero here +cc dak 7/3/05 IF(ICPYMG.EQ.0.AND.LAST.NE.'XXXXXXXX') CALL CLOSMG(IUNTPO) + if(last.ne.'XXXXXXXX') call closmg(iuntpo) + + ICPYMG = 1 + ELSE IF(SUBSET.EQ.'SYNDAT ') THEN + PRINT 1291, IUNTPO + 1291 FORMAT(/' ===> EDTPRP: MESSAGES WITH THIS TABLE A ENTRY WILL ', + $ 'NEVER BE PROCESSED NOR COPIED TO OUTPUT PREPBUFR FILE IN UNIT', + $ I3/15X,'SINCE THE BOGUS SYNDATA SHOULD NOT BE IN THE INPUT ', + $ 'PREPBUFR FILE'/) + ICPYMG = 1 + ELSE + PRINT 1242, IUNTPO + 1242 FORMAT(/' ===> EDTPRP: MESSAGES WITH THIS TABLE A ENTRY MAY BE ', + $ 'MODIFIED PRIOR TO THEIR OUTPUT TO PREPBUFR FILE IN UNIT',I3,/ + $ 15X,' - EACH INDIVIDUAL REPORT MUST BE DECODED'/) + END IF + END IF + LAST = SUBSET + + IF(ICPYMG.EQ.1) THEN + +C "SYNDAT" MESSAGES SHOULD NEVER BE IN INPUT PREPBUFR FILE, BUT IF +C THEY ARE DON'T COPY THEM TO OUTPUT PREPBUFR FILE +C ---------------------------------------------------------------- + + IF(SUBSET.NE.'SYNDAT ') THEN + CALL COPYMG(IUNTPN,IUNTPO) + ELSE + PRINT 2345, IUNTPN,IUNTPO + 2345 FORMAT(/' ===> EDTPRP: MESSAGE WITH TABLE A ENTRY "SYNDAT " ', + $ 'ENCOUNTERED IN INPUT PREPBUFR FILE IN UNIT',I3,/15X,'-- DO NOT', + $ ' COPY TO OUTPUT PREPBUFR FILE IN UNIT',I3/) + END IF + GO TO 30 + END IF + + CALL OPENMB(IUNTPO,SUBSET,JDATBF) + + 10 CONTINUE + + CALL READSB(IUNTPN,IRET) + IF(IRET.NE.0) GO TO 30 + ICNTTA = ICNTTA + 1 + ICNTOT = ICNTOT + 1 + CALL UFBCPY(IUNTPN,IUNTPO) + CALL UFBINT(IUNTPN,HDR_8,6,1,IRET,HDSTR); HDR(2:6)=HDR_8(2:6) + XOB = HDR(2) + YOB = HDR(3) + DHR = HDR(4) + KX = HDR(5) + ITSB = HDR(6) + KK = KX/100 + DROP = (KX.EQ.232 .AND. ITSB.EQ.2) + IF(KK.EQ.2 .AND. .NOT.DROP) GO TO 15 !If this is a wind rpt other + ! than a drop, no chg made + IF(.NOT.DROP) THEN + IF(FLMASS) THEN +C----------------------------------------------------------------------- +C Processing to flag pressure q.m. on all lvls for mass reports +C within any one of the storm(s) lat/lon boundaries +C----------------------------------------------------------------------- + XOB = 360. - XOB + IF(XOB.EQ.360.) XOB = 0. + DO J = 1,numstorms + CALL CHDIST(RLON(J),STMLAT(J),XOB,YOB,RDIST) +CC IF(RDIST.LE.MAX(ROCI(J),RBLDC).and.icat(J).GT.0) + IF(RDIST.LE.MAX(ROCI(J),RBLDC)) + $ GO TO 1500 + ENDDO + GO TO 15 + 1500 CONTINUE + CALL UFBINT(IUNTPN,PES_8,4,255,NLEV,PESTR); PES=PES_8 + NFLAG = 0 + DO J=1,NLEV + PQM = PES(2,J) + IF(PQM.LT.10) THEN + PES(2,J) = 10 + PES(3,J) = SYNPC + PES(4,J) = 10 + NFLAG = 1 + ELSE + PES(:,J) = BMISS + ENDIF + ENDDO + IF(NFLAG.EQ.1) THEN + PRINT 7280 + 7280 FORMAT(/' ===> EDTPRP: ALL LEVEL PRESSURE Q. MARKS WERE FLAGGED ', + $ '(SET TO 10, R. CODE=10) FOR THE FOLLOWING NON-BOGUS REPORT:') + PRINT 7220, YOB,XOB,STNID,NLEV,HDR(4),KX + 7220 FORMAT(1X,'LATITUDE =',F7.2,' LONGITUDE=',F7.2,' STN. ID =',A8, + $ ' NO. LVLS =',I3,' DEL. TIME=',F6.2,' REP. TYPE=',I3/) + ICNTMM = ICNTMM + 1 + END IF + PES_8=PES + CALL UFBINT(IUNTPO,PES_8,4,NLEV,IRET,PESTR) + END IF + ELSE + IF(CFLBWND) THEN +C----------------------------------------------------------------------- +C Processing to flag wind q.m. on all lvls for dropwindonde reports +C which are within R64 +C----------------------------------------------------------------------- + +C Convert reported dropwinsonde longitude to west longitude (0-360) +C (this is assuming dropwinsonde longitude comes in as 0-360 E) +C ----------------------------------------------------------------- + XOB = 360. - XOB + IF(XOB.EQ.360.) XOB = 0. + DO J = 1,numstorms + JST = J +C Estimate storm lat/lon at time of observation + XTOB=NINT((RLON(J)+DHR*DDXDT)*10)/10. + YTOB=NINT((STMLAT(J)+DHR*DDYDT)*10)/10. + CALL CHDIST(XTOB,YTOB,XOB,YOB,RDIST) +cppppppppppppppp +cc print *, '++ distance to storm ',jst,' = ',rdist,', max ', +cc $ 'limit for flagging is ',MAX(MAX(111.,3*RMW(J)),RRADC) +cc print *, 'RLON(J),STMLAT(J),XOB,YOB: ', +cc $ RLON(J),STMLAT(J),XOB,YOB +cppppppppppppppp + IF ( XOB.LE.RLON(J).AND.YOB.GT.STMLAT(J) ) RDIST64 = tcv_r641 + IF ( XOB.LT.RLON(J).AND.YOB.LE.STMLAT(J) ) RDIST64 = tcv_r642 + IF ( XOB.GE.RLON(J).AND.YOB.LT.STMLAT(J) ) RDIST64 = tcv_r643 + IF ( XOB.GT.RLON(J).AND.YOB.GE.STMLAT(J) ) RDIST64 = tcv_r644 + + IF ( RDIST64.GT.0.AND.RDIST64.LT.20 ) RDIST64 = 20 + + IF(RDIST.LE.MIN(RDIST64*1.0,111.)) GO TO 1600 + + ENDDO + GO TO 15 + 1600 CONTINUE + CALL UFBINT(IUNTPN,WES_8,5,255,NLEV,WESTR); WES=WES_8 + IF(FLBWND)THEN + NFLAG = 0 + DO J=1,NLEV + WQM = WES(3,J) + IF(WQM.LE.10) THEN + WES(3,J) = 10 + WES(4,J) = SYNPC + WES(5,J) = 99 + NFLAG = 1 + ELSE + WES(:,J) = BMISS + ENDIF + ENDDO + END IF + IF(UFLBWND)THEN + DO J=1,NLEV + WQM = WES(3,J) + print *,'mtong WQM,WES(4,J),WES(5,J)=',WQM,WES(4,J),WES(5,J) + IF(WQM.EQ.10) THEN + WES(3,J) = 2 + NFLAG = 2 + ELSE + WES(:,J) = BMISS + ENDIF + END DO + ENDIF + IF(NFLAG.NE.0) THEN + IF(NFLAG.EQ.1)PRINT 8280 + 8280 FORMAT(/' ===> EDTPRP: ALL LEVEL WIND Q. MARKS WERE FLAGGED ', + $ '(SET TO 10, R. CODE=99) FOR THE FOLLOWING DROPWINSONDE REPORT:') + IF(NFLAG.EQ.2)PRINT 8281 + 8281 FORMAT(/' ===> EDTPRP: ALL LEVEL WIND Q. MARKS WERE UNFLAGGED ', + $ '(SET TO 2, R. CODE=99) FOR THE FOLLOWING DROPWINSONDE REPORT:') +C PRINT 8220, YOB,XOB,STNID,NLEV,HDR(4),KX,ITSB,JST, +C $ NINT(RDIST),MAX(111,3*NINT(RMW(JST))) + PRINT 8220, YOB,XOB,STNID,NLEV,HDR(4),KX,ITSB,JST, + $ NINT(RDIST),MAX(20,MIN(RDIST64,111)) + 8220 FORMAT(1X,'LATITUDE =',F7.2,'N LONGITUDE=',F7.2,'W STN. ID =', + $ A8,' NO. LVLS =',I3,' DEL. TIME=',F6.2,' REP. TYPE/SUBTYPE=', + $ I3,'/',I1/1X,'DIST. FROM STORM',I3,'=',I5,'KM WHICH IS WITHIN ', + $ 'LIMIT OF ',I5,'KM'/) + ICNTMW = ICNTMW + 1 + END IF + WES_8=WES + CALL UFBINT(IUNTPO,WES_8,5,NLEV,IRET,WESTR) + END IF +C----------------------------------------------------------------------- + END IF + 15 CONTINUE + CALL WRITSB(IUNTPO) + GOTO 10 + + 20 CONTINUE + IF(.NOT.FLMASS.AND.(.NOT.CFLBWND.OR.LAST.NE.'ADPUPA ')) THEN + IF(LAST.NE.'ADPUPA ') THEN + PRINT 2249, IUNTPN,LAST + ELSE + PRINT 2250, IUNTPN,LAST + END IF + ELSE + PRINT 1249, IUNTPN,LAST,ICNTTA + END IF + PRINT 1259, IUNTPN,ICNTOT,ICNTMM,ICNTMW,IUNTPO + 1259 FORMAT(//' ===> EDTPRP: ALL MESSAGES IN INPUT PREPBUFR FILE IN ', + $ 'UNIT',I3,' PROCESSED -'/16X,'NUMBER OF INDIVIDUAL REPORTS ', + $ 'DECODED OUT OF ALL MESSAGES =',I6,' -- OF THESE ...'/19X, + $ '-- TOTAL NUMBER OF MASS REPORTS ACTUALLY MODIFIED =',10X,I7/ + $ 19X,'-- TOTAL NUMBER OF DROPWINSONDE WIND REPORTS ACTUALLY ', + $ 'MODIFIED = ',I3//15X,'OUTPUT PREPBUFR FILE IN UNIT',I3, + $ ' CONTAINS ALL ORIGINAL REPORTS PLUS ANY OF THESE MODIFICATIONS' + $ //) + CALL CLOSBF(IUNTPN) + PRINT 799, IUNTPN + 799 FORMAT(/' ===> EDTPRP: INPUT PREPBUFR FILE IN UNIT',I3, + $ ' SUCCESSFULLY CLOSED'/) + CALL CLOSMG(IUNTPO) + + CALL CLOSBF(IUNTPO) + PRINT 899, IUNTPO + PRINT 809 + 809 FORMAT(/' ===> EDTPRP: NO BOGUS DATA APPENDED TO PREPBUFR FILE ', + $ ' (AS REQUESTED)'/) + 899 FORMAT(/' ===> EDTPRP: OUTPUT PREPBUFR FILE IN UNIT',I3, + $ ' SUCCESSFULLY CLOSED'/) + + STOP + + 891 write(6,*)'***ERROR*** in reading tcvitals' + + STOP + END + +C$$$ SUBPROGRAM DOCUMENTATION BLOCK +C +C SUBPROGRAM: CHDIST +C PRGMMR: D. KEYSER ORG: NP22 DATE: 2004-02-02 +C +C ABSTRACT: COMPUTES CHORD LENGTH DISTANCE FROM ONE LAT/LON POINT +C TO ANOTHER LAT/LON POINT USING THE FORMULA: +C S**2/2 = 1 - COS(Y1-Y2) + COS(Y1)*COS(Y2)*(1-COS(X1-X2)). +C +C PROGRAM HISTORY LOG: +C 1990-11-06 J. WOOLLEN -- ORIGINAL AUTHOR +C 2004-02-02 D. KEYSER -- CORRECTED SUBROUTINE ARGUMENT MISALIGNMENT +C (THIS DID NOT APPEAR TO CAUSE PROBLEMS IN OUTPUT BUT COULD CAUSE +C MEMORY CLOBBERING DOWN THE LINE SOMEWHERE) +C +C USAGE: CALL CHDIST(X1,Y1,X2,Y2,DIST) +C INPUT ARGUMENTS: +C X1 - LONGITUDE (0.-360. W) OF POINT 1 +C Y1 - LATITUDE (N+,S-) OF POINT 1 +C X2 - LONGITUDE (0.-360. W) OF POINT 2 +C Y2 - LATITUDE (N+,S-) OG POINT 2 +C +C OUTPUT ARGUMENTS: +C DIST - CHORD LENGTH DISTANCE BETWEEN POINTS (KM) +C +C REMARKS: NONE +C +C ATTRIBUTES: +C LANGUAGE: FORTRAN 90 +C MACHINE: IBM SP +C +C$$$ + SUBROUTINE CHDIST(X1,Y1,X2,Y2,DIST) + + DATA PI180/.0174532 /,RADE/6371./ + + SAVE PI180,RADE + +C COMPUTE THE DISTANCE +C -------------------- + + COSY1 = COS(Y1*PI180) + COSY2 = COS(Y2*PI180) + COSDX = COS((X1-X2)*PI180) + COSDY = COS((Y1-Y2)*PI180) + S = 1.0-COSDY+COSY1*COSY2*(1.0-COSDX) + S = SQRT(2.*S) + IF(S.LE..002) S = 0. + DIST = S*RADE + + RETURN + END diff --git a/sorc/hafs_tools.fd/sorc/hafs_change_prepbufr/change_prepbufr_qm_typ.f b/sorc/hafs_tools.fd/sorc/hafs_change_prepbufr/change_prepbufr_qm_typ.f new file mode 100644 index 000000000..5b5e3ad8e --- /dev/null +++ b/sorc/hafs_tools.fd/sorc/hafs_change_prepbufr/change_prepbufr_qm_typ.f @@ -0,0 +1,421 @@ + PROGRAM CHANGE_PREPBUFR_QM_TYP + +C----------------------------------------------------------------------- +C MAIN PROGRAM CHANGE_PREPBUFR_QM_TYP +C +C THIS CODE WILL READ THOUGH AN INPUT PREPBUFR FILE (SPECIFIED AS +C POSITIONAL PARAMETER 1) AND CHANGE ALL QUALITY MARKS OF 14 TO 2 FOR +C ALL REPORTS OF A PARTICULAR REPORT TYPE (OR TYPES) - NORMALLY, THE +C INPUT PREPBUFR FILE SHOULD BE A POST-QC/PRE-ANAL VERSION +C +C----------------------------------------------------------------------- + + PARAMETER (IQMVAR=7) + + CHARACTER*8 SUBSET,SUBSET_LAST,SID + CHARACTER*11 CTEXT(IQMVAR) + + REAL*8 RID_8(3),OBS_8(5,255),BMISS,GETBMISS + REAL RID(3),OBS(5,255) + REAL*8 QM1(255),QM1x(255) + REAL*8 QM2(255),QM2x(255) + REAL*8 QM3(255),QM3x(255) + REAL*8 QM4(255),QM4x(255) + REAL*8 QM5(255),QM5x(255) + REAL*8 QM6(255),QM6x(255) + REAL*8 QM7(255),QM7x(255) + + EQUIVALENCE (RID_8(1),SID) + + DATA LUBFI/21/,LUBFJ/51/,IRECI/0/,IRECO/0/,IRECO_LAST/0/, + $ SUBSET_LAST/'XXXXXXXX'/,IKNTTYP/0/ + + DATA CTEXT/'PRESSURE ','HEIGHT ','WIND(U/V) ', + $ 'WIND(D/S) ','WIND SPEED ','TEMPERATURE', + $ 'SPEC HUMID '/ + +C On WCOSS should always set BUFRLIB missing (BMISS) to 10E8 to avoid +C overflow when either an INTEGER*4 variable is set to BMISS or a +C REAL*8 (or REAL*4) variable that is missing is NINT'd +C ------------------------------------------------------------------- +ccccc CALL SETBMISS(10E10_8) + CALL SETBMISS(10E8_8) + BMISS=GETBMISS() + print * + print *, 'BUFRLIB value for missing is: ',bmiss + print * + + CALL DATELEN(10) + CALL OPENBF(LUBFI,'IN',LUBFI) + PRINT 100, LUBFI + 100 FORMAT(/5X,'===> PREPBUFR DATA SET IN UNIT',I3, + * ' SUCCESSFULLY OPENED FOR INPUT; FIRST MESSAGES ', + * 'CONTAIN BUFR TABLES A,B,D'/) + + CALL OPENBF(LUBFJ,'OUT',LUBFI) + PRINT 101, LUBFJ + 101 FORMAT(/5X,'===> PREPBUFR DATA SET IN UNIT',I3,' SUCCESSFULLY', + * ' OPENED FOR OUTPUT'/) + +C READ IN NEXT INPUT BUFR MESSAGE FROM PREPBUFR FILE +C -------------------------------------------------- + + DO WHILE(IREADMG(LUBFI,SUBSET,IDATE).EQ.0) + + CALL UFBCNT(LUBFI,IRECI,ISUB) + PRINT 102, IRECI,SUBSET,IDATE + 102 FORMAT(/5X,'===> READ IN BUFR DATA MESSAGE NUMBER ',I5,' -- ', + $ 'TABLE A ENTRY IS "',A8,'" AND DATE IS',I11/) + +CVVVVVVVVVVVVVVVVVVVV +C Specific to this run: +C COPY ALL MESSAGES WITH TYPE OTHER THAN ADPUPA TO OUTPUT (REPORT +C TYPES 132/232 WILL ONLY BE IN ADPUPA MESSAGE TYPES) +C -------------------------------------------------------------------- +CAAAAAAAAAAAAAAAAAAAA + +C IF((SUBSET.NE.'ADPUPA ') .OR. (SUBSET.NE.'ADPSFC ')) THEN +C IF((SUBSET_LAST.EQ.'ADPUPA ') .OR. (SUBSET_LAST .EQ. +C $ 'ADPSFC ')) THEN +C IF(SUBSET.NE.'ADPSFC ') THEN +C IF(SUBSET_LAST.EQ.'ADPSFC ') THEN + IF(SUBSET(1:3).NE.'ADP') THEN + IF(SUBSET_LAST(1:3).EQ.'ADP') THEN + CALL CLOSMG(LUBFJ) + CALL UFBCNT(LUBFJ,IRECO,ISUBO) + PRINT 104, SUBSET_LAST,IDATE,IRECO + END IF + CALL COPYMG(LUBFI,LUBFJ) + CALL UFBCNT(LUBFJ,IRECO,ISUBO) + PRINT 103, SUBSET,IDATE,IRECO + 103 FORMAT(/5X,'------> COPIED THIS MESSAGE TO OUTPUT FILE -- (ENTRY', + $ ' "',A8,'", DATE ',I11,' - NO. OF DATA MESSAGES WRITTEN SO FAR:', + $ I6/) + IRECO_LAST = IRECO + SUBSET_LAST = SUBSET + CYCLE + END IF + + CALL OPENMB(LUBFJ,SUBSET,IDATE) + CALL UFBCNT(LUBFJ,IRECO,ISUBO) +C IF(IRECO.NE.IRECO_LAST.AND.IRECO_LAST.NE.0.AND. +C $ ((SUBSET_LAST.EQ.'ADPUPA ').OR.(SUBSET_LAST.EQ.'ADPSFC '))) +C IF(IRECO.NE.IRECO_LAST.AND.IRECO_LAST.NE.0.AND.SUBSET_LAST.EQ. +C $ 'ADPSFC ') + IF(IRECO.NE.IRECO_LAST.AND.IRECO_LAST.NE.0.AND. + $ SUBSET_LAST(1:3).EQ.'ADP') + $ PRINT 104, SUBSET_LAST,IDATE,IRECO-1 + 104 FORMAT(/5X,'------> WROTE MESSAGE TO OUTPUT FILE -- (ENTRY', + $ ' "',A8,'", DATE ',I11,' - NO. OF DATA MESSAGES WRITTEN SO FAR:', + $ I6/) + +C READ A SUBSET (REPORT) IN MESSAGE AND CHECK REPORT TYPE +C ------------------------------------------------------- + + DO WHILE(IREADSB(LUBFI).EQ.0) + CALL UFBINT(LUBFI,RID_8,3,1,NLV,'SID TYP RPT') + RID = RID_8 + +CVVVVVVVVVVVVVVVVVVVV +C Specific to this run: +C IF REPORT TYPE IS NOT 132 OR 232, SIMPLY WRITE OUT THE SUBSET (AS +C IS) TO THE OUTPUT FILE AND MOVE ON TO THE NEXT ONE +C ----------------------------------------------------------------- +CAAAAAAAAAAAAAAAAAAAA + + IF(NINT(RID(2)).EQ.132 .OR. NINT(RID(2)).EQ.232 + $ .OR. NINT(RID(2)).EQ. 181 .OR. NINT(RID(2)).EQ. 187 + $ .OR. NINT(RID(2)).EQ. 281 .OR. NINT(RID(2)).EQ. 287) + $ THEN + +C FOR SELECTED REPORT TYPE, FIRST COPY THE SUBSET AS IS TO THE OUTPUT +C FILE +C ------------------------------------------------------------------- + + CALL UFBCPY(LUBFI,LUBFJ) + +C NEXT, DECODE THE SUBSET (REPORT) LOOKING FOR ONE OR MORE QUALITY +C MARKS +C ---------------------------------------------------------------- + +C USE UFBREP TO READ HERE BECAUSE UFBINT CANNOT BE USED TO WRITE (SEE +C BELOW) +C Note: My tests show that in order to do this properly you have +C to split up the q.m.'s since they may appear on a different +C number of levels within the same report. (I tried putting +C them all together and the output is almost the same but a +C few levels w/ q.m. changes were lost) +C -------------------------------------------------------------------- + + +CVVVVVVVVVVVVVVVVVVVV +C Specific to this run: +C SELECT ON ALL QUALITY MARKS +C ----------------------------------- +CAAAAAAAAAAAAAAAAAAAA + + CALL UFBREP(LUBFI,QM1,1,255,NLV1,'PQM') + CALL UFBREP(LUBFI,QM2,1,255,NLV3,'ZQM') + CALL UFBREP(LUBFI,QM3,1,255,NLV4,'WQM') + CALL UFBREP(LUBFI,QM4,1,255,NLV5,'DFQ') + CALL UFBREP(LUBFI,QM5,1,255,NLV6,'SQM') + CALL UFBREP(LUBFI,QM6,1,255,NLV7,'TQM') + CALL UFBREP(LUBFI,QM7,1,255,NLV8,'QQM') + +C REPLACE ALL QUALITY MARKS OF 14 WITH THE VALUE 2 +C ------------------------------------------------ + + IF(NINT(RID(2)).EQ. 181 .OR. NINT(RID(2)).EQ. 187 + $ .OR. NINT(RID(2)).EQ. 281 .OR. NINT(RID(2)).EQ. 287) + $ THEN + IF (QM1(1) .GT. 2) GOTO 400 + END IF + + QM1x=QM1 + I = 1 + IF(NLV1.GT.0) THEN + DO J=1,NLV1 + IF(QM1(J).GE.9) THEN + PRINT 113,CTEXT(I),NINT(QM1(J)),J,SID, + $ NINT(RID(2)),RID(3) + 113 FORMAT('Changed ',A11,' q.m. from ',I2,' to 2 on level ',I3, + $ ' for ID ',A6,' RTYP ',I3,' at ',F7.3,'UTC') + QM1X(J) = 2 + END IF + END DO + END IF + + QM2x=QM2 + I = 2 + IF(NLV3.GT.0) THEN + DO J=1,NLV3 + IF(QM2(J).GE.9) THEN + PRINT 113,CTEXT(I),NINT(QM2(J)),J,SID, + $ NINT(RID(2)),RID(3) + QM2X(J) = 2 + END IF + END DO + END IF + + QM3x=QM3 + I = 3 + IF(NLV4.GT.0) THEN + DO J=1,NLV4 + IF(QM3(J).GE.9) THEN + PRINT 113,CTEXT(I),NINT(QM3(J)),J,SID, + $ NINT(RID(2)),RID(3) + QM3X(J) = 2 + END IF + END DO + END IF + + QM4x=QM4 + I = 4 + IF(NLV5.GT.0) THEN + DO J=1,NLV5 + IF(QM4(J).GE.9) THEN + PRINT 113,CTEXT(I),NINT(QM4(J)),J,SID, + $ NINT(RID(2)),RID(3) + QM4X(J) = 2 + END IF + END DO + END IF + + QM5x=QM5 + I = 5 + IF(NLV6.GT.0) THEN + DO J=1,NLV6 + IF(QM5(J).GE.9) THEN + PRINT 113,CTEXT(I),NINT(QM5(J)),J,SID, + $ NINT(RID(2)),RID(3) + QM5X(J) = 2 + END IF + END DO + END IF + + QM6x=QM6 + I = 6 + IF(NLV7.GT.0) THEN + DO J=1,NLV7 + IF(QM6(J).GE.9) THEN + PRINT 113,CTEXT(I),NINT(QM6(J)),J,SID, + $ NINT(RID(2)),RID(3) + QM6X(J) = 2 + END IF + END DO + END IF + + QM7x=QM7 + I = 7 + IF(NLV8.GT.0) THEN + DO J=1,NLV8 + IF(QM7(J).GE.9) THEN + PRINT 113,CTEXT(I),NINT(QM7(J)),J,SID, + $ NINT(RID(2)),RID(3) + QM7X(J) = 2 + END IF + END DO + END IF + +C WRITE ALL QUALITY MARKS (INCLUDING THOSE UPDATED) (FOR THE TYPES +C SELECTED) TO OUTPUT FILE (UFBREP WILL REPLACE ORIGINAL VALUES +C WITHOUT GENERATING AN EVENT LIKE UFBINT WOULD) (USING UFBINT HERE +C WOULD ALSO WRITE MISSING OBS VALUES!) +C ------------------------------------------------------------------ + + IF(NLV1.GT.0) CALL UFBREP(LUBFJ,QM1x,1,NLV1,IRET,'PQM') + IF(NLV3.GT.0) CALL UFBREP(LUBFJ,QM2x,1,NLV3,IRET,'ZQM') + IF(NLV4.GT.0) CALL UFBREP(LUBFJ,QM3x,1,NLV4,IRET,'WQM') + IF(NLV5.GT.0) CALL UFBREP(LUBFJ,QM4x,1,NLV5,IRET,'DFQ') + IF(NLV6.GT.0) CALL UFBREP(LUBFJ,QM5x,1,NLV6,IRET,'SQM') + IF(NLV7.GT.0) CALL UFBREP(LUBFJ,QM6x,1,NLV7,IRET,'TQM') + IF(NLV8.GT.0) CALL UFBREP(LUBFJ,QM7x,1,NLV8,IRET,'QQM') + +CVVVVVVVVVVVVVVVVVVVV +C Specific to this run: +C FINALLY, CHANGE ALL QUALITY MARKS ON THE SURFACE LEVEL (CATEGORY 0) +C BACK TO 15 SINCE ALL SURFACE DATA IS FLAGGED FOR REPORT TYPE 132 +C (THE SURFACE LEVEL DATA ARE LATER INCORPORATED INTO A UNIQUE +C SPLASH-LEVEL SURFACE REPORT WITH TYPE 182) +C +C Note: Here must use UFBINT to read in data to align proper CAT and +C xQM values - must also read in xOB, xPC and xRC because we +C will be writing back the updated xQM as an event soon (and +C the other values would be written back as missing unless we +C read them in first) +C +C Note: Won't change the xQM unless it is < 15 +C Note: If this is NOT the surface level (i.e., CAT .ne. 0) or the +C xQM on the surface level is NOT 15, then set all of the event +C values xQB, xQM, xPC and xRC to missing - this will prevent +C an event from being written out in the upcoming call TO UFBINT +C --------------------------------------------------------------------- + IF(NINT(RID(2)).EQ.132 .OR. NINT(RID(2)).EQ.232) THEN + + I = 1 + CALL UFBINT(-LUBFJ,OBS_8,5,255,NLEV,'CAT POB PQM PPC PRC') + OBS=OBS_8 + IF(NLEV.GT.0) THEN + DO L=1,NLEV + IF(NINT(OBS(1,L)).EQ.0 .AND. OBS(3,L).LT.15.) THEN + PRINT 213,CTEXT(I),NINT(OBS(3,L)),L, + $ NINT(OBS(1,L)),SID,NINT(RID(2)),RID(3) + 213 FORMAT('Changed ',A11,' q.m. from ',I2,' to 15 on level ',I3, + $ ' cat ',I3,' for ID ',A6,' RTYP ',I3,' at ',F7.3,'UTC') + OBS(3,L) = 15 + ELSE + OBS(2:5,L) = BMISS + END IF + END DO + OBS_8=OBS + +C USE UFBINT TO WRITE OUT THE NEW EVENT WITH THE CHANGED SURFACE PQM - +C AN EVENT WILL NOT BE WRITTEN IF POB, PQM, PPC AND PRC ARE MISSING +C -------------------------------------------------------------------- + + CALL UFBINT(LUBFJ,OBS_8,5,NLEV,IRET,'CAT POB PQM PPC PRC') + END IF +Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + I = 2 + CALL UFBINT(-LUBFJ,OBS_8,5,255,NLEV,'CAT ZOB ZQM ZPC ZRC') + OBS=OBS_8 + IF(NLEV.GT.0) THEN + DO L=1,NLEV + IF(NINT(OBS(1,L)).EQ.0 .AND. OBS(3,L).LT.15.) THEN + PRINT 213,CTEXT(I),NINT(OBS(3,L)),L, + $ NINT(OBS(1,L)),SID,NINT(RID(2)),RID(3) + OBS(3,L) = 15 + ELSE + OBS(2:5,L) = BMISS + END IF + END DO + OBS_8=OBS + +C USE UFBINT TO WRITE OUT THE NEW EVENT WITH THE CHANGED SURFACE ZQM - +C AN EVENT WILL NOT BE WRITTEN IF ZOB, ZQM, ZPC AND ZRC ARE MISSING +C -------------------------------------------------------------------- + + CALL UFBINT(LUBFJ,OBS_8,5,NLEV,IRET,'CAT ZOB ZQM ZPC ZRC') + END IF +Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + I = 6 + CALL UFBINT(-LUBFJ,OBS_8,5,255,NLEV,'CAT TOB TQM TPC TRC') + OBS=OBS_8 + IF(NLEV.GT.0) THEN + DO L=1,NLEV + IF(NINT(OBS(1,L)).EQ.0 .AND. OBS(3,L).LT.15.) THEN + PRINT 213,CTEXT(I),NINT(OBS(3,L)),L, + $ NINT(OBS(1,L)),SID,NINT(RID(2)),RID(3) + OBS(3,L) = 15 + ELSE + OBS(2:5,L) = BMISS + END IF + END DO + OBS_8=OBS + +C USE UFBINT TO WRITE OUT THE NEW EVENT WITH THE CHANGED SURFACE TQM - +C AN EVENT WILL NOT BE WRITTEN IF TOB, TQM, TPC AND TRC ARE MISSING +C -------------------------------------------------------------------- + + CALL UFBINT(LUBFJ,OBS_8,5,NLEV,IRET,'CAT TOB TQM TPC TRC') + END IF +Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + I = 7 + CALL UFBINT(-LUBFJ,OBS_8,5,255,NLEV,'CAT QOB QQM QPC QRC') + OBS=OBS_8 + IF(NLEV.GT.0) THEN + DO L=1,NLEV + IF(NINT(OBS(1,L)).EQ.0 .AND. OBS(3,L).LT.15.) THEN + PRINT 213,CTEXT(I),NINT(OBS(3,L)),L, + $ NINT(OBS(1,L)),SID,NINT(RID(2)),RID(3) + OBS(3,L) = 15 + ELSE + OBS(2:5,L) = BMISS + END IF + END DO + OBS_8=OBS + +C FINALLY, USE UFBINT TO WRITE OUT THE NEW EVENT WITH THE CHANGED +C SURFACE QQM - AN EVENT WILL NOT BE WRITTEN IF QOB, QQM, QPC AND QRC +C ARE MISSING +C -------------------------------------------------------------------- + + CALL UFBINT(LUBFJ,OBS_8,5,NLEV,IRET,'CAT QOB QQM QPC QRC') + END IF +Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + +CAAAAAAAAAAAAAAAAAAAA + +C WRITE OUT THE SUBSET AND MOVE ON THE THE NEXT INPUT SUBSET +C ---------------------------------------------------------- + ENDIF +400 CALL WRITSB(LUBFJ) + + IKNTTYP = IKNTTYP + 1 + + CYCLE + + ENDIF + + CALL UFBCPY(LUBFI,LUBFJ) + CALL WRITSB(LUBFJ) + END DO + SUBSET_LAST = SUBSET + IRECO_LAST = IRECO + END DO + +C ALL MESSAGES IN INPUT PREPBUFR FILE HAVE BEEN READ AND PROCESSED +C ---------------------------------------------------------------- + + CALL CLOSBF(LUBFJ) + CALL CLOSBF(LUBFJ) + + print *, 'COMPLETED!!' + print * + print *, ' - number of reports of selected type(s) ', + $ 'encountered = ',ikntTYP + print * + + STOP + + END diff --git a/sorc/hafs_tools.fd/sorc/hafs_change_prepbufr/change_prepbufr_rm_typ_in_circle.f b/sorc/hafs_tools.fd/sorc/hafs_change_prepbufr/change_prepbufr_rm_typ_in_circle.f new file mode 100644 index 000000000..8126c027a --- /dev/null +++ b/sorc/hafs_tools.fd/sorc/hafs_change_prepbufr/change_prepbufr_rm_typ_in_circle.f @@ -0,0 +1,190 @@ + + PROGRAM CHANGE_PREPBUFR_RM_TYP_IN_CIRCLE + +C----------------------------------------------------------------------- +C MAIN PROGRAM CHANGE_PREPBUFR_RM_TYP_IN_CIRCLE +C +C THIS CODE WILL READ THOUGH AN INPUT PREPBUFR FILE (SPECIFIED AS +C POSITIONAL PARAMETER 1) AND REMOVE ALL REPORTS WITH A SPECIFIED +C PREPBUFR REPORT TYPE (TYP) THAT ARE WITHIN A CIRCLE DEFINED AS +C HAVING A CENTER LAT/LON (POSITIONAL PARAMETER 3 AND 4) AND A RADIUS +C (POSITIONAL PARAMETER 5) (NOTE: THERE CAN BE > 1 SPECIFIED TYP) +C ALL OTHER REPORTS ARE COPIED BACK EXACTLY "AS IS" +C +C----------------------------------------------------------------------- + + CHARACTER*8 SUBSET,SUBSET_LAST + CHARACTER*80 CLATC,CLONC,CRADC + + REAL*8 TYP_8,RID_8,XOB_8,YOB_8 + CHARACTER*8 SID + + EQUIVALENCE (RID_8,SID) + + DATA LUBFI/21/,LUBFJ/51/,IRECI/0/,IRECO/0/,IRECO_LAST/0/, + $ SUBSET_LAST/'XXXXXXXX'/,IKNTSKP/0/,IKNTKEP/0/ + +!zhang CALL GETENV('RLATC',VALUE=CLATC) + CALL GETENV('RLATC',CLATC) + IF(CLATC.EQ.' ') CALL ERREXIT(99) +!zhang CALL GETENV('RLONC',VALUE=CLONC) + CALL GETENV('RLONC',CLONC) + IF(CLONC.EQ.' ') CALL ERREXIT(99) +!zhang CALL GETENV('RRADC',VALUE=CRADC) + CALL GETENV('RRADC',CRADC) + IF(CRADC.EQ.' ') CALL ERREXIT(99) + READ(CLATC,'(F6.0)') RLATC + READ(CLONC,'(F6.0)') RLONC + READ(CRADC,'(F6.0)') RRADC + + if(RLONC.lt.0)RLONC=-RLONC + + print *, 'RLATC, RLONC, RRADC: ',RLATC, RLONC, RRADC + + CALL DATELEN(10) + CALL OPENBF(LUBFI,'IN',LUBFI) + PRINT 100, LUBFI + 100 FORMAT(/5X,'===> PREPBUFR DATA SET IN UNIT',I3,' SUCCESSFULLY ', + $ 'OPENED FOR INPUT; FIRST MESSAGES CONTAIN BUFR TABLES A,B,D'/) + + CALL OPENBF(LUBFJ,'OUT',LUBFI) + PRINT 101, LUBFJ + 101 FORMAT(/5X,'===> PREPBUFR DATA SET IN UNIT',I3,' SUCCESSFULLY', + $ ' OPENED FOR OUTPUT'/) + +C READ IN NEXT INPUT BUFR MESSAGE FROM PREPBUFR FILE +C -------------------------------------------------- + + DO WHILE(IREADMG(LUBFI,SUBSET,IDATE).EQ.0) + + CALL UFBCNT(LUBFI,IRECI,ISUB) + PRINT 102, IRECI,SUBSET,IDATE + 102 FORMAT(/5X,'===> READ IN BUFR DATA MESSAGE NUMBER ',I5,' -- ', + $ 'TABLE A ENTRY IS "',A8,'" AND DATE IS',I11/) + + CALL OPENMB(LUBFJ,SUBSET,IDATE) + CALL UFBCNT(LUBFJ,IRECO,ISUBO) + SUBSET_LAST = SUBSET + IRECO_LAST = IRECO + +C READ A SUBSET (REPORT) IN MESSAGE +C --------------------------------- + + DO WHILE(IREADSB(LUBFI).EQ.0) + + CALL UFBINT(LUBFI,TYP_8,1,1,NLEV,'TYP') + TYP = TYP_8 + CALL UFBINT(LUBFI,RID_8,1,1,NLEV,'SID') +CCCCC CALL UFBINT(LUBFI,UOB_8,1,255,NLEV_W,'UOB') +CCCCC CALL UFBINT(LUBFI,TOB_8,1,255,NLEV_M,'TOB') + CALL UFBINT(LUBFI,XOB_8,1,1,NLEV,'XOB') + XOB = XOB_8 + CALL UFBINT(LUBFI,YOB_8,1,1,NLEV,'YOB') + YOB = YOB_8 + if(nlev.ne.1) call errexit(88) +cppppp +ccc print *, 'New subset read in, TYP,XOB,YOB,SID: ', +ccc $ TYP,XOB,YOB,SID +cppppp + + RLAT=YOB + RLON=360.-XOB + CALL CHDIST(RLONC,RLATC,RLON,RLAT,RDIST) + IF(RDIST.LT.RRADC) THEN +cppppp + print *, '+++ Skipping: SID,TYP,YOB,XOB(RLON),RDIST: ', + $ sid,typ,yob,xob,'(',RLON,')',RDIST +cppppp + IKNTSKP = IKNTSKP + 1 + print *,'IKNTSKP=', IKNTSKP + print *,'mtong: TYP=', NINT(TYP) + CYCLE + ELSE +cppppp +ccc print *, 'DO NOT SKIP, NOT W/I CIRCLE' +cppppp + END IF + + IKNTKEP = IKNTKEP + 1 + CALL UFBCPY(LUBFI,LUBFJ) + CALL WRITSB(LUBFJ) + CALL UFBCNT(LUBFJ,IRECO,ISUBO) + IRECO_LAST = IRECO + SUBSET_LAST = SUBSET + END DO + SUBSET_LAST = SUBSET + IRECO_LAST = IRECO + END DO + +C ALL MESSAGES IN INPUT PREPBUFR FILE HAVE BEEN READ AND PROCESSED +C ---------------------------------------------------------------- + + CALL CLOSBF(LUBFI) + CALL CLOSBF(LUBFJ) + + print *, 'COMPLETED' + print * + print *, ' - number of reports ', + $ 'skipped = ',ikntskp + print * + print *, ' - number of reports ', + $ 'kept = ',ikntkep + print * + + STOP + + END + +C$$$ SUBPROGRAM DOCUMENTATION BLOCK +C +C SUBPROGRAM: CHDIST +C PRGMMR: D. KEYSER ORG: NP22 DATE: 2004-02-02 +C +C ABSTRACT: COMPUTES CHORD LENGTH DISTANCE FROM ONE LAT/LON POINT +C TO ANOTHER LAT/LON POINT USING THE FORMULA: +C S**2/2 = 1 - COS(Y1-Y2) + COS(Y1)*COS(Y2)*(1-COS(X1-X2)). +C +C PROGRAM HISTORY LOG: +C 1990-11-06 J. WOOLLEN -- ORIGINAL AUTHOR +C 2004-02-02 D. KEYSER -- CORRECTED SUBROUTINE ARGUMENT MISALIGNMENT +C (THIS DID NOT APPEAR TO CAUSE PROBLEMS IN OUTPUT BUT COULD CAUSE +C MEMORY CLOBBERING DOWN THE LINE SOMEWHERE) +C +C USAGE: CALL CHDIST(X1,Y1,X2,Y2,DIST) +C INPUT ARGUMENTS: +C X1 - LONGITUDE (0.-360. W) OF POINT 1 +C Y1 - LATITUDE (N+,S-) OF POINT 1 +C X2 - LONGITUDE (0.-360. W) OF POINT 2 +C Y2 - LATITUDE (N+,S-) OG POINT 2 +C +C OUTPUT ARGUMENTS: +C DIST - CHORD LENGTH DISTANCE BETWEEN POINTS (KM) +C +C REMARKS: NONE +C +C ATTRIBUTES: +C LANGUAGE: FORTRAN 90 +C MACHINE: IBM SP +C +C$$$ + SUBROUTINE CHDIST(X1,Y1,X2,Y2,DIST) + + DATA PI180/.0174532 /,RADE/6371./ + + SAVE PI180,RADE + +C COMPUTE THE DISTANCE +C -------------------- + + COSY1 = COS(Y1*PI180) + COSY2 = COS(Y2*PI180) + COSDX = COS((X1-X2)*PI180) + COSDY = COS((Y1-Y2)*PI180) + S = 1.0-COSDY+COSY1*COSY2*(1.0-COSDX) + S = SQRT(2.*S) + IF(S.LE..002) S = 0. + DIST = S*RADE + + RETURN + END + diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/CMakeLists.txt b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/CMakeLists.txt index 1633e04de..1a955366e 100644 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/CMakeLists.txt +++ b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/CMakeLists.txt @@ -24,27 +24,27 @@ find_package(bufr REQUIRED) find_package(MPI REQUIRED) set(fortran_srcs - kinds_interface.F90 - constants_interface.F90 - variable_interface.F90 - namelist_interface.F90 - diagnostics_interface.F90 - math_methods_interface.F90 - grid_methods_interface.F90 - meteo_methods_interface.F90 - bufrio_interface.F90 - json_interface.F90 - netcdf_interface.F90 - fileio_interface.F90 - time_methods_interface.F90 - bufr_obs_interface.F90 - forecast_model_interface.F90 - recon_tdr_interface.F90 - recon_vdm_interface.F90 - sonde_tempdrop_interface.F90 - observations_interface.F90 - obs_preproc_interface.F90 - main.F90) + obs_preproc/src/kinds_interface.F90 + obs_preproc/src/constants_interface.F90 + obs_preproc/src/variable_interface.F90 + obs_preproc/src/namelist_interface.F90 + obs_preproc/src/diagnostics_interface.F90 + obs_preproc/src/math_methods_interface.F90 + obs_preproc/src/grid_methods_interface.F90 + obs_preproc/src/meteo_methods_interface.F90 + obs_preproc/src/bufrio_interface.F90 + obs_preproc/src/json_interface.F90 + obs_preproc/src/netcdf_interface.F90 + obs_preproc/src/fileio_interface.F90 + obs_preproc/src/time_methods_interface.F90 + obs_preproc/src/bufr_obs_interface.F90 + obs_preproc/src/forecast_model_interface.F90 + obs_preproc/src/recon_tdr_interface.F90 + obs_preproc/src/recon_vdm_interface.F90 + obs_preproc/src/sonde_tempdrop_interface.F90 + obs_preproc/src/observations_interface.F90 + obs_preproc/src/obs_preproc_interface.F90 + obs_preproc/src/main.F90) set(exe_name hafs_obs_preproc.x) message("TYPE CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}") diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/Makefile b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/Makefile deleted file mode 100644 index 0bf867a07..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/Makefile +++ /dev/null @@ -1,71 +0,0 @@ -#======================================================================= - -#$$$ MAKEFILE DOCUMENTATION BLOCK - -# Copyright (C) 2019 Henry R. Winterbottom - -# Email: henry.winterbottom@noaa.gov - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see -# . - -# Review the README, within the top-level directory, which provides -# relevant instructions and (any) references cited by algorithms -# within this software suite. - -#======================================================================= - -SHELL=/bin/sh - -# Machine dependent compile options - -MAKE_CONF = Makefile.conf -MAKE_DEPEND = Makefile.dependency -include $(MAKE_CONF) -include $(MAKE_DEPEND) -include configure.obs-preproc - -# Make calls - -"" : - @$(MAKE) -f Makefile all - -clean: - - $(RM) $(EXEC) *.o *.mod - -# Source files - -SRCS = $(SRCSF77) $(SRCSF90) - -# Object files - -OBJS = $(SRCSF90:.F90=.o) $(SRCSF77:.f=.o) - -# Compiling rules - -.SUFFIXES : -.SUFFIXES : .F90 .f .c .o - -.F90.o : - $(FC) $(FCFFLAGS) $(LIBS) $(INCS) -c $< - -.f.o : - $(F77) $(FCFFLAGS) $(LIBS) $(INCS) -c $< - -# Compiler - -all: $(EXEC) - -$(EXEC): $(OBJS) - $(LD) $(LDFLAGS) $(OBJS) main.F90 $(LIBS) $(INCS) -lm -o ./$(EXEC) diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/Makefile.conf b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/Makefile.conf deleted file mode 100644 index a7a907154..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/Makefile.conf +++ /dev/null @@ -1,85 +0,0 @@ -#======================================================================= - -#$$$ MAKEFILE DOCUMENTATION BLOCK - -# Copyright (C) 2019 Henry R. Winterbottom - -# Email: henry.winterbottom@noaa.gov - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see -# . - -# Review the README, within the top-level directory, which provides -# relevant instructions and (any) references cited by algorithms -# within this software suite. - -#======================================================================= - -# Fortran compiler and options - -LD = $(FC) -LDFLAGS = $(FCFFLAGS) - -# Library dependencies - -LIBbufr = -L$(BUFR)/lib -lbufr -LIBfson = -L$(FSON)/lib -lfson -LIBgridprojs = -L$(GRIDPROJS)/lib -lgridprojs -LIBgridtrans = -L$(GRIDTRANS)/lib -lgridtrans -LIBkdtree = -L$(KDTREE)/lib -lkdtree -LIBnetcdf = -L$(NETCDF)/lib -lnetcdff -LIBslatec = -L$(SLATEC)/lib -lslatec -LIBsondelib = -L$(SONDELIB)/lib -lsondelib -LIBspline = -L$(SPLINE)/lib -lspline -LIBwmm = -L$(WMM)/lib -lwmm -LIBS = $(LIBbufr) $(LIBfson) $(LIBgridprojs) $(LIBgridtrans) $(LIBkdtree) $(LIBnetcdf) $(LIBslatec) $(LIBsondelib) $(LIBspline) $(LIBwmm) - -# Module dependencies - -INCbufr = -I$(BUFR)/include -INCfson = -I$(FSON)/include -INCgridprojs = -I$(GRIDPROJS)/include -INCgridtrans = -I$(GRIDTRANS)/include -INCkdtree = -I$(KDTREE)/include -INCnetcdf = -I$(NETCDF)/include -INCS = $(INCfson) $(INCgridprojs) $(INCgridtrans) $(INCkdtree) $(INCnetcdf) $(INCbufr) - -# Executable - -EXEC = obs_preproc.x - -# Source files - -SRCSF90 = kinds_interface.F90 \ - constants_interface.F90 \ - variable_interface.F90 \ - namelist_interface.F90 \ - diagnostics_interface.F90 \ - math_methods_interface.F90 \ - grid_methods_interface.F90 \ - meteo_methods_interface.F90 \ - bufrio_interface.F90 \ - json_interface.F90 \ - netcdf_interface.F90 \ - fileio_interface.F90 \ - time_methods_interface.F90 \ - bufr_obs_interface.F90 \ - forecast_model_interface.F90 \ - recon_tdr_interface.F90 \ - recon_vdm_interface.F90 \ - sonde_tempdrop_interface.F90 \ - observations_interface.F90 \ - obs_preproc_interface.F90 - -SRCSF77 = diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/Makefile.dependency b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/Makefile.dependency deleted file mode 100644 index 7896b61d0..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/Makefile.dependency +++ /dev/null @@ -1,131 +0,0 @@ -#======================================================================= - -#$$$ MAKEFILE DOCUMENTATION BLOCK - -# Copyright (C) 2018 Henry R. Winterbottom - -# Email: henry.winterbottom@noaa.gov - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see -# . - -# Review the README, within the top-level directory, which provides -# relevant instructions and (any) references cited by algorithms -# within this software suite. - -#======================================================================= - -bufr_obs_interface.o: bufr_obs_interface.F90 \ - namelist_interface.o \ - time_methods_interface.o \ - variable_interface.o - -bufrio_interface.o: bufrio_interface.F90 \ - kinds_interface.o \ - namelist_interface.o \ - variable_interface.o - -constants_interface.o: constants_interface.F90 \ - kinds_interface.o - -diagnostics_interface.o: diagnostics_interface.F90 \ - kinds_interface.o - -fileio_interface.o: fileio_interface.F90 \ - kinds_interface.o \ - namelist_interface.o \ - netcdf_interface.o \ - variable_interface.o - -forecast_model_interface.o: forecast_model_interface.F90 \ - bufrio_interface.o \ - constants_interface.o \ - fileio_interface.o \ - grid_methods_interface.o \ - kinds_interface.o \ - math_methods_interface.o \ - namelist_interface.o \ - time_methods_interface.o \ - variable_interface.o - -grid_methods_interface.o: grid_methods_interface.F90 \ - constants_interface.o \ - kinds_interface.o \ - variable_interface.o - -json_interface.o: json_interface.F90 \ - kinds_interface.o \ - variable_interface.o - -kinds_interface.o: kinds_interface.F90 - -math_methods_interface.o: math_methods_interface.F90 \ - constants_interface.o \ - kinds_interface.o \ - variable_interface.o - -meteo_methods_interface.o: meteo_methods_interface.F90 \ - constants_interface.o \ - kinds_interface.o \ - variable_interface.o - -namelist_interface.o: namelist_interface.F90 \ - kinds_interface.o \ - variable_interface.o - -netcdf_interface.o: netcdf_interface.F90 \ - kinds_interface.o \ - variable_interface.o - -observations_interface.o: observations_interface.F90 \ - forecast_model_interface.o \ - kinds_interface.o \ - bufr_obs_interface.o \ - recon_tdr_interface.o \ - recon_vdm_interface.o \ - sonde_tempdrop_interface.o - -recon_tdr_interface.o: recon_tdr_interface.F90 \ - bufrio_interface.o \ - namelist_interface.o \ - time_methods_interface.o \ - variable_interface.o - -recon_vdm_interface.o: recon_vdm_interface.F90 \ - bufrio_interface.o \ - fileio_interface.o \ - grid_methods_interface.o \ - math_methods_interface.o \ - meteo_methods_interface.o \ - namelist_interface.o \ - time_methods_interface.o \ - variable_interface.o - -sonde_tempdrop_interface.o: sonde_tempdrop_interface.F90 \ - bufrio_interface.o \ - constants_interface.o \ - fileio_interface.o \ - grid_methods_interface.o \ - kinds_interface.o \ - math_methods_interface.o \ - meteo_methods_interface.o \ - namelist_interface.o \ - time_methods_interface.o \ - variable_interface.o - -time_methods_interface.o: time_methods_interface.F90 \ - kinds_interface.o - -variable_interface.o: variable_interface.F90 \ - kinds_interface.o diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/bufr_obs_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/bufr_obs_interface.F90 deleted file mode 100644 index f7b99a6fb..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/bufr_obs_interface.F90 +++ /dev/null @@ -1,437 +0,0 @@ -module bufr_obs_interface - - !======================================================================= - - !$$$ PROGRAM DOCUMENTATION BLOCK - - ! obs-preproc :: bufr_obs_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - ! Review the README, within the top-level directory, which provides - ! relevant instructions and (any) references cited by algorithms - ! within this software suite. - - !======================================================================= - - ! Define associated modules and subroutines - - use namelist_interface - use time_methods_interface - use variable_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: bufr_obs_update - - ! Define local variables - - logical :: in_bufr_open = .false. - logical :: out_bufr_open = .false. - integer :: iret - integer, parameter :: unit_in = 10 - integer, parameter :: unit_out = 20 - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! bufr_obs_update.f90 - - ! DESCRIPTION: - - ! This is the driver-level subroutine to compute the temporal window - ! for which to parse observations and to subsequently write those - ! respective observations to an external BUFR-formatted file. - - !----------------------------------------------------------------------- - - subroutine bufr_obs_update() - - ! Define variables computed within routine - - type(timeinfo_struct) :: timeinfo - - !===================================================================== - - ! Define local variables - - call valid_times(timeinfo) - - ! Compute local variables - - call readwrite_bufrobs(bufr_obs_filename,timeinfo) - - !===================================================================== - - end subroutine bufr_obs_update - - !======================================================================= - - ! SUBROUTINE: - - ! close_bufr.f90 - - ! DESCRIPTION: - - ! This subroutine closes all open input and output files designated - ! by the unit_in and unit_out local variables, respectively. - - !----------------------------------------------------------------------- - - subroutine close_bufr() - - !===================================================================== - - ! Define local variables - - close(unit_in) - call closbf(unit_in) - close(unit_out) - call closbf(unit_out) - - !===================================================================== - - end subroutine close_bufr - - !======================================================================= - - ! SUBROUTINE: - - ! init_bufr.f90 - - ! DESCRIPTION: - - ! This subroutine initializes the BUFR file interfaces for the input - ! and output files. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the BUFR-formatted file to be parsed. - - !----------------------------------------------------------------------- - - subroutine init_bufr(filename) - - ! Define variables passed to routine - - character(len=500) :: filename - - !===================================================================== - - ! Define local variables - - call datelen(10) - if(in_bufr_open) call closbf(unit_in) - open(unit_in,file=trim(adjustl(filename)),form='unformatted', & - & status='old') - call openbf(unit_in,'IN',unit_in) - in_bufr_open = .true. - - ! Check local variable and proceed accordingly - - if(.not. out_bufr_open) then - - ! Define local variables - - open(unit_out,file=trim(adjustl(bufr_filepath)), & - & form='unformatted') - call openbf(unit_out,'OUT',unit_in) - out_bufr_open = .true. - - end if ! if(.not. out_bufr_open) - - !===================================================================== - - end subroutine init_bufr - - !======================================================================= - - ! SUBROUTINE: - - ! readwrite_bufrobs.f90 - - ! DESCRIPTION: - - ! This subroutine parses the BUFR records from a user specified file - ! and computes the time-stamp attributes; if the observation - ! time-stamp attributes occur between the user specified threshold - ! values (relative to the analysis time-stamp), the respective BUFR - ! record is written to the external file defined by the unit_out - ! local variable. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the BUFR-formatted file to be parsed. - - ! * timeinfo; a FORTRAN timeinfo_struct variable containing the - ! Julian day values corresponding to the observation wind - ! specified by the user. - - !----------------------------------------------------------------------- - - subroutine readwrite_bufrobs(filename,timeinfo) - - ! Define variables passed to routine - - type(timeinfo_struct) :: timeinfo - character(len=500) :: filename(:) - - ! Define variables computed within routine - - character(len=10) :: datestr - character(len=8) :: subset - real(r_double) :: bufrtype(6) - real(r_double) :: dhr - real(r_double) :: obs_jday - integer :: dd - integer :: hh - integer :: idate - integer :: ireadmg - integer :: ireadsb - integer :: mm - integer :: nn - integer :: nobs_copy - integer :: nobs_total - integer :: obs_idate - integer :: ss - integer :: yyyy - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - nobs_copy = 0 - nobs_total = 0 - - ! Loop through local variable - - do i = 1, nbufr_obs_files - - ! Define local variables - - if(debug) write(6,500) trim(adjustl(filename(i))) - call init_bufr(filename(i)) - - ! Loop through local variable - - do while(ireadmg(unit_in,subset,idate) .eq. 0) - - ! Define local variables - - call openmb(unit_out,subset,timeinfo%idate) - if(is_gpsrobufr) call maxout(100000) - - ! Loop through local variable - - do while(ireadsb(unit_in) .eq. 0) - - ! Define local variables - - nobs_total = nobs_total + 1 - - ! Check local variable and proceed accordingly - - if(is_gpsrobufr) then - - ! Define local variables - - call ufbint(unit_in,bufrtype,size(bufrtype),1,iret, & - & 'YEAR MNTH DAYS HOUR MINU SECO') - yyyy = int(bufrtype(1)) - mm = int(bufrtype(2)) - dd = int(bufrtype(3)) - hh = int(bufrtype(4)) - nn = int(bufrtype(5)) - ss = int(bufrtype(6)) - - ! Compute local variables - - call time_methods_julian_day(yyyy,mm,dd,hh,nn,ss, & - & obs_jday) - - end if ! if(is_gpsrobufr) - - ! Check local variable and proceed accordingly - - if(is_prepbufr) then - - ! Define local variables - - call ufbint(unit_in,bufrtype,2,1,iret,'DHR TYP') - write(datestr,'(i10)') idate - read(datestr,'(i4.4,3(i2.2))') yyyy, mm, dd, hh - nn = 0 - ss = 0 - - ! Compute local variables - - call time_methods_julian_day(yyyy,mm,dd,hh,nn,ss, & - & obs_jday) - obs_jday = obs_jday + bufrtype(1)/24.0 - - end if ! if(is_prepbufr) - - ! Check local variable and proceed accordingly - - if(is_satbufr) then - - ! Define local variables - - call ufbint(unit_in,bufrtype,size(bufrtype),1,iret, & - & 'YEAR MNTH DAYS HOUR MINU SECO') - yyyy = int(bufrtype(1)) - mm = int(bufrtype(2)) - dd = int(bufrtype(3)) - hh = int(bufrtype(4)) - nn = int(bufrtype(5)) - ss = int(bufrtype(6)) - - ! Compute local variables - - call time_methods_julian_day(yyyy,mm,dd,hh,nn,ss, & - & obs_jday) - - end if ! if(is_satbufr) - - ! Check local variable and proceed accordingly - - if((obs_jday .ge. timeinfo%minjday) .and. (obs_jday .le. & - & timeinfo%maxjday)) then - - ! Define local variables - - nobs_copy = nobs_copy + 1 - - ! Define local variables - - call ufbcpy(unit_in,unit_out) - - ! Check local variable and proceed accordingly - - if(is_prepbufr) then - - ! Compute local variables - - dhr = (timeinfo%jday - obs_jday)/24.0 - - ! Define local variables - - bufrtype(1) = dhr - call ufbint(unit_out,bufrtype(1),1,1,iret,'DHR') - - end if ! if(is_prepbufr) - - ! Define local variables - - call writsb(unit_out) - - end if ! if((obs_jday .ge. timeinfo%minjday) - ! .and. (obs_jday .le. timeinfo%maxjday)) - - end do ! do while(ireadsb(unit_in) .eq. 0) - - end do ! do while(ireadmg(unit_in,subset,idate) .eq. 0) - - end do ! do i = 1, nbufr_obs_files - - ! Define local variables - - call close_bufr() - if(debug) write(6,501) nobs_copy, nobs_total, bufr_obs_mindate, & - & bufr_obs_maxdate -500 format('READWRITE_BUFROBS: Reading BUFR file ',a,'.') -501 format('READWRITE_BUFROBS: ',i,1x,'observations of ',i,1x,' are ', & - & 'within the time-window ',a19,1x,'to ',a19,1x,'.') - - !===================================================================== - - end subroutine readwrite_bufrobs - - !======================================================================= - - ! SUBROUTINE: - - ! valid_times.f90 - - ! DESCRIPTION: - - ! This subroutine computes the Julian day values corresponding to - ! the observation window specified by the user. - - ! INPUT VARIABLES: - - ! * timeinfo; a FORTRAN timeinfo_struct variable. - - ! OUTPUT VARIABLES: - - ! * timeinfo; a FORTRAN timeinfo_struct variable containing the - ! Julian day values corresponding to the observation wind - ! specified by the user. - - !----------------------------------------------------------------------- - - subroutine valid_times(timeinfo) - - ! Define variables passed to routine - - type(timeinfo_struct) :: timeinfo - - ! Define variables computed within routine - - integer :: dd - integer :: hh - integer :: mm - integer :: nn - integer :: ss - integer :: yyyy - - !===================================================================== - - ! Define local variables - - call time_methods_date_attributes(analdate,yyyy,mm,dd,hh,nn,ss) - call time_methods_julian_day(yyyy,mm,dd,hh,nn,ss,timeinfo%jday) - write(timeinfo%idatestr,'(i4.4,i2.2,i2.2,i2.2)') yyyy, mm, dd, hh - read(timeinfo%idatestr,'(i10)') timeinfo%idate - call time_methods_date_attributes(bufr_obs_mindate,yyyy,mm,dd,hh,nn, & - & ss) - call time_methods_julian_day(yyyy,mm,dd,hh,nn,ss,timeinfo%minjday) - call time_methods_date_attributes(bufr_obs_maxdate,yyyy,mm,dd,hh,nn, & - & ss) - call time_methods_julian_day(yyyy,mm,dd,hh,nn,ss,timeinfo%maxjday) - - !===================================================================== - - end subroutine valid_times - - !======================================================================= - -end module bufr_obs_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/bufrio_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/bufrio_interface.F90 deleted file mode 100644 index 23cdd6760..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/bufrio_interface.F90 +++ /dev/null @@ -1,749 +0,0 @@ -module bufrio_interface - - !======================================================================= - - !$$$ MODULE DOCUMENTATION BLOCK - - ! obs-preproc :: bufrio_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - !======================================================================= - - ! Define associated modules and subroutines - - use kinds_interface - use namelist_interface - use variable_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: bufrio_interface_close - public :: bufrio_interface_idate - public :: bufrio_interface_nrecs - public :: bufrio_interface_open - public :: bufrio_interface_readhdrall - public :: bufrio_interface_readhdruniq - public :: bufrio_interface_write - public :: bufr_iret - - ! Define local variables - - logical :: bufr_exist = .false. - integer, parameter :: unit_in = 10 - integer, parameter :: unit_out = 20 - integer, parameter :: unit_tbl = 30 - integer :: bufr_iret - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! bufrio_interface_close.f90 - - ! DESCRIPTION: - - ! This subroutine closes the user specified BUFR file path assigned - ! to the local module variable unit_out. - - ! INPUT VARIABLES: - - ! * bufr_read; a FORTRAN logical variable indicating whether the - ! file to be closed has been opened for reading. - - ! * bufr_write; a FORTRAN logical variable indicating whether the - ! file to be closed has been opened for writing. - - !----------------------------------------------------------------------- - - subroutine bufrio_interface_close(bufr_read,bufr_write) - - ! Define variables passed to routine - - logical :: bufr_read - logical :: bufr_write - - !===================================================================== - - ! Define local variables - - if(bufr_read) then - call closbf(unit_in) - end if ! if(bufr_read) - if(bufr_write) then - close(unit_tbl) - call closmg(unit_out) - call closbf(unit_out) - end if ! if(bufr_write) - - !===================================================================== - - end subroutine bufrio_interface_close - - !======================================================================= - - ! SUBROUTINE: - - ! bufio_interface_idate.f90 - - ! DESCRIPTION: - - ! This subroutine defines the integer date string for the BUFR file. - - ! INPUT VARIABLES: - - ! * datestr; a FORTRAN character string specifying the analysis - ! date, formatted as (assuming UNIX convention) - ! 'yyyy-mm-dd_HH:MM:SS'. - - ! * bufr; a FORTRAN bufr_struct variable. - - ! OUTPUT VARIABLES: - - ! * bufr; a FORTRAN bufr_struct variable containing the 'idate' - ! variable attribute value. - - !----------------------------------------------------------------------- - - subroutine bufrio_interface_idate(datestr,bufr) - - ! Define variables passed to routine - - type(bufr_struct) :: bufr - character(len=19) :: datestr - - ! Define variables computed within routine - - character(len=10) :: strdate - integer :: dateint - integer :: strint - - !===================================================================== - - ! Define local variables - - write(strdate,'(a4,a2,a2,a2)') datestr(1:4), datestr(6:7), & - & datestr(9:10), datestr(12:13) - read(strdate,500) dateint - bufr%idate = dateint -500 format(i10) - - !===================================================================== - - end subroutine bufrio_interface_idate - - !======================================================================= - - ! SUBROUTINE: - - ! bufrio_interface_nrecs.f90 - - ! DESCRIPTION: - - ! This subroutine counts the number of BUFR messages within the user - ! specified BUFR formatted file. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the user specified BUFR file path. - - ! * tablename; a FORTRAN character string specifying the full-path - ! to the file containing the BUFR table. - - ! * bufr; a FORTRAN bufr_struct variable, containing (at minimum) - ! the variable 'idate'. - - ! * nrecs; a FORTRAN integer variable to define the number of BUFR - ! messages. - - ! OUTPUT VARIABLES: - - ! * nrecs; a FORTRAN integer variable defining the number of BUFR - ! messages within the user specified BUFR file. - - !----------------------------------------------------------------------- - - subroutine bufrio_interface_nrecs(filename,tablename,bufr) - - ! Define variables passed to routine - - type(bufr_struct) :: bufr - character(len=500) :: filename - character(len=500) :: tablename - - ! Define variables computed within routine - - character(len=8) :: msgtype - integer :: ireadmg - integer :: nrecs - - !===================================================================== - - ! Define local variables - - nrecs = 0 - call bufrio_interface_open(filename,tablename,bufr,.true.,.false., & - & .false.) - - ! Loop through local variable - - do while(ireadmg(unit_in,msgtype,bufr%idate) == 0) - - ! Define local variables - - nrecs = nrecs + 1 - - end do ! do while(ireadmg(unit_in,msgtype,bufr%idate) == 0) - - ! Define local variables - - bufr%nrecs = nrecs - call bufrio_interface_close(.true.,.false.) - - !===================================================================== - - end subroutine bufrio_interface_nrecs - - !======================================================================= - - ! SUBROUTINE: - - ! bufrio_interface_open.f90 - - ! DESCRIPTION: - - ! This subroutine checks for the existence of BUFR formatted file, - ! specified by the file path provided by the user; the BUFR table - ! provided by the user is written to the BUFR file and and the - ! respective file is prepared for the BUFR records to be written. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the user specified BUFR file path. - - ! * tablename; a FORTRAN character string specifying the full-path - ! to the file containing the BUFR table. - - ! * bufr; a FORTRAN bufr_struct variable, containing (at minimum) - ! the variable 'idate'. - - ! * bufr_read; a FORTRAN logical variable indicating whether the - ! file to be closed has been opened for reading. - - ! * bufr_write; a FORTRAN logical variable indicating whether the - ! file to be closed has been opened for writing. - - !----------------------------------------------------------------------- - - subroutine bufrio_interface_open(filename,tablename,bufr,bufr_read, & - & bufr_read_write,bufr_write) - - ! Define variables passed to routine - - type(bufr_struct) :: bufr - character(len=500) :: filename - character(len=500) :: tablename - logical :: bufr_read - logical :: bufr_read_write - logical :: bufr_write - - !===================================================================== - - ! Define local variables - - inquire(file = trim(adjustl(filename)),exist = bufr_exist) - if(bufr_read) then - call read_bufr_open(filename) - call openbf(unit_in,'IN',unit_in) - end if ! if(bufr_read) - if(bufr_read_write) then - call read_write_bufr_open(filename) - call openbf(unit_in,'IN',unit_in) - call openbf(unit_out,'OUT',unit_in) - end if ! if(bufr_read_write) - if(bufr_write) then - call write_bufr_open(filename) - call write_bufr_table(tablename) - call openmb(unit_out,bufr%subset,bufr%idate) - end if ! if(bufr_write) - - !===================================================================== - - end subroutine bufrio_interface_open - - !======================================================================= - - ! SUBROUTINE: - - ! bufrio_interface_readhdrall.f90 - - ! DESCRIPTION: - - ! This subroutine reads the user specified BUFR header string(s) and - ! returns all values for the respective header string(s). - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the user specified BUFR file path. - - ! * bufr; a FORTRAN bufr_struct variable, containing (at minimum) - ! the header strings to seek (hdstr), the total number of - ! mnuemonics (mxmn), and the total number of levels (mxlv). - - ! * bufrhdr; a FORTRAN bufrhdr variable. - - ! OUTPUT VARIABLES: - - ! * bufrhdr; a FORTRAN bufrhdr variable containing the values for - ! the user specified header string(s). - - !----------------------------------------------------------------------- - - subroutine bufrio_interface_readhdrall(filename,bufr,bufrhdr) - - ! Define variables passed to routine - - type(bufr_struct) :: bufr - type(bufrhdr_struct) :: bufrhdr - character(len=500) :: filename - - ! Define variables computed within routine - - character(len=8) :: subset - real(r_double) :: bufrtype(bufr%mxmn) - integer :: idate - integer :: ireadmg - integer :: ireadsb - integer :: nlev - integer :: nrecs - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - open(unit_in,file=trim(adjustl(filename)),form='unformatted', & - & convert='big_endian') - call openbf(unit_in,'IN',unit_in) - call readmg(unit_in,subset,bufr%idate,bufr_iret) - bufr%nrecs = 0 - - ! Loop through local variable - - msg_report1: do while(ireadmg(unit_in,subset,idate) .eq. 0) - - ! Loop through local variable - - sb_report1: do while(ireadsb(unit_in) .eq. 0) - - ! Define local variables - - call ufbint(unit_in,bufrtype,bufr%mxmn,bufr%mxlv,nlev, & - & trim(adjustl(bufr%hdstr))) - bufr%nrecs = bufr%nrecs + 1 - - end do sb_report1 ! do while(ireadsb(unit_in) .eq. 0) - - end do msg_report1 ! do while(ireadmg(unit_in,subset,idate) - ! .eq. 0) - - ! Define local variables - - call closbf(unit_in) - bufrhdr%mxmn = bufr%mxmn - bufrhdr%nrecs = bufr%nrecs - call variable_interface_setup_struct(bufrhdr) - nrecs = 0 - open(unit_in,file=trim(adjustl(filename)),form='unformatted', & - & convert='big_endian') - call openbf(unit_in,'IN',unit_in) - - ! Loop through local variable - - msg_report2: do while(ireadmg(unit_in,subset,idate) .eq. 0) - - ! Loop through local variable - - sb_report2: do while(ireadsb(unit_in) .eq. 0) - - ! Define local variables - - call ufbint(unit_in,bufrtype,bufr%mxmn,bufr%mxlv,nlev, & - & trim(adjustl(bufr%hdstr))) - nrecs = nrecs + 1 - bufrhdr%hdr(1:bufrhdr%mxmn,nrecs) = bufrtype(1:bufr%mxmn) - - end do sb_report2 ! do while(ireadsb(unit_in) .eq. 0) - - end do msg_report2 ! do while(ireadmg(unit_in,subset,idate) - ! .eq. 0) - - ! Define local variables - - call closbf(unit_in) - - !===================================================================== - - end subroutine bufrio_interface_readhdrall - - !======================================================================= - - ! SUBROUTINE: - - ! bufrio_interface_readhdruniq.f90 - - ! DESCRIPTION: - - ! This subroutine reads the user specified BUFR header string(s) and - ! returns all unique values for the respective header string(s). - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the user specified BUFR file path. - - ! * bufr; a FORTRAN bufr_struct variable, containing (at minimum) - ! the header strings to seek (hdstr), the total number of - ! mnuemonics (mxmn), and the total number of levels (mxlv). - - ! * bufrhdr; a FORTRAN bufrhdr variable. - - ! OUTPUT VARIABLES: - - ! * bufrhdr; a FORTRAN bufrhdr variable containing the unique values - ! for the user specified header string(s). - - !----------------------------------------------------------------------- - - subroutine bufrio_interface_readhdruniq(filename,bufr,bufrhdr) - - ! Define variables passed to routine - - type(bufr_struct) :: bufr - type(bufrhdr_struct) :: bufrhdr - character(len=500) :: filename - - ! Define variables computed within routine - - character(len=8) :: subset - real(r_double), dimension(:), allocatable :: bufrhdrarr - real(r_double) :: bufrtype(bufr%mxmn) - integer :: ireadmg - integer :: ireadsb - integer :: nlev - integer :: nrecs - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - open(unit_in,file=trim(adjustl(filename)),form='unformatted', & - & convert='big_endian') - call openbf(unit_in,'IN',unit_in) - nrecs = 0 - - ! Loop through local variable - - msg_report1: do while(ireadmg(unit_in,subset,bufr%idate) .eq. 0) - - ! Loop through local variable - - sb_report1: do while(ireadsb(unit_in) .eq. 0) - - ! Define local variables - - call ufbint(unit_in,bufrtype,bufr%mxmn,bufr%mxlv,nlev, & - & trim(adjustl(bufr%hdstr))) - nrecs = nrecs + 1 - - end do sb_report1 ! do while(ireadsb(unit_in) .eq. 0) - - end do msg_report1 ! do while(ireadmg(unit_in,subset,bufr%idate) - ! .eq. 0) - - ! Define local variables - - call closbf(unit_in) - - ! Allocate memory for local variables - - if(.not. allocated(bufrhdrarr)) allocate(bufrhdrarr(nrecs)) - - ! Define local variables - - open(unit_in,file=trim(adjustl(filename)),form='unformatted', & - & convert='big_endian') - call openbf(unit_in,'IN',unit_in) - bufrhdrarr = dble(spval) - nrecs = 0 - - ! Loop through local variable - - msg_report2: do while(ireadmg(unit_in,subset,bufr%idate) .eq. 0) - - ! Loop through local variable - - sb_report2: do while(ireadsb(unit_in) .eq. 0) - - ! Define local variables - - call ufbint(unit_in,bufrtype,bufr%mxmn,bufr%mxlv,nlev, & - & trim(adjustl(bufr%hdstr))) - - ! Check local variable and proceed accordingly - - if(all(bufrhdrarr(1:nrecs) .ne. bufrtype(1))) then - - ! Define local variables - - nrecs = nrecs + 1 - bufrhdrarr(nrecs) = bufrtype(1) - - end if ! if(any(bufrhdrarr(1:nrecs) .ne. bufrtype(1))) - - end do sb_report2 ! do while(ireadsb(unit_in) .eq. 0) - - end do msg_report2 ! do while(ireadmg(unit_in,subset,bufr%idate) - ! .eq. 0) - - ! Define local variables - - call closbf(unit_in) - bufrhdr%mxmn = 1 - bufrhdr%nrecs = nrecs - call variable_interface_setup_struct(bufrhdr) - - ! Loop through local variable - - do i = 1, bufrhdr%nrecs - - ! Define local variables - - bufrhdr%hdr(1:bufrhdr%mxmn,i) = bufrhdrarr(i) - - end do ! do i = 1, bufrhdr%nrecs - - ! Deallocate memory for local variables - - if(allocated(bufrhdrarr)) deallocate(bufrhdrarr) - - !===================================================================== - - end subroutine bufrio_interface_readhdruniq - - !======================================================================= - - ! SUBROUTINE: - - ! bufrio_interface_write.f90 - - ! DESCRIPTION: - - ! This subroutine writes a BUFR formatted record to an external, - ! open BUFR file. - - ! INPUT VARIABLES: - - ! * bufr; a FORTRAN bufr_struct variable containing the BUFR - ! variables describing the respective BUFR record. - - !----------------------------------------------------------------------- - - subroutine bufrio_interface_write(bufr) - - ! Define variables passed to routine - - type(bufr_struct) :: bufr - - !===================================================================== - - ! Define local variables - - call ufbint(unit_out,bufr%hdr,bufr%mxmn,1,bufr_iret,bufr%hdstr) - call ufbint(unit_out,bufr%obs,bufr%mxmn,bufr%mxlv,bufr_iret, & - & bufr%obstr) - call ufbint(unit_out,bufr%oer,bufr%mxmn,bufr%mxlv,bufr_iret, & - & bufr%oestr) - call ufbint(unit_out,bufr%qcf,bufr%mxmn,bufr%mxlv,bufr_iret, & - & bufr%qcstr) - call writsb(unit_out) - - !===================================================================== - - end subroutine bufrio_interface_write - - !======================================================================= - - ! SUBROUTINE: - - ! read_bufr_open.f90 - - ! DESCRIPTION: - - ! This subroutine opens the user specified BUFR file path and - ! assigns the open file unit to the local module variable unit_out. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the user specified BUFR file path. - - !----------------------------------------------------------------------- - - subroutine read_bufr_open(filename) - - ! Define variables passed to routine - - character(len=500) :: filename - - !===================================================================== - - ! Define local variables - - open(unit_in,file=trim(adjustl(filename)),action='read',form= & - & 'unformatted',convert='big_endian') - - !===================================================================== - - end subroutine read_bufr_open - - !======================================================================= - - ! SUBROUTINE: - - ! read_write_bufr_open.f90 - - ! DESCRIPTION: - - ! This subroutine opens the user specified BUFR file path and - ! assigns the open file unit to the local module variable unit_out. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the user specified BUFR file path. - - !----------------------------------------------------------------------- - - subroutine read_write_bufr_open(filename) - - ! Define variables passed to routine - - character(len=500) :: filename - - !===================================================================== - - ! Define local variables - - open(unit_in,file=trim(adjustl(filename)),form='unformatted', & - & action='readwrite',convert='big_endian') - - !===================================================================== - - end subroutine read_write_bufr_open - - !======================================================================= - - ! SUBROUTINE: - - ! write_bufr_tbl.f90 - - ! DESCRIPTION: - - ! This subroutine opens the user specified BUFR table and write the - ! respective BUFR table to the user specified BUFR file path. - - ! INPUT VARIABLES: - - ! * tablename; a FORTRAN character string specifying the full-path - ! to the file containing the BUFR table. - - !----------------------------------------------------------------------- - - subroutine write_bufr_table(tablename) - - ! Define variables passed to routine - - character(len=500) :: tablename - - !===================================================================== - - ! Define local variables - - open(unit_tbl,file = trim(adjustl(tablename)),action='read') - if(bufr_exist) call openbf(unit_out,'APN',unit_tbl) - if(.not. bufr_exist) call openbf(unit_out,'OUT',unit_tbl) - - !===================================================================== - - end subroutine write_bufr_table - - !======================================================================= - - ! SUBROUTINE: - - ! write_bufr_open.f90 - - ! DESCRIPTION: - - ! This subroutine opens the user specified BUFR file path and - ! assigns the open file unit to the local module variable unit_out. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the user specified BUFR file path. - - !----------------------------------------------------------------------- - - subroutine write_bufr_open(filename) - - ! Define variables passed to routine - - character(len=500) :: filename - - !===================================================================== - - ! Define local variables - - open(unit_out,file=trim(adjustl(filename)),action='write',form= & - & 'unformatted',convert='big_endian') - - !===================================================================== - - end subroutine write_bufr_open - - !======================================================================= - -end module bufrio_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/configure.obs-preproc b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/configure.obs-preproc deleted file mode 100644 index 35173fce8..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/configure.obs-preproc +++ /dev/null @@ -1,43 +0,0 @@ -#======================================================================= - -#$$$ CONFIGURE DOCUMENTATION BLOCK - -# Copyright (C) 2019 Henry R. Winterbottom - -# Email: henry.winterbottom@noaa.gov - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see -# . - -# Review the README, within the top-level directory, which provides -# relevant instructions and (any) references cited by algorithms -# within this software suite. - -#======================================================================= - -# Compiler options. - -DEBUG = ${OBS_PREPROC_DEBUG} -FCFFLAGS = ${OBS_PREPROC_FCFLAGS} $(DEBUG) - -# Compile time libraries. - -BUFR = ${NWP_LIBS} -FSON = ${NWP_LIBS} -GRIDPROJS = ${NWP_LIBS} -KDTREE = ${NWP_LIBS} -SLATEC = ${NWP_LIBS} -SONDELIB = ${NWP_LIBS} -SPLINE = ${NWP_LIBS} -WMM = ${NWP_LIBS} diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/constants_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/constants_interface.F90 deleted file mode 100644 index 044d672f0..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/constants_interface.F90 +++ /dev/null @@ -1,116 +0,0 @@ -module constants_interface - - !======================================================================= - - !$$$ MODULE DOCUMENTATION BLOCK - - ! obs-preproc :: constants_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - !======================================================================= - - ! Define associated modules and subroutines - - use kinds_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: cp_mass - public :: deg2rad - public :: earth_omega - public :: grav - public :: grav_std - public :: pi - public :: rad2deg - public :: rd - public :: rd_over_cp_mass - public :: rearth_equator - public :: rv - - !----------------------------------------------------------------------- - - ! DESCRIPTION (alphabetized): - - ! * cp_mass; a FORTRAN 4-byte real value specifying the specific - ! heat capacity of water vapor at constant pressure; units are - ! Joules per kilogram per Kelvin. - - ! * deg2rad; a FORTRAN 4-byte real value specifying the mathematical - ! constant to convert from degrees to radians; unitless. - - ! * earth_omega; a FORTRAN 4-byte real value specifying the rotation - ! rate of the Earth; units are radians per second. - - ! * grav; a FORTRAN 4-byte real value containing the acceleration - ! due to gravity; units are meters per second per second. - - ! * grav_std; a FORTRAN 4-byte real value containing the standard - ! * gravity; units are meters per second per second. - - ! * pi; a FORTRAN 4-byte real value containing the (machine - ! precision truncated) mathematical constant for atan(-1.0); - ! unitless. - - ! * rad2deg; a FORTRAN 4-byte real value specifying the mathematical - ! constant to convert from radians to degrees; unitless. - - ! * rd; a FORTRAN 4-byte real value specifying the gas constant for - ! dry air; units are Joules per Kelvin per kilogram. - - ! * rd_over_cp_mass; a FORTRAN 4-byte real value designating the - ! ratio rd/cp_mass. - - ! * rearth_equator; a FORTRAN 4-byte real value specifying the Earth - ! equatorial radius; units are meters. - - ! * rv; a FORTRAN 4-byte real value specifying the gas constant for - ! water vapor; units are Joules per Kelvin per kilogram. - - !----------------------------------------------------------------------- - - ! Define local variables - - real(r_kind), parameter :: & - & cp_mass = 1004.67_r_kind - real(r_kind), parameter :: & - & earth_omega = 7.292115e-5_r_kind - real(r_kind), parameter :: & - & grav = 9.80665e0_r_kind - real(r_kind), parameter :: & - & grav_std = 9.80665e0_r_kind - real(r_kind), parameter :: & - & pi = acos(-1.0) - real(r_kind), parameter :: & - & deg2rad = pi/180.0_r_kind - real(r_kind), parameter :: & - & rad2deg = 1.0/deg2rad - real(r_kind), parameter :: & - & rd = 2.8705e2_r_kind - real(r_kind), parameter :: & - & rd_over_cp_mass = rd/cp_mass - real(r_kind), parameter :: & - & rearth_equator = 6.37813662e6_r_kind - real(r_kind), parameter :: & - & rv = 4.6150e2_r_kind - - !======================================================================= - -end module constants_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/diagnostics_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/diagnostics_interface.F90 deleted file mode 100644 index ae3bf3898..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/diagnostics_interface.F90 +++ /dev/null @@ -1,137 +0,0 @@ -module diagnostics_interface - - !======================================================================= - - !$$$ MODULE DOCUMENTATION BLOCK - - ! obs-preproc :: diagnostics_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - !======================================================================= - - ! Define associated modules and subroutines - - use kinds_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: diagnostics_time_start - public :: diagnostics_time_stop - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! diagnostics_time_start.f90 - - ! DESCRIPTION: - - ! This subroutine calls the intrinsic subroutine cpu_time and - ! defines the elapsed CPU time in seconds. - - ! INPUT VARIABLES: - - ! * time_start; a FORTRAN 4-byte real value. - - ! OUTPUT VARIABLES: - - ! * time_start; a FORTRAN 4-byte real value specifying the elapsed - ! CPU time; units are seconds. - - !----------------------------------------------------------------------- - - subroutine diagnostics_time_start(time_start) - - ! Define variables passed to routine - - real(r_kind) :: time_start - - ! Define variables computed within routine - - character(len=100) :: cmd - - !===================================================================== - - ! Define local variables - - call get_command_argument(0,cmd) - call cpu_time(time_start) - write(6,500) trim(adjustl(cmd)) - write(6,*) '' -500 format('BEGINNING EXECUTION OF PROGRAM ',a,'.') - - !===================================================================== - - end subroutine diagnostics_time_start - - !======================================================================= - - ! SUBROUTINE: - - ! diagnostics_time_stop.f90 - - ! DESCRIPTION: - - ! This subroutine computes the total time since the user specified - ! starting time and prints a message indicating the time in - ! accordance with the optional variables provided by the user. - - ! INPUT VARIABLES: - - ! * time_start; a FORTRAN 4-byte real specifying the value returned - ! by subroutine diagnostics_time_start.f90. - - !----------------------------------------------------------------------- - - subroutine diagnostics_time_stop(time_start) - - ! Define variables passed to routine - - real(r_kind) :: time_start - - ! Define variables computed within routine - - character(len=100) :: cmd - real(r_kind) :: time_stop - - !===================================================================== - - ! Define local variables - - call get_command_argument(0,cmd) - call cpu_time(time_stop) - write(6,500) (time_stop - time_start) - write(6,*) '' - write(6,501) trim(adjustl(cmd)) -500 format('Execution time: ', f13.5, ' seconds.') -501 format('COMPLETED EXECUTION OF PROGRAM ',a,'.') - - !===================================================================== - - end subroutine diagnostics_time_stop - - !======================================================================= - -end module diagnostics_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/fileio_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/fileio_interface.F90 deleted file mode 100644 index a0a3706b6..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/fileio_interface.F90 +++ /dev/null @@ -1,1938 +0,0 @@ -module fileio_interface - - !======================================================================= - - !$$$ PROGRAM DOCUMENTATION BLOCK - - ! obs-preproc :: fileio_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - ! Review the README, within the top-level directory, which provides - ! relevant instructions and (any) references cited by algorithms - ! within this software suite. - - !======================================================================= - - ! Define associated modules and subroutines - - use gridtrans_interface - use gridtrans_fv3_interface - use json_interface - use kinds_interface - use namelist_interface - use netcdf_interface - use variable_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: fileio_interface_read - public :: fileio_interface_write - interface fileio_interface_read - module procedure read_bufr_info - module procedure read_fv3 - module procedure read_hsa - module procedure read_sonde_filenames - module procedure read_tcinfo - module procedure read_vdm - end interface fileio_interface_read - interface fileio_interface_varinfo - module procedure varinfo_sonde_meteo - end interface fileio_interface_varinfo - interface fileio_interface_write - module procedure write_hsa - module procedure write_sonde_drift_error - module procedure write_sonde_decode_table - module procedure write_sonde_meteo - end interface fileio_interface_write - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! read_bufr_info.f90 - - ! DESCRIPTION: - - ! This subroutine parses a JSON formatted file and defines the BUFR - ! record attributes as specified by the user. - - ! INPUT VARIABLES: - - ! * bufr_info; a FORTRAN bufr_info_struct variable containing the - ! BUFR information JSON file path. - - ! OUTPUT VARIABLES: - - ! * bufr_info; a FORTRAN bufr_info_struct variable containing the - ! BUFR record attributes specified by the user. - - !----------------------------------------------------------------------- - - subroutine read_bufr_info(bufr_info) - - ! Define variables passed to routine - - type(bufr_info_struct) :: bufr_info - - !===================================================================== - - ! Define local variables - - call json_interface_read(bufr_info) - - !===================================================================== - - end subroutine read_bufr_info - - !======================================================================= - - ! SUBROUTINE: - - ! read_fv3.f90 - - ! DESCRIPTION: - - ! This subroutine reads Network Common Data Format (netcdf) files - ! produced by the Finite Volume Cubed Sphere (FV3) model and defines - ! the variables within the FORTRAN fv3_struct variable. - - ! INPUT VARIABLES: - - ! * fv3; a FORTRAN fv3_struct variable. - - ! * windrotate; a FORTRAN windrotate variable. - - ! OUTPUT VARIABLES: - - ! * fv3; a FORTRAN fv3_struct variable containing both the contents - ! for the ingested FV3 netcdf files and the variables computed - ! from the respective ingested variables. - - ! * windrotate; a FORTRAN windrotate variable containing the - ! coordinate rotation values to translate the forecast model winds - ! from model space to a Earth-relative coordinate system. - - !----------------------------------------------------------------------- - - subroutine read_fv3(fv3,windrotate) - - ! Define variables passed to routine - - type(fv3_struct) :: fv3 - type(windrotate_struct) :: windrotate - - !===================================================================== - - ! Check local variable and proceed accordingly - -! if(is_global) call read_fv3_global(fv3) - if(is_regional) call read_fv3_regional(fv3,windrotate) - - !===================================================================== - - end subroutine read_fv3 - - !======================================================================= - - ! SUBROUTINE: - - ! read_fv3_global.f90 - - ! DESCRIPTION: - - ! This subroutine reads Network Common Data Format (netcdf) files - ! produced by the Finite Volume Cubed Sphere (FV3) global model grid - ! configuration and defines the variables within the FORTRAN - ! fv3_struct variable. - - ! NOTE: The FV3 3-dimensional variables are ordered from the bottom - ! to top (e.g., the top-most level within the array is the surface); - ! this subroutine reorders the 3-dimensional variables such that the - ! surface is the first level within the array. - - ! INPUT VARIABLES: - - ! * fv3; a FORTRAN fv3_struct variable. - - ! OUTPUT VARIABLES: - - ! * fv3; a FORTRAN fv3_struct variable containing both the contents - ! for the ingested FV3 netcdf files and the variables computed - ! from the respective ingested variables. - - !----------------------------------------------------------------------- - - subroutine read_fv3_global(fv3) - - ! Define variables passed to routine - - type(fv3_struct) :: fv3 - - ! Define variables computed within routine - - character(len=100) :: dimname - character(len=100) :: varname - real(r_kind), dimension(:,:,:), allocatable :: nc_real_3d - real(r_kind), dimension(:,:), allocatable :: nc_real_2d - real(r_kind), dimension(:), allocatable :: ak - real(r_kind), dimension(:), allocatable :: bk - real(r_kind), dimension(:), allocatable :: lat - real(r_kind), dimension(:), allocatable :: lon - integer :: stop_coord - integer :: strt_coord - integer :: nx - integer :: ny - integer :: nz - integer :: zcoord - - ! Define counting variables - - integer :: i, j, k, l - - !===================================================================== - - ! Define local variables - - dimname = 'lon' - call netcdf_interface_getdim(fv3_orog_filename(1),dimname,nx) - fv3%nx = nx - dimname = 'lat' - call netcdf_interface_getdim(fv3_orog_filename(1),dimname,ny) - fv3%ny = ny - dimname = 'phalf' - call netcdf_interface_getdim(fv3_static_filename,dimname,nz) - fv3%nz = (nz - 1) - fv3%ncoords = (size(fv3_orog_filename)*fv3%nx*fv3%ny) - call variable_interface_setup_struct(fv3) - - ! Allocate memory for local variables - - if(.not. allocated(nc_real_3d)) allocate(nc_real_3d(nx,ny,fv3%nz)) - if(.not. allocated(nc_real_2d)) allocate(nc_real_2d(nx,ny)) - if(.not. allocated(ak)) allocate(ak(fv3%nz)) - if(.not. allocated(bk)) allocate(bk(fv3%nz)) - if(.not. allocated(lat)) allocate(lat(fv3%ny)) - if(.not. allocated(lon)) allocate(lon(fv3%nx)) - - ! Loop through local variable - - do j = 1, size(fv3_tracer_filename) - - ! Define local variables - - strt_coord = (j - 1)*(fv3%nx*fv3%ny) + 1 - stop_coord = j*(fv3%nx*fv3%ny) - if(debug) write(6,500) trim(adjustl(fv3_tracer_filename(j))) - varname = 'sphum' - call netcdf_interface_getvar(fv3_tracer_filename(j),varname, & - & nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - fv3%q(strt_coord:stop_coord,zcoord) = & - & reshape(nc_real_3d(:,:,i), & - & shape(fv3%q(strt_coord:stop_coord,zcoord))) - - end do ! do i = 1, fv3%nz - - end do ! do j = 1, size(fv3_tracer_filename) - - ! Check local variable and proceed accordingly - - if(debug) then - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - write(6,501), trim(adjustl(varname)), zcoord, & - & minval(fv3%q(:,zcoord)), maxval(fv3%q(:,zcoord)) - - end do ! do i = 1, fv3%nz - - end if ! if(debug) - - ! Loop through local variable - - do j = 1, size(fv3_dyns_filename) - - ! Define local variables - - strt_coord = (j - 1)*(fv3%nx*fv3%ny) + 1 - stop_coord = j*(fv3%nx*fv3%ny) - if(debug) write(6,500) trim(adjustl(fv3_dyns_filename(j))) - varname = 'T' - call netcdf_interface_getvar(fv3_dyns_filename(j),varname, & - & nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - fv3%t(strt_coord:stop_coord,zcoord) = & - & reshape(nc_real_3d(:,:,i), & - & shape(fv3%t(strt_coord:stop_coord,zcoord))) - - end do ! do i = 1, fv3%nz - - end do ! do j = 1, size(fv3_dyns_filename) - - ! Check local variable and proceed accordingly - - if(debug) then - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - write(6,501), trim(adjustl(varname)), zcoord, & - & minval(fv3%t(:,zcoord)), maxval(fv3%t(:,zcoord)) - - end do ! do i = 1, fv3%nz - - end if ! if(debug) - - ! Loop through local variable - - do j = 1, size(fv3_dyns_filename) - - ! Define local variables - - strt_coord = (j - 1)*(fv3%nx*fv3%ny) + 1 - stop_coord = j*(fv3%nx*fv3%ny) - if(debug) write(6,500) trim(adjustl(fv3_dyns_filename(j))) - varname = 'ua' - call netcdf_interface_getvar(fv3_dyns_filename(j),varname, & - & nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - fv3%ua(strt_coord:stop_coord,zcoord) = & - & reshape(nc_real_3d(:,:,i), & - & shape(fv3%ua(strt_coord:stop_coord,zcoord))) - - end do ! do i = 1, fv3%nz - - end do ! do j = 1, size(fv3_dyns_filename) - - ! Check local variable and proceed accordingly - - if(debug) then - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - write(6,501), trim(adjustl(varname)), zcoord, & - & minval(fv3%ua(:,zcoord)), maxval(fv3%ua(:,zcoord)) - - end do ! do i = 1, fv3%nz - - end if ! if(debug) - - ! Loop through local variable - - do j = 1, size(fv3_dyns_filename) - - ! Define local variables - - strt_coord = (j - 1)*(fv3%nx*fv3%ny) + 1 - stop_coord = j*(fv3%nx*fv3%ny) - if(debug) write(6,500) trim(adjustl(fv3_dyns_filename(j))) - varname = 'va' - call netcdf_interface_getvar(fv3_dyns_filename(j),varname, & - & nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - fv3%va(strt_coord:stop_coord,zcoord) = & - & reshape(nc_real_3d(:,:,i), & - & shape(fv3%va(strt_coord:stop_coord,zcoord))) - - end do ! do i = 1, fv3%nz - - end do ! do j = 1, size(fv3_dyns_filename) - - ! Check local variable and proceed accordingly - - if(debug) then - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - write(6,501), trim(adjustl(varname)), zcoord, & - & minval(fv3%va(:,zcoord)), maxval(fv3%va(:,zcoord)) - - end do ! do i = 1, fv3%nz - - end if ! if(debug) - - ! Define local variables - - fv3%psfc = 0.0 - - ! Loop through local variable - - do j = 1, size(fv3_dyns_filename) - - ! Define local variables - - strt_coord = (j - 1)*(fv3%nx*fv3%ny) + 1 - stop_coord = j*(fv3%nx*fv3%ny) - if(debug) write(6,500) trim(adjustl(fv3_dyns_filename(j))) - varname = 'delp' - call netcdf_interface_getvar(fv3_dyns_filename(j),varname, & - & nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - fv3%psfc(strt_coord:stop_coord) = & - & fv3%psfc(strt_coord:stop_coord) + & - & reshape(nc_real_3d(:,:,i), & - & shape(fv3%psfc(strt_coord:stop_coord))) - - end do ! do i = 1, fv3%nz - - end do ! do j = 1, size(fv3_dyns_filename) - - ! Deallocate memory for local variables - - if(allocated(nc_real_3d)) deallocate(nc_real_3d) - - ! Define local variables - - if(debug) write(6,502) 'psfc', minval(fv3%psfc), maxval(fv3%psfc) - if(debug) write(6,500) trim(adjustl(fv3_static_filename)) - varname = 'hyam' - call netcdf_interface_getvar(fv3_static_filename,varname,ak) - varname = 'hybm' - call netcdf_interface_getvar(fv3_static_filename,varname,bk) - - ! Allocate memory for local variables - - if(.not. allocated(nc_real_3d)) allocate(nc_real_3d(nx,(ny+1),fv3%nz)) - - ! Loop through local variable - - do j = 1, size(fv3_dyns_filename) - - ! Define local variables - - strt_coord = (j - 1)*(fv3%nx*fv3%ny) + 1 - stop_coord = j*(fv3%nx*fv3%ny) - if(debug) write(6,500) trim(adjustl(fv3_dyns_filename(j))) - varname = 'u' - call netcdf_interface_getvar(fv3_dyns_filename(j),varname, & - & nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - fv3%u(:,:,zcoord) = nc_real_3d(:,:,i) - - end do ! do i = 1, fv3%nz - - end do ! do j = 1, size(fv3_dyns_filename) - - ! Check local variable and proceed accordingly - - if(debug) then - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - write(6,501), trim(adjustl(varname)), zcoord, & - & minval(fv3%u(:,:,zcoord)), maxval(fv3%u(:,:,zcoord)) - - end do ! do i = 1, fv3%nz - - end if ! if(debug) - - ! Deallocate memory for local variables - - if(allocated(nc_real_3d)) deallocate(nc_real_3d) - - ! Allocate memory for local variables - - if(.not. allocated(nc_real_3d)) allocate(nc_real_3d((nx+1),ny,fv3%nz)) - - ! Loop through local variable - - do j = 1, size(fv3_dyns_filename) - - ! Define local variables - - strt_coord = (j - 1)*(fv3%nx*fv3%ny) + 1 - stop_coord = j*(fv3%nx*fv3%ny) - if(debug) write(6,500) trim(adjustl(fv3_dyns_filename(j))) - varname = 'v' - call netcdf_interface_getvar(fv3_dyns_filename(j),varname, & - & nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - fv3%v(:,:,zcoord) = nc_real_3d(:,:,i) - - end do ! do i = 1, fv3%nz - - end do ! do j = 1, size(fv3_dyns_filename) - - ! Check local variable and proceed accordingly - - if(debug) then - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - write(6,501), trim(adjustl(varname)), zcoord, & - & minval(fv3%v(:,:,zcoord)), maxval(fv3%v(:,:,zcoord)) - - end do ! do i = 1, fv3%nz - - end if ! if(debug) - - ! Deallocate memory for local variables - - if(allocated(nc_real_3d)) deallocate(nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - - ! Compute local variables - - fv3%p(:,zcoord) = ak(i)*1.0e5 + bk(i)*fv3%psfc(:) - if(debug) write(6,501), 'P', zcoord, minval(fv3%p(:,zcoord)), & - & maxval(fv3%p(:,zcoord)) - - end do ! do i = 1, fv3%nz - - ! Loop through local variable - - do i = 1, size(fv3_orog_filename) - - ! Define local variables - - strt_coord = (i - 1)*(fv3%nx*fv3%ny) + 1 - stop_coord = i*(fv3%nx*fv3%ny) - if(debug) write(6,500) trim(adjustl(fv3_orog_filename(i))) - varname = 'lat' - call netcdf_interface_getvar(fv3_orog_filename(i),varname,lat) - varname = 'lon' - call netcdf_interface_getvar(fv3_orog_filename(i),varname,lon) - l = strt_coord - - ! Loop through local variable - - do j = 1, fv3%ny - - ! Loop through local variable - - do k = 1, fv3%nx - - ! Define local variables - - fv3%lat(l) = lat(j) - fv3%lon(l) = lon(k) - l = l + 1 - - end do ! do k = 1, fv3%nx - - end do ! do j = 1, fv3%ny - - ! Define local variables - - varname = 'slmsk' - call netcdf_interface_getvar(fv3_orog_filename(i),varname, & - & nc_real_2d) - fv3%slmsk(strt_coord:stop_coord) = & - & reshape(nc_real_2d,shape(fv3%slmsk(strt_coord:stop_coord))) - - end do ! do i = 1, size(fv3_orog_filename) - - ! Define local variables - - if(debug) write(6,502) 'lat', minval(fv3%lat), maxval(fv3%lat) - if(debug) write(6,502) 'lon', minval(fv3%lon), maxval(fv3%lon) - if(debug) write(6,502) 'slmsk', minval(fv3%slmsk), maxval(fv3%slmsk) - - ! Deallocate memory for local variables - - if(allocated(nc_real_3d)) deallocate(nc_real_3d) - if(allocated(nc_real_2d)) deallocate(nc_real_2d) - if(allocated(ak)) deallocate(ak) - if(allocated(bk)) deallocate(bk) - if(allocated(lat)) deallocate(lat) - if(allocated(lon)) deallocate(lon) - - ! Define local variables - -500 format(/,'READ_FV3_GLOBAL: Reading file ',a,'.',/) -501 format('READ_FV3_GLOBAL: Variable/Level/Min/Max: ',a,1x,i3.3, & - & 2(1x,f13.5)) -502 format('READ_FV3_GLOBAL: Variable/Min/Max: ',a,2(1x,f13.5)) - - !===================================================================== - - end subroutine read_fv3_global - - !======================================================================= - - ! SUBROUTINE: - - ! read_fv3_regional.f90 - - ! DESCRIPTION: - - ! This subroutine reads Network Common Data Format (netcdf) files - ! produced by the Finite Volume Cubed Sphere (FV3) regional model - ! grid configuration and defines the variables within the FORTRAN - ! fv3_struct variable. - - ! NOTE: The FV3 3-dimensional variables are ordered from the bottom - ! to top (e.g., the top-most level within the array is the surface); - ! this subroutine reorders the 3-dimensional variables such that the - ! surface is the first level within the array. - - ! INPUT VARIABLES: - - ! * fv3; a FORTRAN fv3_struct variable. - - ! * windrotate; a FORTRAN windrotate variable. - - ! OUTPUT VARIABLES: - - ! * fv3; a FORTRAN fv3_struct variable containing both the contents - ! for the ingested FV3 netcdf files and the variables computed - ! from the respective ingested variables. - - ! * windrotate; a FORTRAN windrotate variable containing the - ! coordinate rotation values to translate the forecast model winds - ! from model space to a Earth-relative coordinate system. - - !----------------------------------------------------------------------- - - subroutine read_fv3_regional(fv3,windrotate) - - ! Define variables passed to routine - - type(fv3_struct) :: fv3 - type(windrotate_struct) :: windrotate - - ! Define variables computed within routine - - type(fv3_gridtrans_struct) :: fv3_gridtrans - character(len=100) :: dimname - character(len=100) :: varname - real(r_kind), dimension(:,:,:), allocatable :: nc_real_3d - real(r_kind), dimension(:,:), allocatable :: nc_real_2d - real(r_kind), dimension(:), allocatable :: ak - real(r_kind), dimension(:), allocatable :: bk - integer :: nx - integer :: ny - integer :: nz - integer :: zcoord - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - dimname = 'lon' - call netcdf_interface_getdim(fv3_orog_filename(1),dimname,nx) - fv3%nx = nx - dimname = 'lat' - call netcdf_interface_getdim(fv3_orog_filename(1),dimname,ny) - fv3%ny = ny - dimname = 'phalf' - call netcdf_interface_getdim(fv3_static_filename,dimname,nz) - fv3%nz = (nz - 1) - call variable_interface_setup_struct(fv3) - - ! Allocate memory for local variables - - if(.not. allocated(nc_real_3d)) allocate(nc_real_3d(nx,ny,fv3%nz)) - if(.not. allocated(nc_real_2d)) allocate(nc_real_2d(nx,ny)) - if(.not. allocated(ak)) allocate(ak(fv3%nz)) - if(.not. allocated(bk)) allocate(bk(fv3%nz)) - - ! Define local variables - - if(debug) write(6,500) trim(adjustl(fv3_tracer_filename(1))) - varname = 'sphum' - call netcdf_interface_getvar(fv3_tracer_filename(1),varname, & - & nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - fv3%q(:,zcoord) = reshape(nc_real_3d(:,:,i), & - & shape(fv3%q(:,zcoord))) - if(debug) write(6,501), trim(adjustl(varname)), zcoord, & - & minval(fv3%q(:,zcoord)), maxval(fv3%q(:,zcoord)) - - end do ! do i = 1, fv3%nz - - ! Define local variables - - if(debug) write(6,500) trim(adjustl(fv3_dyns_filename(1))) - varname = 'T' - call netcdf_interface_getvar(fv3_dyns_filename(1),varname, & - & nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - fv3%t(:,zcoord) = reshape(nc_real_3d(:,:,i), & - & shape(fv3%t(:,zcoord))) - if(debug) write(6,501), trim(adjustl(varname)), zcoord, & - & minval(fv3%t(:,zcoord)), maxval(fv3%t(:,zcoord)) - - end do ! do i = 1, fv3%nz - - ! Define local variables - - if(debug) write(6,500) trim(adjustl(fv3_dyns_filename(1))) - varname = 'ua' - call netcdf_interface_getvar(fv3_dyns_filename(1),varname, & - & nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - fv3%ua(:,zcoord) = reshape(nc_real_3d(:,:,i), & - & shape(fv3%ua(:,zcoord))) - if(debug) write(6,501), trim(adjustl(varname)), zcoord, & - & minval(fv3%ua(:,zcoord)), maxval(fv3%ua(:,zcoord)) - - end do ! do i = 1, fv3%nz - - ! Define local variables - - if(debug) write(6,500) trim(adjustl(fv3_dyns_filename(1))) - varname = 'va' - call netcdf_interface_getvar(fv3_dyns_filename(1),varname, & - & nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - fv3%va(:,zcoord) = reshape(nc_real_3d(:,:,i), & - & shape(fv3%va(:,zcoord))) - if(debug) write(6,501), trim(adjustl(varname)), zcoord, & - & minval(fv3%va(:,zcoord)), maxval(fv3%va(:,zcoord)) - - end do ! do i = 1, fv3%nz - - ! Define local variables - - if(debug) write(6,500) trim(adjustl(fv3_dyns_filename(1))) - varname = 'delp' - call netcdf_interface_getvar(fv3_dyns_filename(1),varname, & - & nc_real_3d) - fv3%psfc = 0.0 - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - fv3%psfc = fv3%psfc + reshape(nc_real_3d(:,:,i),shape(fv3%psfc)) - - end do ! do i = 1, fv3%nz - - ! Define local variables - - if(debug) write(6,502) 'psfc', minval(fv3%psfc), maxval(fv3%psfc) - - ! Deallocate memory for local variables - - if(allocated(nc_real_3d)) deallocate(nc_real_3d) - - ! Allocate memory for local variables - - if(.not. allocated(nc_real_3d)) & - & allocate(nc_real_3d(fv3%nx,(fv3%ny + 1),fv3%nz)) - - ! Define local variables - - if(debug) write(6,500) trim(adjustl(fv3_dyns_filename(1))) - varname = 'u' - call netcdf_interface_getvar(fv3_dyns_filename(1),varname, & - & nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - fv3%u(:,:,zcoord) = nc_real_3d(:,:,i) - if(debug) write(6,501), trim(adjustl(varname)), zcoord, & - & minval(fv3%u(:,:,zcoord)), maxval(fv3%u(:,:,zcoord)) - - end do ! do i = 1, fv3%nz - - ! Deallocate memory for local variables - - if(allocated(nc_real_3d)) deallocate(nc_real_3d) - - ! Allocate memory for local variables - - if(.not. allocated(nc_real_3d)) & - & allocate(nc_real_3d((fv3%nx + 1),fv3%ny,fv3%nz)) - - ! Define local variables - - if(debug) write(6,500) trim(adjustl(fv3_dyns_filename(1))) - varname = 'v' - call netcdf_interface_getvar(fv3_dyns_filename(1),varname, & - & nc_real_3d) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - fv3%v(:,:,zcoord) = nc_real_3d(:,:,i) - if(debug) write(6,501), trim(adjustl(varname)), zcoord, & - & minval(fv3%v(:,:,zcoord)), maxval(fv3%v(:,:,zcoord)) - - end do ! do i = 1, fv3%nz - - ! Deallocate memory for local variables - - if(allocated(nc_real_3d)) deallocate(nc_real_3d) - - ! Define local variables - - if(debug) write(6,500) trim(adjustl(fv3_static_filename)) - varname = 'hyam' - call netcdf_interface_getvar(fv3_static_filename,varname,ak) - varname = 'hybm' - call netcdf_interface_getvar(fv3_static_filename,varname,bk) - - ! Loop through local variable - - do i = 1, fv3%nz - - ! Define local variables - - zcoord = (fv3%nz - i) + 1 - - ! Compute local variables - - fv3%p(:,zcoord) = ak(i)*1.0e5 + bk(i)*fv3%psfc(:) - if(debug) write(6,501), 'P', zcoord, minval(fv3%p(:,zcoord)), & - & maxval(fv3%p(:,zcoord)) - - end do ! do i = 1, fv3%nz - - ! Define local variables - - fv3_gridtrans%nx = fv3%nx - fv3_gridtrans%ny = fv3%ny - call fv3_gridtrans_setup(fv3_gridtrans) - if(debug) write(6,500) trim(adjustl(fv3_gridspec_filename(1))) - varname = 'grid_lat' - call netcdf_interface_getvar(fv3_gridspec_filename(1),varname, & - & fv3_gridtrans%lat) - varname = 'grid_latt' - call netcdf_interface_getvar(fv3_gridspec_filename(1),varname, & - & fv3_gridtrans%latt) - varname = 'grid_lon' - call netcdf_interface_getvar(fv3_gridspec_filename(1),varname, & - & fv3_gridtrans%lon) - varname = 'grid_lont' - call netcdf_interface_getvar(fv3_gridspec_filename(1),varname, & - & fv3_gridtrans%lont) - fv3_gridtrans%grid_ratio = grid_ratio - - ! Compute local variables - - call fv3_gridtrans_anlgrid(fv3_gridtrans) - - ! Define local variables - - windrotate%nx = fv3_gridtrans%nx - windrotate%ny = fv3_gridtrans%ny - call windrotate_setup(windrotate) - - ! Compute local variables - - call fv3_windrotate_compute(fv3_gridtrans,windrotate) - - ! Define local variables - - fv3%lat = fv3_gridtrans%lat_in - if(debug) write(6,502) 'latitude', minval(fv3%lat), maxval(fv3%lat) - fv3%lon = fv3_gridtrans%lon_in - if(debug) write(6,502) 'longitude', minval(fv3%lon), maxval(fv3%lon) - - ! Deallocate memory for local variables - - call fv3_gridtrans_cleanup(fv3_gridtrans) - - ! Define local variables - - if(debug) write(6,500) trim(adjustl(fv3_orog_filename(1))) - varname = 'slmsk' - call netcdf_interface_getvar(fv3_orog_filename(1),varname,nc_real_2d) - fv3%slmsk = reshape(nc_real_2d,shape(fv3%slmsk)) - if(debug) write(6,502) trim(adjustl(varname)), minval(fv3%slmsk), & - & maxval(fv3%slmsk) - - ! Deallocate memory for local variables - - if(allocated(nc_real_3d)) deallocate(nc_real_3d) - if(allocated(nc_real_2d)) deallocate(nc_real_2d) - if(allocated(ak)) deallocate(ak) - if(allocated(bk)) deallocate(bk) - - ! Define local variables - -500 format(/,'READ_FV3_REGIONAL: Reading file ',a,'.',/) -501 format('READ_FV3_REGIONAL: Variable/Level/Min/Max: ',a,1x,i3.3, & - & 2(1x,f13.5)) -502 format('READ_FV3_REGIONAL: Variable/Min/Max: ',a,2(1x,f13.5)) - - !===================================================================== - - end subroutine read_fv3_regional - - !======================================================================= - - ! SUBROUTINE: - - ! read_hsa.f90 - - ! DESCRIPTION: - - ! This subroutine reads a National Oceanic and Atmospheric - ! Administration (NOAA) Atlantic Oceanographic and Meteorological - ! Laboratory (AOML) Hurricane Research Division (HRD) HRD Spline - ! Analysis (HSA) formatted observation file. - - ! INPUT VARIABLES: - - ! * hsa; a FORTRAN hsa_struct variable. - - ! OUTPUT VARIABLES: - - ! * hsa; a FORTRAN hsa_struct variable containing the HSA file - ! contents. - - !----------------------------------------------------------------------- - - subroutine read_hsa(hsa) - - ! Define variables passed to routine - - type(hsa_struct) :: hsa - - ! Define variables computed within routine - - real(r_kind) :: dummy - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - hsa%nz = 0 - open(99,file=trim(adjustl(hsa%filename)),form='formatted') -1000 read(99,*,end=1001) dummy - hsa%nz = hsa%nz + 1 - goto 1000 -1001 continue - close(99) - call variable_interface_setup_struct(hsa) - open(99,file=trim(adjustl(hsa%filename)),form='formatted') - - ! Loop through local variable - - do i = 1, hsa%nz - - ! Define local variables - - read(99,500,err=1002) hsa%wx(i), hsa%yymmdd(i), hsa%gmt(i), & - & hsa%lat(i), hsa%lon(i), hsa%p(i), hsa%t(i), hsa%rh(i), & - & hsa%z(i), hsa%u(i), hsa%v(i), hsa%tail(i) - - end do ! do i = 1, hsa%nz - - ! Define local variables - - close(99) - return -1002 continue -500 format(i2,1x,f7.0,1x,i4,1x,2(f7.3,1x),3(f6.1,1x),f7.1,2(f6.1,1x),a4) - - !===================================================================== - - end subroutine read_hsa - - !======================================================================= - - ! SUBROUTINE: - - ! read_sonde_filenames.f90 - - ! DESCRIPTION: - - ! This subroutine reads into an array sonde filename pathes. - - ! INPUT VARIABLES: - - ! * sonde; a FORTRAN sonde_struct variable. - - ! OUTPUT VARIABLES: - - ! * sonde; a FORTRAN sonde_struct variable containing an array of - ! sonde file pathes. - - !----------------------------------------------------------------------- - - subroutine read_sonde_filenames(sonde) - - ! Define variables passed to routine - - type(sonde_struct) :: sonde - - ! Define variables computed within routine - - character(len=500) :: dummy - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - sonde%nsondes = 0 - open(99,file=trim(adjustl(sonde_filelist)),form='formatted') -1000 read(99,*,end=1001) dummy - sonde%nsondes = sonde%nsondes + 1 - goto 1000 -1001 continue - close(99) - - ! Define local variables - - call variable_interface_setup_struct(sonde) - - ! Define local variables - - open(99,file=trim(adjustl(sonde_filelist)),form='formatted') - - ! Loop through local variable - - do i = 1, sonde%nsondes - - ! Define local variables - - read(99,*) sonde%filename(i) - if(debug) write(6,500) trim(adjustl(sonde%filename(i))) - - end do ! do i = 1, sonde%nsondes - - ! Define local variables - - close(99) -500 format('READ_SONDE_FILENAMES: Reading in file ',a,' to be processed.') - - !===================================================================== - - end subroutine read_sonde_filenames - - !======================================================================= - - ! SUBROUTINE: - - ! read_tcinfo.f90 - - ! DESCRIPTION: - - ! This subroutine ingests an external file containing tropical - ! cyclone information required to generate synthetic, relocated - ! observations. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the path to the - ! TC information file. - - ! * tcinfo; a FORTRAN tcinfo_struct variable. - - ! OUTPUT VARIABLES: - - ! * tcinfo; a FORTRAN tcinfo_struct variable now containing the - ! tropical cyclone attributes retrieved from the user specified - ! file. - - !----------------------------------------------------------------------- - - subroutine read_tcinfo(filename,tcinfo) - - ! Define variables passed to routine - - type(tcinfo_struct), dimension(:), allocatable :: tcinfo - character(len=500) :: filename - - ! Define variables computed within routine - - character(len=1) :: dummy - integer :: ntcs - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - ntcs = 0 - open(99,file=trim(adjustl(filename)),form='formatted') -1000 read(99,*,end=1001) dummy - ntcs = ntcs + 1 - goto 1000 -1001 continue - close(99) - - ! Allocate memory for local variables - - if(.not. allocated(tcinfo)) allocate(tcinfo(ntcs)) - - ! Define local variables - - open(99,file=trim(adjustl(filename)),form='formatted') - - ! Loop through local variable - - do i = 1, ntcs - - ! Define local variables - - read(99,*) tcinfo(i)%id, tcinfo(i)%obs_clat, tcinfo(i)%mdl_clat, & - & tcinfo(i)%obs_clon, tcinfo(i)%mdl_clon, tcinfo(i)%obs_pcen, & - & tcinfo(i)%mdl_pcen, tcinfo(i)%obs_vmax, tcinfo(i)%mdl_vmax - - ! Check local variable and proceed accordingly - - if(debug) then - - ! Define local variables - - write(6,'(/)') - write(6,501) - write(6,500) tcinfo(i)%id, tcinfo(i)%obs_clat, & - & tcinfo(i)%mdl_clat, tcinfo(i)%obs_clon, & - & tcinfo(i)%mdl_clon, tcinfo(i)%obs_pcen, & - & tcinfo(i)%mdl_pcen, tcinfo(i)%obs_vmax, & - & tcinfo(i)%mdl_vmax - - end if ! if(debug) - - ! Check local variable and proceed accordingly - - if(is_fv3) then - - ! Define local variables - - tcinfo(i)%mdl_clon = tcinfo(i)%mdl_clon + 360.0 - tcinfo(i)%obs_clon = tcinfo(i)%obs_clon + 360.0 - - end if ! if(is_fv3) - - end do ! do i = 1, ntcs - - ! Define local variables - - close(99) -500 format(a3,8(1x,f13.5)) -501 format('READ_TCINFO: Read the following TC information record:') - - !===================================================================== - - end subroutine read_tcinfo - - !======================================================================= - - ! SUBROUTINE: - - ! read_vdm.f90 - - ! DESCRIPTION: - - ! This subroutine ingests formatted vortex data message (VDM) files - ! and populates the FORTRAN vdm_struct variable arrays. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the - - ! * vdm; a FORTRAN vdm_struct variable. - - ! OUTPUT VARIABLES: - - ! * vdm; a FORTRAN vdm_struct variable now containing the vortex - ! data message (VDM) attributes retrieved from the user specified - ! files. - - !----------------------------------------------------------------------- - - subroutine read_vdm(filename,vdm) - - ! Define variables passed to routine - - type(vdm_struct) :: vdm - character(len=500) :: filename - - ! Define variables computed within routine - - character(len=500) :: vdm_filename - character(len=1) :: dummy - integer :: nobs - - ! Define counting variables - - integer :: i, j - - !===================================================================== - - ! Define local variables - - vdm%nvdm = 0 - vdm%nobs = 0 - open(99,file=trim(adjustl(filename)),form='formatted') -1000 read(99,*,end=1003) vdm_filename - vdm%nvdm = vdm%nvdm + 1 - nobs = 0 - open(98,file=trim(adjustl(vdm_filename)),form='formatted') -1001 read(98,*,end=1002) dummy - nobs = nobs + 1 - goto 1001 -1002 continue - vdm%nobs = max(vdm%nobs,(nobs - 1)) - goto 1000 -1003 continue - close(99) - call variable_interface_setup_struct(vdm) - open(99,file=trim(adjustl(filename)),form='formatted') - - ! Check local variable and proceed accordingly - - if(debug) write(6,'(/)') - - ! Loop through local variable - - do i = 1, size(vdm%filename) - - ! Define local variables - - read(99,*) vdm%filename(i) - - ! Check local variable and proceed accordingly - - if(debug) write(6,500) trim(adjustl(vdm%filename(i))) - - end do ! do i = 1, size(vdm%filename) - - ! Check local variable and proceed accordingly - - if(debug) write(6,'(/)') - - ! Define local variables - - close(99) - - ! Loop through local variable - - do i = 1, size(vdm%filename) - - ! Define local variables - - open(99,file=trim(adjustl(vdm%filename(i))),form='formatted') - read(99,*) vdm%fix_time(i), vdm%fix_lat(i), vdm%fix_lon(i) - - ! Check local variable and proceed accordingly - - if(vdm%fix_lat(i) .eq. vdm_spval) vdm%fix_lat(i) = spval - if(vdm%fix_lon(i) .eq. vdm_spval) vdm%fix_lon(i) = spval - - ! Loop through local variable - - do j = 1, vdm%nobs - - ! Define local variables - - read(99,*,end=1004) vdm%obs_time(i,j), vdm%obs_plev(i,j), & - & vdm%obs_alt(i,j), vdm%obs_dist(i,j), vdm%obs_head(i,j), & - & vdm%obs_wdir(i,j), vdm%obs_wspd(i,j) - - ! Check local variable and proceed accordingly - - if(vdm%obs_plev(i,j) .eq. vdm_spval) vdm%obs_plev(i,j) = spval - if(vdm%obs_alt(i,j) .eq. vdm_spval) vdm%obs_alt(i,j) = spval - if(vdm%obs_dist(i,j) .eq. vdm_spval) vdm%obs_dist(i,j) = spval - if(vdm%obs_head(i,j) .eq. vdm_spval) vdm%obs_head(i,j) = spval - if(vdm%obs_wdir(i,j) .eq. vdm_spval) vdm%obs_wdir(i,j) = spval - if(vdm%obs_wspd(i,j) .eq. vdm_spval) vdm%obs_wspd(i,j) = spval - - end do ! do j = 1, vdm%nobs - - ! Define local variables - -1004 continue - close(99) - - end do ! do i = 1, size(vdm%filename) - -500 format('READ_VDM: Found vortex data message file ', a,'.') - - !===================================================================== - - end subroutine read_vdm - - !======================================================================= - - ! SUBROUTINE: - - ! varinfo_sonde_meteo.f90 - - ! DESCRIPTION: - - ! This subroutine defines the FORTRAN varinfo_struct variable used - ! to write the appropriate variables contained within the FORTRAN - ! meteo_struct variable to external file formats. - - ! INPUT VARIABLES: - - ! * meteo; a FORTRAN meteo_struct variable. - - ! * varinfo; a FORTRAN varinfo_struct variable specifying the - ! appropriate fields for external file formats. - - ! OUTPUT VARIABLES: - - ! * varinfo; a FORTRAN varinfo_struct variable specifying the - ! appropriate fields for external file formats. - - !----------------------------------------------------------------------- - - subroutine varinfo_sonde_meteo(meteo,varinfo) - - ! Define variables passed to routine - - type(meteo_struct) :: meteo - type(varinfo_struct) :: varinfo - - ! Define variables computed within routine - - character(len=10), dimension(:), allocatable :: dimname - integer, dimension(:), allocatable :: dimval - integer, dimension(:), allocatable :: dimid - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - varinfo%ndims = 1 - varinfo%nvars = 14 - varinfo%nattrs = 2 - call variable_interface_setup_struct(varinfo) - - ! Allocate memory for local variables - - if(.not. allocated(dimname)) allocate(dimname(varinfo%ndims)) - if(.not. allocated(dimval)) allocate(dimval(varinfo%ndims)) - if(.not. allocated(dimid)) allocate(dimid(varinfo%ndims)) - - ! Define local variables - - dimname(1) = 'nz' - dimval(1) = meteo%nz - - ! Loop through local variable - - do i = 1, varinfo%ndims - - ! Define local variables - - varinfo%dimval(i) = dimval(i) - varinfo%dimname(i) = dimname(i) - dimid(i) = i - - end do ! do i = 1, varinfo%ndims - - ! Define local variables - - varinfo%varattrs(1,1,1) = 'title' - varinfo%varattrs(1,1,2) = 'Dewpoint Temperature' - varinfo%varattrs(1,2,1) = 'units' - varinfo%varattrs(1,2,2) = 'Kelvin' - varinfo%varname(1) = 'dwpt' - varinfo%varndims(1) = 1 - varinfo%varnattrs(1) = 2 - varinfo%vartype(1) = 'double' - varinfo%vardimid(1,1) = dimid(1) - varinfo%varattrs(2,1,1) = 'title' - varinfo%varattrs(2,1,2) = 'Latitude' - varinfo%varattrs(2,2,1) = 'units' - varinfo%varattrs(2,2,2) = 'degrees' - varinfo%varname(2) = 'lat' - varinfo%varndims(2) = 1 - varinfo%varnattrs(2) = 2 - varinfo%vartype(2) = 'double' - varinfo%vardimid(2,1) = dimid(1) - varinfo%varattrs(3,1,1) = 'title' - varinfo%varattrs(3,1,2) = 'Longitude' - varinfo%varattrs(3,2,1) = 'units' - varinfo%varattrs(3,2,2) = 'degrees' - varinfo%varname(3) = 'lon' - varinfo%varndims(3) = 1 - varinfo%varnattrs(3) = 2 - varinfo%vartype(3) = 'double' - varinfo%vardimid(3,1) = dimid(1) - varinfo%varattrs(4,1,1) = 'title' - varinfo%varattrs(4,1,2) = 'Pressure' - varinfo%varattrs(4,2,1) = 'units' - varinfo%varattrs(4,2,2) = 'Pascals' - varinfo%varname(4) = 'p' - varinfo%varndims(4) = 1 - varinfo%varnattrs(4) = 2 - varinfo%vartype(4) = 'double' - varinfo%vardimid(4,1) = dimid(1) - varinfo%varattrs(5,1,1) = 'title' - varinfo%varattrs(5,1,2) = 'Water Vapor Mixing Ratio' - varinfo%varattrs(5,2,1) = 'units' - varinfo%varattrs(5,2,2) = 'kilograms per kilogram' - varinfo%varname(5) = 'q' - varinfo%varndims(5) = 1 - varinfo%varnattrs(5) = 2 - varinfo%vartype(5) = 'double' - varinfo%vardimid(5,1) = dimid(1) - varinfo%varattrs(6,1,1) = 'title' - varinfo%varattrs(6,1,2) = 'Relative Humidity' - varinfo%varattrs(6,2,1) = 'units' - varinfo%varattrs(6,2,2) = '%' - varinfo%varname(6) = 'rh' - varinfo%varndims(6) = 1 - varinfo%varnattrs(6) = 2 - varinfo%vartype(6) = 'double' - varinfo%vardimid(6,1) = dimid(1) - varinfo%varattrs(7,1,1) = 'title' - varinfo%varattrs(7,1,2) = 'Temperature' - varinfo%varattrs(7,2,1) = 'units' - varinfo%varattrs(7,2,2) = 'Kelvin' - varinfo%varname(7) = 't' - varinfo%varndims(7) = 1 - varinfo%varnattrs(7) = 2 - varinfo%vartype(7) = 'double' - varinfo%vardimid(7,1) = dimid(1) - varinfo%varattrs(8,1,1) = 'title' - varinfo%varattrs(8,1,2) = 'Zonal Wind' - varinfo%varattrs(8,2,1) = 'units' - varinfo%varattrs(8,2,2) = 'meters per second' - varinfo%varname(8) = 'u' - varinfo%varndims(8) = 1 - varinfo%varnattrs(8) = 2 - varinfo%vartype(8) = 'double' - varinfo%vardimid(8,1) = dimid(1) - varinfo%varattrs(9,1,1) = 'title' - varinfo%varattrs(9,1,2) = 'Meridional Wind' - varinfo%varattrs(9,2,1) = 'units' - varinfo%varattrs(9,2,2) = 'meters per second' - varinfo%varname(9) = 'v' - varinfo%varndims(9) = 1 - varinfo%varnattrs(9) = 2 - varinfo%vartype(9) = 'double' - varinfo%vardimid(9,1) = dimid(1) - varinfo%varattrs(10,1,1) = 'title' - varinfo%varattrs(10,1,2) = 'Wind Direction' - varinfo%varattrs(10,2,1) = 'units' - varinfo%varattrs(10,2,2) = 'degrees from North' - varinfo%varname(10) = 'wdir' - varinfo%varndims(10) = 1 - varinfo%varnattrs(10) = 2 - varinfo%vartype(10) = 'double' - varinfo%vardimid(10,1) = dimid(1) - varinfo%varattrs(11,1,1) = 'title' - varinfo%varattrs(11,1,2) = 'Wind Speed Magnitude' - varinfo%varattrs(11,2,1) = 'units' - varinfo%varattrs(11,2,2) = 'meters per second' - varinfo%varname(11) = 'wspd' - varinfo%varndims(11) = 1 - varinfo%varnattrs(11) = 2 - varinfo%vartype(11) = 'double' - varinfo%vardimid(11,1) = dimid(1) - varinfo%varattrs(12,1,1) = 'title' - varinfo%varattrs(12,1,2) = 'Geometric Height' - varinfo%varattrs(12,2,1) = 'units' - varinfo%varattrs(12,2,2) = 'meters' - varinfo%varname(12) = 'z' - varinfo%varndims(12) = 1 - varinfo%varnattrs(12) = 2 - varinfo%vartype(12) = 'double' - varinfo%vardimid(12,1) = dimid(1) - varinfo%varattrs(13,1,1) = 'title' - varinfo%varattrs(13,1,2) = 'Julian Date' - varinfo%varattrs(13,2,1) = 'units' - varinfo%varattrs(13,2,2) = 'Number of days since commencement of Julian calendar' - varinfo%varname(13) = 'jdate' - varinfo%varndims(13) = 1 - varinfo%varnattrs(13) = 2 - varinfo%vartype(13) = 'double' - varinfo%vardimid(13,1) = dimid(1) - varinfo%varattrs(14,1,1) = 'title' - varinfo%varattrs(14,1,2) = 'Surface Pressure' - varinfo%varattrs(14,2,1) = 'units' - varinfo%varattrs(14,2,2) = 'Pascals' - varinfo%varname(14) = 'psfc' - varinfo%varndims(14) = 0 - varinfo%varnattrs(14) = 2 - varinfo%vartype(14) = 'double' - - ! Deallocate memory for local variables - - if(allocated(dimname)) deallocate(dimname) - if(allocated(dimval)) deallocate(dimval) - if(allocated(dimid)) deallocate(dimid) - - !===================================================================== - - end subroutine varinfo_sonde_meteo - - !======================================================================= - - ! SUBROUTINE: - - ! write_hsa.f90 - - ! DESCRIPTION: - - ! This subroutine writes a National Oceanic and Atmospheric - ! Administration (NOAA) Atlantic Oceanographic and Meteorological - ! Laboratory (AOML) Hurricane Research Division (HRD) HRD Spline - ! Analysis (HSA) formatted observation file. - - ! INPUT VARIABLES: - - ! * hsa; a FORTRAN hsa_struct variable. - - !----------------------------------------------------------------------- - - subroutine write_hsa(hsa) - - ! Define variables passed to routine - - type(hsa_struct) :: hsa - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - if(debug) write(6,500) trim(adjustl(hsa%filename)) - open(99,file=trim(adjustl(hsa%filename)),form='formatted') - - ! Loop through local variable - - do i = 1, hsa%nz - - ! Define local variables - - write(99,501) hsa%wx(i), hsa%yymmdd(i), hsa%gmt(i), hsa%lat(i), & - & hsa%lon(i), hsa%p(i), hsa%t(i), hsa%rh(i), hsa%z(i), & - & hsa%u(i), hsa%v(i), hsa%tail(i) - - end do ! do i = 1, hsa%nz - - ! Define local variables - - close(99) -500 format('WRITE_HSA: Writing file ',a,'.') -501 format(i2,1x,f7.0,1x,i4,1x,2(f7.3,1x),3(f6.1,1x),f7.1,2(f6.1,1x),a4) - - !===================================================================== - - end subroutine write_hsa - - !======================================================================= - - ! SUBROUTINE: - - ! write_sonde_drift_error.f90 - - ! DESCRIPTION: - - ! This subroutine writes the values for the TEMP-DROP formatted - ! sonde message splash location (e.g., spg attributes) and the - ! computed/estimated splash locations from the drift-corrected sonde - ! trajectories; the format is as follows: - - ! - ! - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the filename - ! path to the output file. - - ! * hsa; a FORTRAN hsa_struct variable; this should contain the - ! contents of the decoded TEMP-DROP message without the - ! application of the drift-correction. - - ! * meteo; a FORTRAN meteo_struct variable. - - !----------------------------------------------------------------------- - - subroutine write_sonde_drift_error(filename,hsa,meteo) - - ! Define variables passed to routine - - type(hsa_struct) :: hsa - type(meteo_struct) :: meteo - character(len=500) :: filename - - !===================================================================== - - ! Define local variables - - open(99,file=trim(adjustl(filename)),form='formatted') - write(99,500) -1.0*hsa%spglon, hsa%spglat, (hsa%spg_julian - & - & hsa%rel_julian)*86400.0, meteo%lon(1), meteo%lat(1), & - & (meteo%jdate(1) - meteo%jdate(meteo%nz))*86400.0 - close(99) -500 format(6(f13.5,1x)) - - !===================================================================== - - end subroutine write_sonde_drift_error - - !======================================================================= - - ! SUBROUTINE: - - ! write_sonde_decode_table.f90 - - ! DESCRIPTION: - - ! This subroutine writes a column-delimted table containing the - ! TEMP-DROP encoded observation file and the corresponding decoded - ! HSA-formatted observation file. - - ! INPUT VARIABLES: - - ! * table_filename; a FORTRAN character string specifying the - ! filename path for the column-delimited table; if this file does - ! not exist upon call to this routine, it will be created; if the - ! file does exist upon call to this routine, it will be appended. - - ! * sonde_filename; a FORTRAN character string specifying the - ! filename path for the TEMP-DROP encoded observation file. - - ! * hsa; a FORTRAN hsa_struct variable containing (at minimum) the - ! filename path for the decoded HSA-formatted observation file - ! (within the attribute 'filename'). - - !----------------------------------------------------------------------- - - subroutine write_sonde_decode_table(table_filename,sonde_filename,hsa) - - ! Define variables passed to routine - - type(hsa_struct) :: hsa - character(len=500) :: sonde_filename - character(len=500) :: table_filename - - ! Define variables computed within routine - - logical :: exist - - !===================================================================== - - ! Define local variables - - inquire(file = trim(adjustl(table_filename)),exist = exist) - - ! Check local variable and proceed accordingly - - if(exist) then - - ! Define local variables - - open(99,file=trim(adjustl(table_filename)),form='formatted', & - & status='old',position='append',action='write') - - else ! if(exist) - - ! Define local variables - - open(99,file=trim(adjustl(table_filename)),form='formatted', & - & status='new',action='write') - - end if ! if(exist) - - ! Define local variables - - write(99,500) trim(adjustl(sonde_filename)), & - & trim(adjustl(hsa%filename)) - if(debug) write(6,501) trim(adjustl(sonde_filename)), & - & trim(adjustl(hsa%filename)) - close(99) -500 format(a,1x,a) -501 format('WRITE_SONDE_DECODE_TABLE: Mapping observation file ',a,' to ' & - & 'decoded observation file ',a,'.') - - !===================================================================== - - end subroutine write_sonde_decode_table - - !======================================================================= - - ! SUBROUTINE: - - ! write_sonde_meteo.f90 - - ! DESCRIPTION: - - ! This subroutine writes the contents of the FORTRAN meteo_struct - ! variable to an external Network Common Data Format (netCDF) file. - - ! INPUT VARIABLES: - - ! * sonde; a FORTRAN sonde_struct variable. - - ! * meteo; a FORTRAN meteo_struct variable. - - ! * filename; a FORTRAN character string containing the full-path to - ! the netCDF file to be created. - - !----------------------------------------------------------------------- - - subroutine write_sonde_meteo(sonde,meteo,filename) - - ! Define variables passed to routine - - type(meteo_struct) :: meteo - type(sonde_struct) :: sonde - character(len=500) :: filename - - ! Define variables computed within routine - - type(varinfo_struct) :: varinfo - character(len=100) :: attrname - character(len=100) :: varname - real(r_double), dimension(:,:), allocatable :: work - integer :: n1dv - integer :: n0dv - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - call netcdf_interface_open(filename,.false.,.false.,.true.) - call fileio_interface_varinfo(meteo,varinfo) - attrname = 'aircraft_id' - call netcdf_interface_putattr(attrname,meteo%acid) - attrname = 'obs_number' - call netcdf_interface_putattr(attrname,meteo%obnum) - attrname = 'tempdrop_file' - call netcdf_interface_putattr(attrname, & - & trim(adjustl(meteo%tempdrop_name))) - attrname = '_FillValue' - call netcdf_interface_putattr(attrname,dble(spval)) - call netcdf_interface_writedef(varinfo) - n1dv = 13 - n0dv = 1 - - ! Allocate memory for local variables - - if(.not. allocated(work)) allocate(work(n1dv,meteo%nz)) - - ! Define local variables - - work(1,:) = meteo%dwpt - work(2,:) = meteo%lat - work(3,:) = meteo%lon - work(4,:) = meteo%p - work(5,:) = meteo%q - work(6,:) = meteo%rh - work(7,:) = meteo%t - work(8,:) = meteo%u - work(9,:) = meteo%v - work(10,:) = meteo%wdir - work(11,:) = meteo%wspd - work(12,:) = meteo%z - work(13,:) = meteo%jdate - - ! Loop through local variable - - do i = 1, n1dv - - ! Define local variables - - varname = varinfo%varname(i) - call netcdf_interface_putvar(filename,varname,work(i,:)) - - end do ! do i = 1, n1dv - - ! Deallocate memory for local variables - - if(allocated(work)) deallocate(work) - - ! Allocate memory for local variables - - if(.not. allocated(work)) allocate(work(n0dv,1)) - - ! Define local variables - - work(1,1) = meteo%psfc - - ! Loop through local variable - - do i = 1, n0dv - - ! Define local variables - - varname = varinfo%varname(n1dv+i) - call netcdf_interface_putvar(filename,varname,work(i,1)) - - end do ! do i = 1, n0dv - - ! Deallocate memory for local variables - - if(allocated(work)) deallocate(work) - call variable_interface_cleanup_struct(varinfo) - - ! Define local variables - - call netcdf_interface_close() - - !===================================================================== - - end subroutine write_sonde_meteo - - !======================================================================= - -end module fileio_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/forecast_model_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/forecast_model_interface.F90 deleted file mode 100644 index 8460d3f4e..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/forecast_model_interface.F90 +++ /dev/null @@ -1,841 +0,0 @@ -module forecast_model_interface - - !======================================================================= - - !$$$ PROGRAM DOCUMENTATION BLOCK - - ! obs-preproc :: forecast_model_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - ! Review the README, within the top-level directory, which provides - ! relevant instructions and (any) references cited by algorithms - ! within this software suite. - - !======================================================================= - - ! Define associated modules and subroutines - - use bufrio_interface - use constants_interface - use fileio_interface - use grid_methods_interface - use gridprojs_interface - use gridtrans_interface - use kinds_interface - use math_methods_interface - use namelist_interface - use time_methods_interface - use variable_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: forecast_model_fv3 - interface observation_assignments - module procedure fv3_observations - end interface observation_assignments - interface rotate_winds - module procedure fv3_rotate_winds - end interface rotate_winds - interface write_fcstmdl_bufr - module procedure fv3_bufr - end interface write_fcstmdl_bufr - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! forecast_model_fv3.f90 - - ! DESCRIPTION: - - ! This subroutine is the driver-level subroutine to ingest the - ! necessary variable fields from the FV3 model forecast files and - ! project the observations into a reference frame relative to the - ! available geographical locations specified by the user; the BUFR - ! observations are derived and written to an external user specified - ! filepath. - - !----------------------------------------------------------------------- - - subroutine forecast_model_fv3() - - ! Define variables computed within routine - - type(fcstmdl_struct), dimension(:), allocatable :: fcstmdl - type(tcinfo_struct), dimension(:), allocatable :: tcinfo - type(fv3_struct) :: fv3 - type(grid_struct) :: grid - type(windrotate_struct) :: windrotate - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - call fileio_interface_read(tcinfo_filename,tcinfo) - call fileio_interface_read(fv3,windrotate) - - ! Check local variable and proceed accordingly - - if(is_global) grid%ncoords = (size(fv3_orog_filename)*fv3%nx*fv3%ny) - if(is_regional) grid%ncoords = (fv3%nx*fv3%ny) - - ! Define local variables - - call variable_interface_setup_struct(grid) - - ! Check local variable and proceed accordingly - - if(is_rotate_winds) call rotate_winds(fv3,windrotate) - - ! Deallocate memory for local variables - - call windrotate_cleanup(windrotate) - - ! Allocate memory for local variables - - if(.not. allocated(fcstmdl)) allocate(fcstmdl(size(tcinfo))) - - ! Define local variables - - fcstmdl(:)%nz = fv3%nz - grid%lat = fv3%lat - grid%lon = fv3%lon - - ! Loop through local variables - - do i = 1, size(tcinfo) - - ! Define local variables - - grid%gclat = tcinfo(i)%mdl_clat - grid%gclon = tcinfo(i)%mdl_clon - - ! Compute local variables - - call grid_methods_polarcoords(grid) - call observation_locations(grid,fcstmdl(i)) - call observation_assignments(fcstmdl(i),tcinfo(i),fv3) - - end do ! do i = 1, size(tcinfo) - - ! Deallocate memory for local variables - - if(allocated(tcinfo)) deallocate(tcinfo) - call variable_interface_cleanup_struct(grid) - - ! Define local variables - - call write_fcstmdl_bufr(fcstmdl,fv3) - - ! Deallocate memory for local variables - - if(allocated(fcstmdl)) deallocate(fcstmdl) - call variable_interface_cleanup_struct(fv3) - - !===================================================================== - - end subroutine forecast_model_fv3 - - !======================================================================= - - ! SUBROUTINE: - - ! bufr_record.f90 - - ! DESCRIPTION: - - ! This subroutine constructs a BUFR record and writes the respective - ! record to the external BUFR file. - - ! INPUT VARIABLES: - - ! * fcstmdl; a FORTRAN fcstmdl_struct variable containing the - ! observation values; it is assumed that the wind variables have - ! already been rotated from model space to observation space. - - ! * idx; a FORTRAN integer value specifying the horizontal - ! coordinate value within the respective FORTRAN fcstmdl_struct - ! variable arrays. - - ! * kdx; a FORTRAN integer value specifying the vertical coordinate - ! value within the respective FORTRAN fcstmdl_struct variable - ! arrays. - - ! * bufr_info; a FORTRAN bufr_info_struct variable containing the - ! BUFR variable attributes. - - ! * bufr; a FORTRAN bufr_struct variable containing the BUFR record - ! and filename attributes. - - ! * obid; a FORTRAN integer value used to create a unique variable - ! identifier for the respective BUFR record. - - !----------------------------------------------------------------------- - - subroutine bufr_record(fcstmdl,idx,kdx,bufr_info,bufr,obid) - - ! Define variables passed to routine - - type(bufr_struct) :: bufr - type(bufr_info_struct) :: bufr_info - type(fcstmdl_struct) :: fcstmdl - integer :: idx - integer :: kdx - integer :: obid - - ! Define variables computed within routine - - character(len=8) :: cacobid - real(r_double) :: racobid - - !===================================================================== - - ! Define local variables - - equivalence(racobid,cacobid) - write(cacobid,500) obid - call variable_interface_setup_struct(bufr) - bufr%hdr(1) = dble(racobid) - bufr%hdr(2) = dble(fcstmdl%lon(idx)) - bufr%hdr(3) = dble(fcstmdl%lat(idx)) - bufr%hdr(4) = 0.0 - bufr%hdr(5) = bufr_info%obs_type_mass - bufr%obs(1,1) = fcstmdl%p(idx,kdx)/100.0 - bufr%obs(2,1) = fcstmdl%q(idx,kdx)*1000.0*1000.0 - bufr%obs(3,1) = (fcstmdl%t(idx,kdx) - 273.15) - bufr%qcf(1,1) = 2.0 - bufr%qcf(2,1) = 2.0 - bufr%qcf(3,1) = 2.0 - call bufrio_interface_write(bufr) - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(bufr) - - ! Define local variables - - call variable_interface_setup_struct(bufr) - bufr%hdr(1) = dble(racobid) - bufr%hdr(2) = dble(fcstmdl%lon(idx)) - bufr%hdr(3) = dble(fcstmdl%lat(idx)) - bufr%hdr(4) = 0.0 - bufr%hdr(5) = bufr_info%obs_type_wind - bufr%obs(1,1) = fcstmdl%p(idx,kdx)/100.0 - bufr%obs(4,1) = fcstmdl%u(idx,kdx) - bufr%obs(5,1) = fcstmdl%v(idx,kdx) - bufr%qcf(1,1) = 2.0 - bufr%qcf(4,1) = 2.0 - call bufrio_interface_write(bufr) - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(bufr) - - ! Define local variables - -500 format(i8.8) - - !===================================================================== - - end subroutine bufr_record - - !======================================================================= - - ! SUBROUTINE: - - ! fv3_bufr.f90 - - ! DESCRIPTION: - - ! This subroutine writes the FV3 forecast model derived observations - ! to an external user specified BUFR file. - - ! INPUT VARIABLES: - - ! * fcstmdl; an array of FORTRAN fcstmdl_struct variables which has - ! been populated with the contents from the FORTRAN fv3_struct - ! variable relative to the respective geographical locations. - - ! * fv3; a FORTRAN fv3_struct variable containing with variable - ! arrays which have been populated from the contents of the - ! external FV3 netcdf files. - - !----------------------------------------------------------------------- - - subroutine fv3_bufr(fcstmdl,fv3) - - ! Define variables passed to routine - - type(fcstmdl_struct) :: fcstmdl(:) - type(fv3_struct) :: fv3 - - ! Define variables computed within routine - - type(bufr_struct) :: bufr - type(bufr_info_struct) :: bufr_info - type(grid_struct) :: dst_grid - type(grid_struct) :: src_grid - type(kdtree_struct) :: kdtree - character(len=500) :: lbufr_filepath - integer :: nobs - - ! Define counting variables - - integer :: i, j, k - - !===================================================================== - - ! Define local variables - - bufr_info%filename = bufr_info_filepath - call fileio_interface_read(bufr_info) - bufr%hdstr = 'SID XOB YOB DHR TYP' - bufr%obstr = 'POB QOB TOB UOB VOB' - bufr%qcstr = 'PQM QQM TQM WQM' - bufr%oestr = 'POE QOE TOE WOE' - bufr%subset = trim(adjustl(bufr_info%subset)) - bufr%mxmn = 5 - bufr%mxlv = 1 - lbufr_filepath = trim(adjustl(bufr_filepath)) - call bufrio_interface_idate(analdate,bufr) - call bufrio_interface_open(lbufr_filepath,bufr_tblpath,bufr,.false., & - & .false.,.true.) - nobs = 0 - - ! Check local variable and proceed accordingly - - if(mask_ocean .or. mask_land) then - - ! Define local variables - - dst_grid%ncoords = fv3%ncoords - call variable_interface_setup_struct(dst_grid) - dst_grid%lat = fv3%lat - dst_grid%lon = fv3%lon - - end if ! if(mask_ocean .or. mask_land) - - ! Loop through local variable - - do i = 1, size(fcstmdl) - - ! Check local variable and proceed accordingly - - if((.not. mask_ocean) .and. (.not. mask_land)) then - - ! Loop through local variable - - do j = 1, fcstmdl(i)%nobs - - ! Loop through local variable - - do k = 1, fcstmdl(i)%nz - - ! Define local variables - - nobs = nobs + 1 - call bufr_record(fcstmdl(i),j,k,bufr_info,bufr,nobs) - - end do ! do k = 1, fcstmdl(i)%nz - - end do ! do j = 1, fcstmdl(i)%nobs - - end if ! if((.not. mask_ocean) .and. (.not. mask_land)) - - ! Check local variable and proceed accordingly - - if(mask_ocean .or. mask_land) then - - ! Define local variables - - src_grid%ncoords = fcstmdl(i)%nobs - call variable_interface_setup_struct(src_grid) - src_grid%lat = fcstmdl(i)%lat - src_grid%lon = fcstmdl(i)%lon - kdtree%ncoords = dst_grid%ncoords - kdtree%nn = 1 - call variable_interface_setup_struct(kdtree) - - ! Compute local variables - - call math_methods_kdtree_nn(src_grid,dst_grid,kdtree) - - ! Loop through local variable - - do j = 1, fcstmdl(i)%nobs - - ! Loop through local variable - - do k = 1, fcstmdl(i)%nz - - ! Define local variables - - nobs = nobs + 1 - - ! Check local variable and proceed accordingly - - if(fcstmdl(i)%slmsk(j) .eq. fv3%slmsk(kdtree%idx(j,1))) & - & then - - ! Check local variable and proceed accordingly - - if(mask_ocean .and. (fv3%slmsk(kdtree%idx(j,1)) .ge. & - & 1.0) .and. (.not. mask_land)) then - - ! Define local variables - - call bufr_record(fcstmdl(i),j,k,bufr_info,bufr, & - & nobs) - - end if ! if(mask_ocean - ! .and. (fv3%slmsk(kdtree%idx(j,1)) - ! .ge. 1.0)) - - ! Check local variable and proceed accordingly - - if(mask_land .and. (fv3%slmsk(kdtree%idx(j,1)) .le. & - & 0.0) .and. (.not. mask_ocean)) then - - ! Define local variables - - call bufr_record(fcstmdl(i),j,k,bufr_info,bufr, & - & nobs) - - end if ! if(mask_land - ! .and. (fv3%slmsk(kdtree%idx(j,1)) - ! .le. 0.0)) - - end if ! if(fcstmdl(i)%slmsk(j) - ! .eq. fv3%slmsk(kdtree%idx(j,1))) - - end do ! do k = 1, fcstmdl(i)%nz - if (debug) write(6,601) 'i,j,Lev1:',i,j, & - fcstmdl(i)%lon(j),fcstmdl(i)%lat(j),fcstmdl(i)%p(j,1),fcstmdl(i)%t(j,1),fcstmdl(i)%q(j,1), & - fcstmdl(i)%u(j,1),fcstmdl(i)%v(j,1) - end do ! do j = 1, fcstmdl(i)%nobs - - end if ! if(mask_ocean .or. mask_land) - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(fcstmdl(i)) - call variable_interface_cleanup_struct(src_grid) - call variable_interface_cleanup_struct(kdtree) - - end do ! do i = 1, size(fcstmdl) - - ! Define local variables - - call bufrio_interface_close(.false.,.true.) - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(dst_grid) -601 format(a10,i3,i12,7f15.6) - !===================================================================== - - end subroutine fv3_bufr - - !======================================================================= - - ! SUBROUTINE: - - ! fv3_observations.f90 - - ! DESCRIPTION: - - ! This subroutine computes and populates the arrays within the - ! FORTRAN fcstmdl_struct variable with values from the FORTRAN - ! fv3_struct variable; the geographical coordinate values are - ! updated relative to the difference between the observed and the - ! forecast model geographical positions. - - ! INPUT VARIABLES: - - ! * fcstmdl; a FORTRAN fcstmdl_struct variable which has been - ! initialized and observation locations assigned. - - ! * tcinfo; a FORTRAN tcinfo_struct variable now containing the - ! tropical cyclone attributes retrieved from the user specified - ! file. - - ! * fv3; a FORTRAN fv3_struct variable containing with variable - ! arrays which have been populated from the contents of the - ! external FV3 netcdf files. - - ! OUTPUT VARIABLES: - - ! * fcstmdl; a FORTRAN fcstmdl_struct variable which has been - ! populated with the contents from the FORTRAN fv3_struct - ! variable. - - !----------------------------------------------------------------------- - - subroutine fv3_observations(fcstmdl,tcinfo,fv3) - - ! Define variables passed to routine - - type(fcstmdl_struct) :: fcstmdl - type(fv3_struct) :: fv3 - type(tcinfo_struct) :: tcinfo - - ! Define variables computed within routine - - type(fv3_struct) :: fv3_local - real(r_kind) :: dlat - real(r_kind) :: dlon - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(is_relocate) then - - ! Compute local variables - - dlat = tcinfo%obs_clat - tcinfo%mdl_clat - dlon = tcinfo%obs_clon - tcinfo%mdl_clon - - else ! if(is_relocate) - - ! Define local variables - - dlat = 0.0 - dlon = 0.0 - - end if ! if(is_relocate) - - ! Define local variables - - fv3_local = fv3 - - ! Loop through local variable - - do i = 1, fcstmdl%nobs - - ! Define local variables - - fcstmdl%p(i,:) = fv3_local%p(fcstmdl%idx(i),:) - fcstmdl%q(i,:) = fv3_local%q(fcstmdl%idx(i),:) - fcstmdl%t(i,:) = fv3_local%t(fcstmdl%idx(i),:) - fcstmdl%u(i,:) = fv3_local%ua(fcstmdl%idx(i),:) - fcstmdl%v(i,:) = fv3_local%va(fcstmdl%idx(i),:) - fcstmdl%lat(i) = fv3_local%lat(fcstmdl%idx(i)) + dlat - fcstmdl%lon(i) = fv3_local%lon(fcstmdl%idx(i)) + dlon - fcstmdl%slmsk(i) = fv3_local%slmsk(fcstmdl%idx(i)) - - end do ! do i = 1, fcstmdl%nobs - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(fv3_local) - - !===================================================================== - - end subroutine fv3_observations - - !======================================================================= - - ! SUBROUTINE: - - ! fv3_rotate_winds.f90 - - ! DESCRIPTION: - - ! This subroutine rotates the FV3 forecast model vector winds to an - ! Earth-relative rotation and interpolates the vector the FV3 grid - ! cell centers. - - ! INPUT VARIABLES: - - ! * fv3; a FORTRAN fv3_struct variable containing (at minimum) the - ! model grid projection information. - - ! * windrotate; a FORTRAN windrotate_struct variable containing the - ! rotation coefficients for the grid projection. - - ! OUTPUT VARIABLES: - - ! * fv3; a FORTRAN fv3_struct variable containing the respective - ! forecast model winds rotated to an Earth-relative coordinate - ! system. - - !----------------------------------------------------------------------- - - subroutine fv3_rotate_winds(fv3,windrotate) - - ! Define variables passed to routine - - type(fv3_struct) :: fv3 - type(windrotate_struct) :: windrotate - - ! Define variables computed within routine - - real(r_kind), dimension(:,:), allocatable :: uwnd - real(r_kind), dimension(:,:), allocatable :: vwnd - - ! Define counting variables - - integer :: i, j, k - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(uwnd)) allocate(uwnd(fv3%nx,fv3%ny)) - if(.not. allocated(vwnd)) allocate(vwnd(fv3%nx,fv3%ny)) - - ! Loop through local variable - - do k = 1, fv3%nz - - ! Loop through local variable - - do j = 1, fv3%ny - - ! Loop through local variable - - do i = 1, fv3%nx - - ! Compute local variables - - uwnd(i,j) = 0.5*((fv3%u(i,j,k)*windrotate%sangv(i,j) - & - & fv3%v(i,j,k)*windrotate%sangu(i,j))/ & - & (windrotate%cangu(i,j)*windrotate%sangv(i,j) - & - & windrotate%sangu(i,j)*windrotate%cangv(i,j)) + & - & (fv3%u(i,j+1,k)*windrotate%sangv(i+1,j) - & - & fv3%v(i+1,j,k)*windrotate%sangu(i,j+1))/ & - & (windrotate%cangu(i,j+1)*windrotate%sangv(i+1,j) - & - & windrotate%sangu(i,j+1)*windrotate%cangv(i+1,j))) - vwnd(i,j) = 0.5*((fv3%u(i,j,k)*windrotate%cangv(i,j) - & - & fv3%v(i,j,k)*windrotate%cangu(i,j))/ & - & (windrotate%sangu(i,j)*windrotate%cangv(i,j) - & - & windrotate%cangu(i,j)*windrotate%sangv(i,j)) + & - & (fv3%u(i,j+1,k)*windrotate%cangv(i+1,j) - & - & fv3%v(i+1,j,k)*windrotate%cangu(i,j+1))/ & - & (windrotate%sangu(i,j+1)*windrotate%cangv(i+1,j) - & - & windrotate%cangu(i,j+1)*windrotate%sangv(i+1,j))) - - end do ! do i = 1, fv3%nx - - end do ! do j = 1, fv3%ny - - ! Define local variables - - fv3%ua(:,k) = reshape(uwnd,shape(fv3%ua(:,k))) - fv3%va(:,k) = reshape(vwnd,shape(fv3%va(:,k))) - - end do ! do k = 1, fv3%nz - - ! Deallocate memory for local variables - - if(allocated(uwnd)) deallocate(uwnd) - if(allocated(vwnd)) deallocate(vwnd) - - !===================================================================== - - end subroutine fv3_rotate_winds - - !======================================================================= - - ! SUBROUTINE: - - ! observation_locations.f90 - - ! DESCRIPTION: - - ! This subroutine determines all grid locations representing - ! observations to be processed; the algorithm below utilizes KD-tree - ! searching algorithm to identify forecast model grid cell locations - ! that fall within a user specified radius; further, thinning is - ! performed in accordance with the user specified namelist variable - ! 'sample_radius'. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN grid_struct variable containing the geographical - ! locations of the forecast model grid as well as the reference - ! location about which to determine observation locations. - - ! * fcstmdl; a FORTRAN fcstmdl_struct variable. - - ! OUTPUT VARIABLES: - - ! * fcstmdl; a FORTRAN fcstmdl_struct variable which has been - ! initialized and contains the grid cell locations (idx) for - ! observations to be processed. - - !----------------------------------------------------------------------- - - subroutine observation_locations(grid,fcstmdl) - - ! Define variables passed to routine - - type(fcstmdl_struct) :: fcstmdl - type(grid_struct) :: grid - - ! Define variables computed within routine - - type(kdtree_struct) :: kdtree - real(r_kind) :: radius_max - real(r_kind) :: radius_min - real(r_kind) :: sample_radius_threshold - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - kdtree%ncoords = 1 - kdtree%nn = grid%ncoords - call variable_interface_setup_struct(kdtree) - kdtree%nalloc = grid%ncoords - kdtree%r2 = (tc_radius*tc_radius) - - ! Compute local variables - - call math_methods_kdtree_r2(grid,grid,kdtree) - - if(debug) write(6,*) 'kdtree%nfound=', kdtree%nfound - - ! Check local variable and proceed accordingly - - if(sample_radius .eq. spval) then - - ! Define local variables - - fcstmdl%nobs = kdtree%nfound / sample_nindex - call variable_interface_setup_struct(fcstmdl) - fcstmdl%idx = kdtree%idx(1,1:kdtree%nfound:sample_nindex) - - else ! if(sample_radius .eq. spval) - - sample_radius_threshold = sqrt(kdtree%r2dist(1,2)) - if(debug) write(6,*) 'sample_radius_threshold=', sample_radius_threshold - - ! Define local variables - - fcstmdl%nobs = 0 - radius_min = 0.0 - radius_max = radius_min + sample_radius - - ! Loop through local variable - - do while(radius_max .le. tc_radius) - - ! Loop through local variable - - do i = 1, kdtree%nfound - - ! Check local variable - - if((sqrt(kdtree%r2dist(1,i)) .ge. radius_min) .and. & - & (sqrt(kdtree%r2dist(1,i)) .lt. radius_max)) then - - ! Define local variables - - if(abs(sqrt(kdtree%r2dist(1,i)) - 0.5*(radius_min+radius_max)) .lt. sample_radius_threshold ) then - fcstmdl%nobs = fcstmdl%nobs + 1 - end if - - end if ! if((sqrt(kdtree%r2dist(1,i)) .ge. radius_min) - ! .and. (sqrt(kdtree%r2dist(1,i)) - ! .lt. radius_max)) - - end do ! do i = 1, kdtree%nfound - - ! Define local variables - - radius_min = radius_max + sample_radius - radius_max = radius_min + sample_radius - - end do ! do while(radius .le. tc_radius) - - ! Define local variables - - call variable_interface_setup_struct(fcstmdl) - fcstmdl%nobs = 0 - radius_min = 0.0 - radius_max = radius_min + sample_radius - - ! Loop through local variable - - do while(radius_max .le. tc_radius) - - ! Loop through local variable - - do i = 1, kdtree%nfound - - ! Check local variable - - if((sqrt(kdtree%r2dist(1,i)) .ge. radius_min) .and. & - & (sqrt(kdtree%r2dist(1,i)) .lt. radius_max)) then - - ! Define local variables - if(abs(sqrt(kdtree%r2dist(1,i)) - 0.5*(radius_min+radius_max)) .lt. sample_radius_threshold ) then - !if(debug) write(6,*) 'i,radius_min,radius_max,sqrt(kdtree%r2dist(1,i)=',i,radius_min,radius_max,sqrt(kdtree%r2dist(1,i)) - fcstmdl%nobs = fcstmdl%nobs + 1 - fcstmdl%idx(fcstmdl%nobs) = kdtree%idx(1,i) - end if - - end if ! if((sqrt(kdtree%r2dist(1,i)) .ge. radius_min) - ! .and. (sqrt(kdtree%r2dist(1,i)) - ! .lt. radius_max)) - - end do ! do i = 1, kdtree%nfound - - ! Define local variables - - radius_min = radius_max + sample_radius - radius_max = radius_min + sample_radius - - end do ! do while(radius .le. tc_radius) - - end if ! if(sample_radius .eq. spval) - - if(debug) write(6,*) 'fcstmdl%nobs=', fcstmdl%nobs - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(kdtree) - - !===================================================================== - - end subroutine observation_locations - - !======================================================================= - -end module forecast_model_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/grid_methods_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/grid_methods_interface.F90 deleted file mode 100644 index a73b42b21..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/grid_methods_interface.F90 +++ /dev/null @@ -1,478 +0,0 @@ -module grid_methods_interface - - !======================================================================= - - !$$$ MODULE DOCUMENTATION BLOCK - - ! obs-preproc :: grid_methods_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - !======================================================================= - - ! Define associated modules and subroutines - - use constants_interface - use kinds_interface - use variable_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: grid_methods_anglegrid - public :: grid_methods_gcgeo - public :: grid_methods_polarcoords - public :: grid_methods_radialgrid - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! grid_methods_anglegrid.f90 - - ! DESCRIPTION: - - ! This subroutine computes a grid of angle values relative to a - ! reference Earth-bound geographical location and a grid of - ! longitude and latitude values assuming the equitorial radius of - ! the Earth. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN tcgrid_struct variable containing grid longitude - ! and latitude values; units for longitude and latitude are - ! degrees. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN tcgrid_struct variable containing the computed - ! angle relative to a reference Earth-bound geographical location - ! assuming the equitorial radius of the Earth; units are degrees. - - !----------------------------------------------------------------------- - - subroutine grid_methods_anglegrid(grid) - - ! Define variables passed to routine - - type(grid_struct) :: grid - - ! Define variables computed within routine - - real(r_kind) :: ecircum - real(r_kind) :: dlon - real(r_kind) :: dlat - real(r_kind) :: hyp_dist - real(r_kind) :: opp_dist - real(r_kind) :: adj_dist - real(r_kind) :: sin_value - real(r_kind) :: cos_value - real(r_kind) :: sin_angle - real(r_kind) :: cos_angle - real(r_kind) :: tmp_angle - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Compute local variables - - ecircum = 2.0*pi*(rearth_equator/1000.0) - - ! Define local variables - - grid%angle = 0.0 - - ! Loop through local variable - - do i = 1, grid%ncoords - - ! Compute local variables - - dlon = abs(grid%gclon - grid%lon(i)) - dlat = abs(grid%gclat - grid%lat(i)) - call radialdist(grid%gclon,grid%gclat,grid%lon(i),grid%lat(i), & - & hyp_dist) - - ! Check local variable and proceed accordingly - - if(dlon .eq. 0.0 .and. dlat .gt. 0.0) then - - ! Define local variables - - if(grid%gclat .gt. grid%lat(i)) grid%angle(i) = 180.0 - if(grid%gclat .lt. grid%lat(i)) grid%angle(i) = 0.0 - - else if(dlon .gt. 0.0 .and. dlat .eq. 0.0) then - - ! Define local variables - - if(grid%gclon .gt. grid%lon(i)) grid%angle(i) = 270.0 - if(grid%gclon .lt. grid%lon(i)) grid%angle(i) = 90.0 - - else ! if(dlon .eq. 0.0 .and. dlat .gt. 0.0) - - ! Compute local variables - - opp_dist = dlat/360.0*ecircum - sin_value = opp_dist/(hyp_dist/1000.0) - call radialdist(grid%gclon,grid%gclat,grid%lon(i),grid%gclat, & - & adj_dist) - cos_value = (adj_dist/1000.0)/(hyp_dist/1000.0) - - ! Define local variables - - if(sin_value .gt. 1.0) sin_value = 0.99999 - if(cos_value .gt. 1.0) cos_value = 0.99999 - - ! Compute local variables - - sin_angle = asin(sin_value)/deg2rad - cos_angle = acos(cos_value)/deg2rad - tmp_angle = 0.5*(sin_angle + cos_angle) - - ! Check local variable and proceed accordingly - - if(grid%gclat .le. grid%lat(i) .and. grid%gclon .le. & - & grid%lon(i)) then - - ! Compute local variables - - grid%angle(i) = 90.0 - tmp_angle - - else if(grid%gclat .gt. grid%lat(i) .and. grid%gclon .le. & - & grid%lon(i)) then - - ! Compute local variables - - grid%angle(i) = 90.0 + tmp_angle - - else if(grid%gclat .ge. grid%lat(i) .and. grid%gclon .ge. & - & grid%lon(i)) then - - ! Compute local variables - - grid%angle(i) = 270.0 - tmp_angle - - else if(grid%gclat .lt. grid%lat(i) .and. grid%gclon .ge. & - & grid%lon(i)) then - - ! Compute local variables - - grid%angle(i) = 270.0 + tmp_angle - - end if ! if(grid%gclat .le. grid%lat(i) .and. grid%gclon - ! .le. grid%lon(i)) - - end if ! if(dlon .eq. 0.0 .and. dlat .gt. 0.0) - - end do ! do i = 1, grid%ncoords - - !===================================================================== - - end subroutine grid_methods_anglegrid - - !======================================================================= - - ! SUBROUTINE: - - ! grid_methods_gcgeo.f90 - - ! DESCRIPTION: - - ! This subroutine computes the longitude and latitude (e.g., - ! geographical) coordinates, assuming a great-circle distance, of an - ! advected position provided an initial geographical position - ! (defined by the longitude and latitude coordinates) and a distance - ! and heading. - - ! REFERENCES: - - ! http://www.edwilliams.org/avform.htm - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN grid_struct variable containing the initial - ! geographical position (gclon and gclat) and the heading (gchead; - ! degrees) and distance (gcdist; meters); all geographical - ! position units are assumed to be degrees. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN grid_struct variable containing the newly - ! computed geographical position (gclon and gclat). - - !----------------------------------------------------------------------- - - subroutine grid_methods_gcgeo(grid) - - ! Define variables passed to routine - - type(grid_struct) :: grid - - ! Define variables computed within routine - - real(r_kind) :: lon - real(r_kind) :: lat - real(r_kind) :: dlon - real(r_kind) :: head - real(r_kind) :: dist - - !===================================================================== - - ! Define local variables - - lat = grid%gclat*deg2rad - lon = grid%gclon*deg2rad - head = grid%gchead*deg2rad - dist = (grid%gcdist/rearth_equator) - - ! Compute local variables - - lat = asin(sin(lat)*cos(dist) + cos(lat)*sin(dist)*cos(head)) - dlon = atan2(sin(head)*sin(dist)*cos(lat),cos(dist) - sin(lat)* & - & sin(lat)) - lon = mod(lon - dlon + pi, 2.0*pi) - pi - - ! Define local variables - - grid%gclon = lon*rad2deg - grid%gclat = lat*rad2deg - - !===================================================================== - - end subroutine grid_methods_gcgeo - - !======================================================================= - - ! SUBROUTINE: - - ! grid_methods_polarcoords.f90 - - ! DESCRIPTION: - - ! This subroutine will compute the polar coordinate values of radial - ! distance and azimuthal angle relative to a reference geographical - ! location. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN grid_struct variable containing grid longitude - ! and latitude values and the reference longitude and latitude - ! coordinates (gclon and gclat, respectively); units for longitude - ! and latitude are degrees. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN grid_struct variable containing the computed - ! radial distance relative to a reference Earth-bound geographical - ! location assuming the equitorial radius of the Earth (units are - ! meters) and the angle relative to a reference Earth-bound - ! geographical location assuming the equitorial radius of the - ! Earth (units are degrees). - - !----------------------------------------------------------------------- - - subroutine grid_methods_polarcoords(grid) - - ! Define variables passed to routine - - type(grid_struct) :: grid - - !===================================================================== - - ! Compute local variables - - call grid_methods_radialgrid(grid) - call grid_methods_anglegrid(grid) - - !===================================================================== - - end subroutine grid_methods_polarcoords - - !======================================================================= - - ! SUBROUTINE: - - ! grid_methods_radialgrid.f90 - - ! DESCRIPTION: - - ! This subroutine computes a grid of radial distance values relative - ! to a reference Earth-bound geographical location and a grid of - ! longitude and latitude values assuming the equitorial radius of - ! the Earth. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN grid_struct variable containing the grids of - ! longitude and latitude values, as well as the reference - ! geographical locations (gclon and gclat); units for all - ! longitude and latitude values are degrees. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN grid_struct variable containing the computed - ! radial distance relative to a reference Earth-bound geographical - ! location assuming the equitorial radius of the Earth; units are - ! meters. - - !----------------------------------------------------------------------- - - subroutine grid_methods_radialgrid(grid) - - ! Define variables passed to routine - - type(grid_struct) :: grid - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Loop through local variable - - do i = 1, grid%ncoords - - ! Compute local variables - - call radialdist(grid%gclon,grid%gclat,grid%lon(i),grid%lat(i), & - & grid%radius(i)) - - end do ! i = 1, grid%ncoords - - !===================================================================== - - end subroutine grid_methods_radialgrid - - !======================================================================= - - ! SUBROUTINE: - - ! radialdist.f90 - - ! DESCRIPTION: - - ! This subroutine computes the radial distance, using the - ! Earth-bound geographical coordinates, between two locations - ! assuming the equitorial radius of the Earth. - - ! INPUT VARIABLES: - - ! * lon1; a FORTRAN 4-byte real value specifying the geographical - ! longitude coordinate of location 1; units are degrees. - - ! * lat1; a FORTRAN 4-byte real value specifying the geographical - ! latitude coordinate of location 1; units are degrees. - - ! * lon2; a FORTRAN 4-byte real value specifying the geographical - ! longitude coordinate of location 2; units are degrees. - - ! * lat2; a FORTRAN 4-byte real value specifying the geographical - ! latitude coordinate of location 2; units are degrees. - - ! OUTPUT VARIABLES: - - ! * dist; a FORTRAN 4-byte real value specifying the radial distance - ! between two locations assuming the equitorial radius of the - ! Earth; units are meters. - - !----------------------------------------------------------------------- - - subroutine radialdist(lon1,lat1,lon2,lat2,dist) - - ! Define variables passed to routine - - real(r_kind) :: lon1 - real(r_kind) :: lat1 - real(r_kind) :: lon2 - real(r_kind) :: lat2 - real(r_kind) :: dist - - ! Define variables computed within routine - - real(r_double) :: lat1_deg - real(r_double) :: lat2_deg - real(r_double) :: lat1_rad - real(r_double) :: lat2_rad - real(r_double) :: lon1_deg - real(r_double) :: lon2_deg - real(r_double) :: lon1_rad - real(r_double) :: lon2_rad - real(r_double) :: x1 - real(r_double) :: y1 - real(r_double) :: z1 - real(r_double) :: x2 - real(r_double) :: y2 - real(r_double) :: z2 - real(r_kind) :: dr - - !===================================================================== - - ! Compute local variables - - lon1_deg = lon1 - lon1_deg = mod(lon1_deg,360.d0) - if(lon1_deg .lt. 0.d0) then - lon1_deg = lon1_deg + 360.d0 - end if ! if(lon1_deg .lt. 0.d0) - lon2_deg = lon2 - lon2_deg = mod(lon2_deg,360.d0) - if(lon2_deg .lt. 0.d0) then - lon2_deg = lon2_deg + 360.d0 - end if ! if(lon2_deg .lt. 0.d0) - if(lat1 .lt. lat2) then - lon1_rad = lon1_deg*deg2rad - lat1_rad = (90.d0 - lat1)*deg2rad - lon2_rad = lon2_deg*deg2rad - lat2_rad = (90.d0 - lat2)*deg2rad - else if(lat1 .eq. lat2 .and. lon1_deg .le. lon2_deg) then - lon1_rad = lon1_deg*deg2rad - lat1_rad = (90.d0 - lat1)*deg2rad - lon2_rad = lon2_deg*deg2rad - lat2_rad = (90.d0 - lat2)*deg2rad - else - lon1_rad = lon2_deg*deg2rad - lat1_rad = (90.d0 - lat2)*deg2rad - lon2_rad = lon1_deg*deg2rad - lat2_rad = (90.d0 - lat1)*deg2rad - end if ! if(lat1 .lt. lat2) - x1 = sin(lat1_rad)*cos(lon1_rad) - y1 = sin(lat1_rad)*sin(lon1_rad) - z1 = cos(lat1_rad) - x2 = sin(lat2_rad)*cos(lon2_rad) - y2 = sin(lat2_rad)*sin(lon2_rad) - z2 = cos(lat2_rad) - dr = acos(min(1.d0,x1*x2 + y1*y2 + z1*z2)) - dist = dr*rearth_equator - - !===================================================================== - - end subroutine radialdist - - !======================================================================= - -end module grid_methods_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/json_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/json_interface.F90 deleted file mode 100644 index bd0894b57..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/json_interface.F90 +++ /dev/null @@ -1,146 +0,0 @@ -module json_interface - - !======================================================================= - - !$$$ MODULE DOCUMENTATION BLOCK - - ! obs-preproc :: json_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - !======================================================================= - - ! Define associated modules and subroutines - - use fson - use fson_value_m - use kinds_interface - use variable_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: json_interface_nrecs - public :: json_interface_read - interface json_interface_read - module procedure read_bufr_info - end interface json_interface_read - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! json_interface_nrecs.f90 - - ! DESCRIPTION: - - ! This subroutine defines the number of records within the external - ! JSON formatted file specified by the user using the FSON API - ! utilities. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! a JSON formatted file. - - !----------------------------------------------------------------------- - - subroutine json_interface_nrecs(filename,json_size) - - ! Define variables passed to routine - - character(len=500) :: filename - integer :: json_size - - ! Define variables computed within routine - - type(fson_value), pointer :: json_file - - !===================================================================== - - ! Define local variables - - json_file => fson_parse(trim(adjustl(filename))) - json_size = fson_value_count(json_file) - - !===================================================================== - - end subroutine json_interface_nrecs - - !======================================================================= - - ! SUBROUTINE: - - ! read_bufr_flag.f90 - - ! DESCRIPTION: - - ! This subroutine parses a JSON formatted file and defines the BUFR - ! record attributes as specified by the user. - - ! INPUT VARIABLES: - - ! * bufr_info; a FORTRAN bufr_info_struct variable. - - ! * filename; a FORTRAN character string specifying the full-path to - ! the user specified JSON formatted file containing the BUFR - ! record attributes. - - ! OUTPUT VARIABLES: - - ! * bufr_info; a FORTRAN bufr_info_struct variable containing the - ! BUFR record attributes specified by the user. - - !----------------------------------------------------------------------- - - subroutine read_bufr_info(bufr_info) - - ! Define variables passed to routine - - type(bufr_info_struct) :: bufr_info - character(len=500) :: filename - - ! Define variables computed within routine - - type(fson_value), pointer :: json_data - type(fson_value), pointer :: json_item - integer :: json_size - - !===================================================================== - - ! Define local variables - - json_data => fson_parse(bufr_info%filename) - json_item => fson_value_get(json_data,1) - call fson_get(json_item,'subset',bufr_info%subset) - call fson_get(json_item,'obs_type_mass',bufr_info%obs_type_mass) - call fson_get(json_item,'obs_type_wind',bufr_info%obs_type_wind) - call fson_destroy(json_data) - - !===================================================================== - - end subroutine read_bufr_info - - !======================================================================= - -end module json_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/kinds_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/kinds_interface.F90 deleted file mode 100644 index d9448d59c..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/kinds_interface.F90 +++ /dev/null @@ -1,119 +0,0 @@ -module kinds_interface - - !======================================================================= - - !$$$ MODULE DOCUMENTATION BLOCK - - ! obs-preproc :: kinds_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - !======================================================================= - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: default_integer - public :: default_real - public :: i_byte - public :: i_kind - public :: i_llong - public :: i_long - public :: i_short - public :: num_bytes_for_i_byte - public :: num_bytes_for_i_kind - public :: num_bytes_for_i_llong - public :: num_bytes_for_i_long - public :: num_bytes_for_i_short - public :: num_bytes_for_r_double - public :: num_bytes_for_r_quad - public :: num_bytes_for_r_kind - public :: num_bytes_for_r_single - public :: r_double - public :: r_kind - public :: r_quad - public :: r_single - - !----------------------------------------------------------------------- - - ! Define local variables - - integer, parameter :: & - & default_integer = 3 - integer, parameter :: & - & default_real = 1 - integer, parameter :: & - & llong_t = selected_int_kind(16) - integer, parameter :: & - & num_bytes_for_i_byte = 1 - integer, parameter :: & - & num_bytes_for_i_short = 2 - integer, parameter :: & - & num_bytes_for_i_long = 4 - integer, parameter :: & - & num_bytes_for_i_llong = 8 - integer, parameter :: & - & num_i_kinds = 4 - integer, dimension(num_i_kinds), parameter :: & - & integer_byte_sizes = & - & (/num_bytes_for_i_byte,num_bytes_for_i_short, & - & num_bytes_for_i_long,num_bytes_for_i_llong/) - integer, parameter :: & - & num_bytes_for_i_kind = integer_byte_sizes(default_integer) - integer, parameter :: & - & i_byte = selected_int_kind(1) - integer, parameter :: & - & i_short = selected_int_kind(4) - integer, parameter :: & - & i_long = selected_int_kind(8) - integer, parameter :: & - & i_llong = max(llong_t,i_long) - integer, dimension(num_i_kinds), parameter :: & - & integer_types = (/i_byte,i_short,i_long,i_llong/) - integer, parameter :: & - & i_kind = integer_byte_sizes(default_integer) - integer, parameter :: & - & num_r_kinds = 3 - integer, parameter :: & - & r_single = selected_real_kind(6) - integer, parameter :: & - & r_double = selected_real_kind(15) - integer, parameter :: & - & quad_t = selected_real_kind(20) - integer, parameter :: & - & r_quad = max(quad_t,r_double) - integer, parameter :: & - & num_bytes_for_r_single = 4 - integer, parameter :: & - & num_bytes_for_r_double = 8 - integer, parameter :: & - & num_bytes_for_r_quad = 16 - integer, dimension(num_r_kinds), parameter :: & - & real_kinds = (/r_single,r_double,r_quad/) - integer, dimension(num_r_kinds), parameter :: & - & real_byte_sizes = (/num_bytes_for_r_single, & - & num_bytes_for_r_double,num_bytes_for_r_quad/) - integer, parameter :: & - & r_kind = real_kinds(default_real) - integer, parameter :: & - & num_bytes_for_r_kind = real_byte_sizes(default_real) - - !======================================================================= - -end module kinds_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/main.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/main.F90 deleted file mode 100644 index f21561631..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/main.F90 +++ /dev/null @@ -1,48 +0,0 @@ -program obs_preproc_main - - !======================================================================= - - !$$$ PROGRAM DOCUMENTATION BLOCK - - ! obs-preproc :: obs_preproc_main - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - ! Review the README, within the top-level directory, which provides - ! relevant instructions and (any) references cited by algorithms - ! within this software suite. - - !======================================================================= - - ! Define associated modules and subroutines - - use obs_preproc_interface - - ! Define interfaces and attributes for module routines - - implicit none - - !======================================================================= - - ! Compute local variables - - call obs_preproc() - - !======================================================================= - -end program obs_preproc_main diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/math_methods_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/math_methods_interface.F90 deleted file mode 100644 index 9e68d056d..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/math_methods_interface.F90 +++ /dev/null @@ -1,913 +0,0 @@ -module math_methods_interface - - !======================================================================= - - !$$$ MODULE DOCUMENTATION BLOCK - - ! obs-preproc :: math_methods_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - !======================================================================= - - ! Define associated modules and subroutines - - use constants_interface - use kdtree2_module - use kinds_interface - use variable_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: math_methods_kdtree_nn - public :: math_methods_kdtree_r2 - public :: math_methods_llp_interp - public :: math_methods_normalize_values - public :: math_methods_remove_duplicates - public :: math_methods_sort_array - public :: math_methods_spline_interp - public :: math_methods_stats - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! init_stats.f90 - - ! DESCRIPTION: - - ! This subroutine initializes a statgrid_struct variable. - - ! INPUT VARIABLES: - - ! * statgrid; an uninitialized FORTRAN statgrid_struct variable. - - ! OUTPUT VARIABLES: - - ! * statgrid; an initialized FORTRAN statgrid_struct variable. - - !----------------------------------------------------------------------- - - subroutine init_stats(statgrid) - - ! Define variables passed to routine - - type(statgrid_struct) :: statgrid - - !===================================================================== - - ! Define local variables - - statgrid%varmin = spval - statgrid%varmax = spval - statgrid%mean = spval - statgrid%vari = spval - statgrid%nvals = 0 - - !===================================================================== - - end subroutine init_stats - - !======================================================================= - - ! SUBROUTINE: - - ! math_methods_kdtree_nn.f90 - - ! DESCRIPTION: - - ! This subroutine implements a KD-tree search algorithm to locate - ! the N-nearest neighbor locations for a user specified geographical - ! location. - - ! REFERENCES: - - ! Kennel, M. B., 2004: KDTREE2: Fortran 95 and C++ software to - ! efficiently search for near neighbors in a multi-dimensional - ! Euclidean space. - - ! http://arxiv.org/PScache/phvsics/pdf/0408/0408067.pdf. - - ! INPUT VARIABLES: - - ! * src_grid; a FORTRAN grid_struct variable containing the - ! Euclidean space geographical locations within which to find - ! nearest-neighbors; geographical locations (e.g., latitudes and - ! longitudes) are assumed to have units of degrees. - - ! * dst_grid; a FORTRAN grid_struct variable containing the - ! geographical locations for which to find the N-nearest neighbor - ! locations; geographical locations (e.g., latitudes and - ! longitudes) are assumed to have units of degrees. - - ! * kdtree; a FORTRAN kdtree_struct variable containing (at minimum) - ! the number of coordinate values (the ncoords attribute should be - ! equal to the dst_grid variable ncoords attribute) and the number - ! of nearest-neighbors to seek (the nn attribute should be less - ! than or equal to the src_grid variable ncoords attribute). - - ! OUTPUT VARIABLES: - - ! * kdtree; a FORTRAN kdtree_struct variable containing the - ! N-nearest neighbor R^2 distances and src_grid variable - ! coordinate values (r2dist and idx attributes, respectively); the - ! units for the r2dist attribute are meters squared. - - !----------------------------------------------------------------------- - - subroutine math_methods_kdtree_nn(src_grid,dst_grid,kdtree) - - ! Define variables passed to routine - - type(grid_struct) :: dst_grid - type(grid_struct) :: src_grid - type(kdtree_struct) :: kdtree - - ! Define variables computed within routine - - type(kdtree2), pointer :: kdtree2 - type(kdtree2_result) :: sresults(kdtree%nn) - real(r_kind), dimension(:,:), allocatable :: src_grdloc - real(r_kind) :: dst_grdloc(3) - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(src_grdloc)) & - & allocate(src_grdloc(3,src_grid%ncoords)) - - ! Loop through local variables - - do i = 1, src_grid%ncoords - - ! Compute local variables - - src_grdloc(1,i) = rearth_equator*cos(src_grid%lat(i)*deg2rad)* & - & cos(src_grid%lon(i)*deg2rad) - src_grdloc(2,i) = rearth_equator*cos(src_grid%lat(i)*deg2rad)* & - & sin(src_grid%lon(i)*deg2rad) - src_grdloc(3,i) = rearth_equator*sin(src_grid%lat(i)*deg2rad) - - end do ! do i = 1, src_grid%ncoords - - ! Compute local variables - - kdtree2 => kdtree2_create(src_grdloc,sort=.true.,rearrange=.true.) - - ! Loop through local variables - - do i = 1, dst_grid%ncoords - - ! Compute local variables - - dst_grdloc(1) = rearth_equator*cos(dst_grid%lat(i)*deg2rad)* & - & cos(dst_grid%lon(i)*deg2rad) - dst_grdloc(2) = rearth_equator*cos(dst_grid%lat(i)*deg2rad)* & - & sin(dst_grid%lon(i)*deg2rad) - dst_grdloc(3) = rearth_equator*sin(dst_grid%lat(i)*deg2rad) - - ! Define local variables - - call kdtree2_n_nearest(tp=kdtree2,qv=dst_grdloc,nn=kdtree%nn, & - & results=sresults) - kdtree%r2dist(i,1:kdtree%nn) = sresults(1:kdtree%nn)%dis - kdtree%idx(i,1:kdtree%nn) = sresults(1:kdtree%nn)%idx - - end do ! do i = 1, dst_grid%ncoords - - ! Deallocate memory for local variables - - call kdtree2_destroy(kdtree2) - if(allocated(src_grdloc)) deallocate(src_grdloc) - - !===================================================================== - - end subroutine math_methods_kdtree_nn - - !======================================================================= - - ! SUBROUTINE: - - ! math_methods_kdtree_r2.f90 - - ! DESCRIPTION: - - ! This subroutine finds the N nearest-neighbors within a user - ! specified radius of a given location. - - ! REFERENCES: - - ! Kennel, M. B., 2004: KDTREE2: Fortran 95 and C++ software to - ! efficiently search for near neighbors in a multi-dimensional - ! Euclidean space. - - ! http://arxiv.org/PScache/phvsics/pdf/0408/0408067.pdf. - - ! INPUT VARIABLES: - - ! * dst_grid; a FORTRAN grid_struct variable containing the - ! Euclidean space geographical locations within which to find - ! nearest-neighbors; geographical locations (e.g., latitudes and - ! longitudes) are assumed to have units of degrees. - - ! * src_grid; a FORTRAN grid_struct variable containing the - ! geographical locations for which to find the N-nearest neighbor - ! locations; geographical locations (e.g., latitudes and - ! longitudes) are assumed to have units of degrees. - - ! * kdtree; a FORTRAN kdtree_struct variable containing (at minimum) - ! the number of coordinate values (the ncoords attribute should be - ! equal to the dst_grid variable ncoords attribute) and the radial - ! distance within which to seek the nearest neighbors. - - ! OUTPUT VARIABLES: - - ! * kdtree; a FORTRAN kdtree_struct variable containing the - ! N-nearest neighbors within the R^2 distance specified by the - ! user. - - !----------------------------------------------------------------------- - - subroutine math_methods_kdtree_r2(src_grid,dst_grid,kdtree) - - ! Define variables passed to routine - - type(grid_struct) :: dst_grid - type(grid_struct) :: src_grid - type(kdtree_struct) :: kdtree - - ! Define variables computed within routine - - type(kdtree2), pointer :: kdtree2 - type(kdtree2_result) :: sresults(kdtree%nalloc) - real(r_kind), dimension(:,:), allocatable :: src_grdloc - real(r_kind) :: dst_grdloc(3) - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(src_grdloc)) & - & allocate(src_grdloc(3,dst_grid%ncoords)) - - ! Loop through local variables - - do i = 1, dst_grid%ncoords - - ! Compute local variables - - src_grdloc(1,i) = rearth_equator*cos(dst_grid%lat(i)*deg2rad)* & - & cos(dst_grid%lon(i)*deg2rad) - src_grdloc(2,i) = rearth_equator*cos(dst_grid%lat(i)*deg2rad)* & - & sin(dst_grid%lon(i)*deg2rad) - src_grdloc(3,i) = rearth_equator*sin(dst_grid%lat(i)*deg2rad) - - end do ! do i = 1, dst_grid%ncoords - - ! Compute local variables - - kdtree2 => kdtree2_create(src_grdloc,sort=.true.,rearrange=.true.) - dst_grdloc(1) = rearth_equator*cos(src_grid%gclat*deg2rad)* & - & cos(src_grid%gclon*deg2rad) - dst_grdloc(2) = rearth_equator*cos(src_grid%gclat*deg2rad)* & - & sin(src_grid%gclon*deg2rad) - dst_grdloc(3) = rearth_equator*sin(src_grid%gclat*deg2rad) - - ! Define local variables - - call kdtree2_r_nearest(tp=kdtree2,qv=dst_grdloc,r2=kdtree%r2,nfound= & - & kdtree%nfound,nalloc=kdtree%nalloc,results=sresults) - kdtree%r2dist(1,1:kdtree%nfound) = sresults(1:kdtree%nfound)%dis - kdtree%idx(1,1:kdtree%nfound) = sresults(1:kdtree%nfound)%idx - - ! Deallocate memory for local variables - - call kdtree2_destroy(kdtree2) - if(allocated(src_grdloc)) deallocate(src_grdloc) - - !===================================================================== - - end subroutine math_methods_kdtree_r2 - - !======================================================================= - - ! SUBROUTINE: - - ! math_methods_llp_interp.f90 - - ! DESCRIPTION: - - ! This subroutine interpolates a vertical profile from a source - ! profile to a destination profile using linear-log pressure - ! interpolation. - - ! INPUT VARIABLES: - - ! * interp_p; a FORTRAN interp_p_struct variable containing the - ! source pressure and variable profiles as well as the surface - ! pressure. - - ! * dstp; a FORTRAN 4-byte real value specifying the pressure level - ! for which to interpolate the respective source profile variable. - - ! OUTPUT VARIABLES: - - ! * dstvar; a FORTRAN 4-byte real value specifying the interpolated - ! profile variable value. - - !----------------------------------------------------------------------- - - subroutine math_methods_llp_interp(interp_p,dstp,dstvar) - - ! Define variables passed to routine - - type(interp_p_struct) :: interp_p - real(r_kind) :: dstp - real(r_kind) :: dstvar - - ! Define variables computed within routine - - integer :: idx_b - integer :: idx_t - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - dstvar = spval - idx_b = 0 - idx_t = 0 - - ! Loop through local variable - - do i = 2, interp_p%nz - - ! Check local variable and proceed accordingly - - if(dstp .le. interp_p%p(i-1) .and. dstp .gt. interp_p%p(i)) then - - ! Define local variables - - idx_b = i - 1 - idx_t = i - goto 1000 - - end if ! if(dstp .le. interp_p%p(i-1) .and. dstp - ! .gt. interp_p%p(i)) - - end do ! do i = 2, interp_p%nz - - ! Define local variables - -1000 continue - - ! Check local variable and proceed accordingly - - if(idx_b .eq. 0 .and. idx_t .eq. 0) then - - ! Define local variables - - idx_b = interp_p%nz - idx_t = 1 - - end if ! if(idx_b .eq. 0 .and. idx_t .eq. 0) - - ! Compute local variables - - dstvar = interp_p%var(idx_b) + (interp_p%var(idx_t) - & - & interp_p%var(idx_b))*((log(dstp) - log(interp_p%p(idx_b)))/ & - & (log(interp_p%p(idx_t)) - log(interp_p%p(idx_b)))) - - !===================================================================== - - end subroutine math_methods_llp_interp - - !======================================================================= - - ! SUBROUTINE: - - ! math_methods_normalize_values.f90 - - ! DESCRIPTION: - - ! This subroutine normalizes a variable array relative to the - ! respective variables attributes. - - ! REFERENCES: - - ! https://en.wikipedia.org/wiki/Feature_scaling - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN statgrid_struct variable containing the variable - ! array to be normalized. - - ! * norma; the minumum value about which to standardize the array. - - ! * normb; the maximum value about which to standardize the array. - - !----------------------------------------------------------------------- - - subroutine math_methods_normalize_values(grid,norma,normb) - - ! Define variables passed to routine - - type(statgrid_struct) :: grid - real(r_kind) :: norma - real(r_kind) :: normb - - ! Define variables computed within routine - - real(r_kind), dimension(:), allocatable :: var - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(var)) allocate(var(grid%n)) - - ! Compute local variables - - call math_methods_stats(grid) - - ! Loop through local variable - - do i = 1, grid%n - - ! Compute local variables - - var(i) = norma + (((grid%var(i) - grid%varmin)*(normb - norma))/ & - & (grid%varmax - grid%varmin)) - - end do ! do i = 1, grid%n - - ! Define local variables - - grid%var = var - - ! Deallocate memory for local variables - - if(allocated(var)) deallocate(var) - - !===================================================================== - - end subroutine math_methods_normalize_values - - !======================================================================= - - ! SUBROUTINE: - - ! math_methods_remove_duplicates.f90 - - ! DESCRIPTION: - - ! This subroutine ingests a FORTRAN interp_spline_struct variable - ! and removes duplicate values from the independent variable array. - - ! INPUT VARIABLES: - - ! * grid_in; a FORTRAN interp_spline_struct variable containing - ! possible duplicate values within the independent variable array, - ! xa. - - ! * grid_out; a FORTRAN interp_spline_struct variable to contain the - ! ingested interp_spline_struct variable grid_in, but devoid of - ! duplicate values. - - ! OUTPUT VARIABLES: - - ! * grid_out; a FORTRAN interp_spline_struct variable, initialized - ! as grid_in but no longer containing duplicate values within the - ! independent variable array, xa. - - !----------------------------------------------------------------------- - - subroutine math_methods_remove_duplicates(grid_in,grid_out) - - ! Define variables passed to routine - - type(interp_spline_struct) :: grid_in - type(interp_spline_struct) :: grid_out - - ! Define variables computed within routine - - logical, dimension(:), allocatable :: mask - integer :: num - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(mask)) allocate(mask(grid_in%n)) - - ! Define local variables - - mask = .false. - - ! Loop through local variable - - do i = 1, grid_in%n - - ! Define local variables - - num = count(grid_in%xa(i)==grid_in%xa) - - ! Check local variable and proceed accordingly - - if(num == 1) then - - ! Define local variables - - mask(i) = .true. - - else ! if(num == 1) - - ! Check local variable and proceed accordingly - - if(.not. any(grid_in%xa(i)==grid_in%xa .and. mask)) then - - ! Define local variables - - mask(i) = .true. - - end if ! if(.not. any(grid_in%xa(i)==grid_in%xa .and. mask)) - - end if ! if(num == 1) - - end do ! do i = 1, grid_in%n - - ! Define local variables - - grid_out%n = count(mask) - call variable_interface_setup_struct(grid_out) - grid_out%xa = pack(grid_in%xa,mask) - grid_out%ya = pack(grid_in%ya,mask) - - ! Deallocate memory for local variables - - if(allocated(mask)) deallocate(mask) - - !===================================================================== - - end subroutine math_methods_remove_duplicates - - !======================================================================= - - ! SUBROUTINE: - - ! math_methods_sort_array.f90 - - ! DESCRIPTION: - - ! This subroutine implements the SLATEC ssort routine to sort a - ! dependent array (ya) relative to a sorted independent array (xa); - ! the arrays may be sorted in either the ascending or descending - ! direction. - - ! REFERENCES: - - ! Singleton, R.C., 1969. Algorithm 347: an efficient algorithm for - ! sorting with minimal storage [M1]. Communications of the ACM, - ! 12(3), pp.185-186. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN interp_spline_struct containing the independent - ! (xa) and dependent (ya) variable arrays to be sorted. - - ! * ascend; a FORTRAN logical variable specifying whether the arrays - ! are to be sorted in the ascending direction. - - ! * descend; a FORTRAN logical variable specifying whether the - ! arrays are to be sorted in the descending direction. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN interp_spline_struct containing the sorted - ! independent (xa) and dependent (ya) variable arrays. - - !----------------------------------------------------------------------- - - subroutine math_methods_sort_array(grid,ascend,descend) - - ! Define variables passed to routine - - type(interp_spline_struct) :: grid - logical :: ascend - logical :: descend - - ! Define variables computed within routine - - real(r_kind), dimension(:), allocatable :: xa - real(r_kind), dimension(:), allocatable :: ya - integer :: kflag - integer :: n - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(ascend) kflag = 2 - if(descend) kflag = -2 - - ! Define local variables - - n = grid%n - - ! Check local variable and proceed accordingly - - if(n .ge. 2) then - - ! Allocate memory for local variables - - if(.not. allocated(xa)) allocate(xa(n)) - if(.not. allocated(ya)) allocate(ya(n)) - - ! Define local variables - - xa = grid%xa - ya = grid%ya - call ssort(xa,ya,n,kflag) - grid%xa = xa - grid%ya = ya - - ! Deallocate memory for local variables - - if(allocated(xa)) deallocate(xa) - if(allocated(ya)) deallocate(ya) - - end if ! if(n .ge. 2) - - !===================================================================== - - end subroutine math_methods_sort_array - - !======================================================================= - - ! SUBROUTINE: - - ! math_methods_spline_interp.f90 - - ! DESCRIPTION: - - ! This subroutine interpolates, using cubic splines, to find the - ! value of a variable at a location specified by the user; this - ! subroutine implements the sort2 subroutine of SLATEC and the - ! spline_cubic_set and spline_cubic_val subroutines of SPLINE. - - ! REFERENCES: - - ! de Boor, C., 1978: A practical guide to splines. Springer-Verlag, - ! 346pp. - - ! https://people.sc.fsu.edu/~jburkardt/f_src/spline/spline.html - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN interp_spline_struct containing the location - ! (xa) and variable (ya) arrays as well as the interpolation - ! location (x). - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN interp_spline_struct containing the interpolated - ! value (y). - - !----------------------------------------------------------------------- - - subroutine math_methods_spline_interp(grid) - - ! Define variables passed to routine - - type(interp_spline_struct) :: grid - - ! Define variables computed within routine - - type(interp_spline_struct) :: gridl - real(r_double), dimension(:), allocatable :: xa - real(r_double), dimension(:), allocatable :: ya - real(r_double), dimension(:), allocatable :: y2a - real(r_double) :: yp - real(r_double) :: ypp - real(r_double) :: yp1 - real(r_double) :: ypn - real(r_double) :: x - real(r_double) :: y - integer :: n - - !===================================================================== - - ! Define local variables - - call math_methods_remove_duplicates(grid,gridl) - x = dble(grid%x) - n = gridl%n - - ! Allocate memory for local variables - - if(.not. allocated(xa)) allocate(xa(n)) - if(.not. allocated(ya)) allocate(ya(n)) - if(.not. allocated(y2a)) allocate(y2a(n)) - - ! Check local variable and proceed accordingly - - if(gridl%n .ge. 2) then - - ! Define local variables - - call math_methods_sort_array(gridl,.true.,.false.) - yp1 = dble(0.0) - ypn = dble(0.0) - xa = dble(gridl%xa) - ya = dble(gridl%ya) - - ! Compute local variables - - call spline_cubic_set(n,xa(1:n),ya(1:n),3,yp1,3,ypn,y2a) - call spline_cubic_val(n,xa(1:n),ya(1:n),y2a(1:n),x,y,yp,ypp) - - end if ! if(gridl%n .ge. 2) - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(gridl) - if(allocated(xa)) deallocate(xa) - if(allocated(ya)) deallocate(ya) - if(allocated(y2a)) deallocate(y2a) - - ! Define local variables - - grid%y = real(y) - - !===================================================================== - - end subroutine math_methods_spline_interp - - !======================================================================= - - ! SUBROUTINE: - - ! math_methods_stats.f90 - - ! DESCRIPTION: - - ! This subroutine defines/computes the attributes of a variable - ! array and returns the respective attibutes. - - ! INPUT VARIABLES: - - ! * statgrid; a FORTRAN statgrid_struct variable. - - ! OUTPUT VARIABLES: - - ! * statgrid; a FORTRAN statgrid_struct variable. - - !----------------------------------------------------------------------- - - subroutine math_methods_stats(statgrid) - - ! Define variables passed to routine - - type(statgrid_struct) :: statgrid - - ! Define variables computed within routine - - real(r_kind) :: sum - real(r_kind) :: sumsq - real(r_kind) :: varmin - real(r_kind) :: varmax - integer :: count - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - call init_stats(statgrid) - varmin = spval - varmax = -spval - sum = 0.0 - count = 0 - - ! Loop through local variable - - do i = 1, statgrid%n - - ! Check local variable and proceed accordingly - - if(statgrid%var(i) .ne. spval) then - - ! Define local variables - - varmin = min(varmin,statgrid%var(i)) - varmax = max(varmax,statgrid%var(i)) - - ! Compute local variables - - sum = sum + statgrid%var(i) - count = count + 1 - - end if ! if(vargrid%var(i) .ne. spval) - - end do ! do i = 1, statgrid%n - - ! Check local variable and proceed accordingly - - if(abs(varmax) .eq. spval) varmax = spval - if(varmin .ne. spval) statgrid%varmin = varmin - if(varmax .ne. spval) statgrid%varmax = varmax - if(count .gt. 0) statgrid%mean = sum/real(count) - if(statgrid%mean .ne. spval) then - - ! Define local variables - - sum = 0.0 - sumsq = 0.0 - - ! Loop through local variable - - do i = 1, statgrid%n - - ! Check local variable and proceed accordingly - - if(statgrid%var(i) .ne. spval) then - - ! Compute local variables - - sum = sum + (statgrid%var(i) - statgrid%mean) - sumsq = sumsq + ((statgrid%var(i) - statgrid%mean)* & - & (statgrid%var(i) - statgrid%mean)) - - end if ! if(statgrid%var(i) .ne. spval) - - end do ! do i = 1, statgrid%n - - ! Check local variable and proceed accordingly - - if(count .gt. 1) then - - ! Compute local variables - - statgrid%vari = (sumsq - (sum*sum)/count)/(count - 1) - statgrid%stdev = sqrt(statgrid%vari) - - end if ! if(count .gt. 1) - - end if ! if(statgrid%mean .ne. spval) - - ! Define local variables - - statgrid%nvals = count - - !===================================================================== - - end subroutine math_methods_stats - - !======================================================================= - -end module math_methods_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/meteo_methods_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/meteo_methods_interface.F90 deleted file mode 100644 index 6e412440c..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/meteo_methods_interface.F90 +++ /dev/null @@ -1,504 +0,0 @@ -module meteo_methods_interface - - !======================================================================= - - !$$$ MODULE DOCUMENTATION BLOCK - - ! obs-preproc :: meteo_methods_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - !======================================================================= - - ! Define associated modules and subroutines - - use constants_interface - use kinds_interface - use variable_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: meteo_methods_dwpttemp - public :: meteo_methods_geolatdist - public :: meteo_methods_pottemp - public :: meteo_methods_spechumd - public :: meteo_methods_vpottemp - public :: meteo_methods_wspdwdir - public :: meteo_methods_wvmxrt - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! meteo_methods_dwpttemp.f90 - - ! DESCRIPTION: - - ! This subroutine computes the dewpoint temperature (dwpt; Kelvin) - ! from the temperture (t; Kelvin) and relative humidity (rh; - ! percentage) profiles. - - ! REFERENCES: - - ! http://andrew.rsmas.miami.edu/bmcnoldy/humidity_conversions.pdf - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable containing the temperature - ! (t; Kelvin) and relative humidity (rh; percentage) profiles. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable containing the dewpoint - ! temperature (dwpt; Kelvin) profile. - - !----------------------------------------------------------------------- - - subroutine meteo_methods_dwpttemp(grid) - - ! Define variables passed to routine - - type(meteo_struct) :: grid - - ! Define variables computed within routine - - real(r_double) :: a - real(r_double) :: b - real(r_double) :: abt - real(r_double) :: lrhp - real(r_double) :: svpt0 - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - a = dble(17.625) - b = dble(243.04) - svpt0 = dble(273.15) - grid%dwpt = spval - - ! Loop through local variable - - do i = 1, grid%nz - - ! Check local variable and proceed accordingly - - if(grid%t(i) .ne. spval .and. grid%rh(i) .ne. spval) then - - ! Compute local variables - - abt = (a*(grid%t(i) - svpt0))/(b + (grid%t(i) - svpt0)) - lrhp = log(grid%rh(i)/dble(100.0)) - grid%dwpt(i) = (b*(lrhp + abt))/(a - lrhp - abt) + svpt0 - - end if ! if(grid%t(i) .ne. spval .and. grid%rh(i) .ne. spval) - - end do ! do i = 1, grid%nz - - !===================================================================== - - end subroutine meteo_methods_dwpttemp - - !======================================================================= - - ! SUBROUTINE: - - ! meteo_methods_geolatdist.f90 - - ! DESCRIPTION: - - ! This subroutine computes the zonal- and meridional-displacement - ! (dx and dy, respectively) as a function of latitude. - - ! INPUT VARIABLES: - - ! * lat; a FORTRAN 4-byte real value specifying the latitude of - ! interest; units are degrees. - - ! * dx; a FORTRAN 4-byte real value to define the - ! zonal-displacement, dx. - - ! * dy; a FORTRAN 4-byte real value to define the - ! meridional-displacement, dy. - - ! OUTPUT VARIABLES: - - ! * dx; a FORTRAN 4-byte real value specifying the - ! zonal-displacement, dx; units are meters. - - ! * dy; a FORTRAN 4-byte real value specifying the - ! meridional-displacement, dy; units are meters. - - !----------------------------------------------------------------------- - - subroutine meteo_methods_geolatdist(lat,dx,dy) - - ! Define variables passed to routine - - real(r_kind) :: lat - real(r_kind) :: dx - real(r_kind) :: dy - - !===================================================================== - - ! Compute local variables - - dx = 111.32*cos(lat*deg2rad)*1000.0 - dy = 110.574*1000.0 - - !===================================================================== - - end subroutine meteo_methods_geolatdist - - !======================================================================= - - ! SUBROUTINE: - - ! meteo_methods_pottemp.f90 - - ! DESCRIPTION: - - ! This subroutine computes the potential temperature (thta; Kelvin) - ! profile from the temperature (t; Kelvin) and pressure (p; Pascals) - ! profiles. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable containing the temperature - ! (t; Kelvin) and pressure (p; Pascals) profiles. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable containing the computed - ! potential temperature (thta; Kelvin) profile. - - !----------------------------------------------------------------------- - - subroutine meteo_methods_pottemp(grid) - - ! Define variables passed to routine - - type(meteo_struct) :: grid - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - grid%thta = spval - - ! Loop through local variable - - do i = 1, grid%nz - - ! Check local variable and proceed accordingly - - if(grid%t(i) .ne. spval .and. grid%p(i) .ne. spval) then - - ! Compute local variables - - grid%thta(i) = grid%t(i)*(dble(100000.0)/grid%p(i))** & - & dble(rd_over_cp_mass) - - end if ! if(grid%t(i) .ne. spval .and. grid%p(i) .ne. spval) - - end do ! do i = 1, grid%nz - - !===================================================================== - - end subroutine meteo_methods_pottemp - - !======================================================================= - - ! SUBROUTINE: - - ! meteo_methods_spechumd.f90 - - ! DESCRIPTION: - - ! This subroutine computes the specific humidity value. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable containing the pressure - ! (p; Pascals), the temperature (t; Kelvin) and relative humidity - ! (rh; percentage) values. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable containing the computed - ! specific humidity value (q; kilograms per kilograms). - - !----------------------------------------------------------------------- - - subroutine meteo_methods_spechumd(grid) - - ! Define variables passed to routine - - type(meteo_struct) :: grid - - !===================================================================== - - ! Compute local variables - - call meteo_methods_wvmxrt(grid) - grid%q = grid%wvmxrt/(dble(1.0) + grid%wvmxrt) - - !===================================================================== - - end subroutine meteo_methods_spechumd - - !======================================================================= - - ! SUBROUTINE: - - ! meteo_methods_vpottemp.f90 - - ! DESCRIPTION: - - ! This subroutine computes the virtual potential temperature (thtv; - ! Kelvin) profile from the temperature (t; Kelvin), water vapor - ! mixing ratio (q; kilograms per kilograms), and pressure (p; - ! Pascals) profiles. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable containing the temperature - ! (t; Kelvin), water vapor mixing ratio (q; kilograms per - ! kilograms), and pressure (p; Pascals) profiles. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable containing the computed - ! virtual potential temperature (thtv; Kelvin) profile. - - !----------------------------------------------------------------------- - - subroutine meteo_methods_vpottemp(grid) - - ! Define variables passed to routine - - type(meteo_struct) :: grid - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - grid%thtv = spval - - ! Loop through local variable - - do i = 1, grid%nz - - ! Check local variable and proceed accordingly - - if(grid%t(i) .ne. spval .and. grid%q(i) .ne. spval .and. grid%p(i) & - & .ne. spval) then - - ! Compute local variables - - grid%thtv(i) = (grid%q(i)*grid%t(i))*(dble(100000.0)/ & - & grid%p(i))**dble(rd_over_cp_mass) - - end if ! if(grid%t(i) .ne. spval .and. grid%q(i) .ne. spval - ! .and. grid%p(i) .ne. spval) - - end do ! do i = 1, grid%nz - - !===================================================================== - - end subroutine meteo_methods_vpottemp - - !======================================================================= - - ! SUBROUTINE: - - ! meteo_methods_wspdwdir.f90 - - ! DESCRIPTION: - - ! This subroutine computes the wind speed magnitude and - ! meteorological wind speed direction profiles from the zonal- and - ! meridional-wind speed component profiles. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable containing the zonal- and - ! meridional-wind speed component profiles. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable containing the computed - ! wind-speed magnitude (wspd; meters per second) and - ! wind-direction profiles (wdir; degrees). - - !----------------------------------------------------------------------- - - subroutine meteo_methods_wspdwdir(grid) - - ! Define variables passed to routine - - type(meteo_struct) :: grid - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - grid%wspd = spval - grid%wdir = spval - - ! Loop through local variable - - do i = 1, grid%nz - - ! Check local variable and proceed accordingly - - if(grid%u(i) .ne. spval .and. grid%v(i) .ne. spval) then - - ! Compute local variables - - grid%wspd(i) = dble(sqrt(grid%u(i)*grid%u(i) + & - & grid%v(i)*grid%v(i))) - grid%wdir(i) = dble(atan2(grid%u(i),grid%v(i)))*dble(rad2deg) + & - & dble(180.0) - - end if ! if(grid%u(i) .ne. spval .and. grid%v(i) .ne. spval) - - end do ! do i = 1, grid%nz - - !===================================================================== - - end subroutine meteo_methods_wspdwdir - - !======================================================================= - - ! SUBROUTINE: - - ! meteo_methods_wvmxrt.f90 - - ! DESCRIPTION: - - ! This subroutine computes the water vapor mixing ratio profile from - ! the temperature (t) and relative humidity (rh) profiles. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable containing the temperature - ! (t; Kelvin) and relative humidity (rh; percentage) profiles. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable containing the computed - ! water vapor mixing ratio profile (q; kilograms per kilograms). - - !----------------------------------------------------------------------- - - subroutine meteo_methods_wvmxrt(grid) - - ! Define variables passed to routine - - type(meteo_struct) :: grid - - ! Define variables computed within routine - - real(r_double) :: eps - real(r_double) :: es - real(r_double) :: es0 - real(r_double) :: svp1 - real(r_double) :: svp2 - real(r_double) :: svp3 - real(r_double) :: svpt0 - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - es0 = dble(6.1121) - eps = dble(0.622) - svp1 = dble(0.6112) - svp2 = dble(17.67) - svp3 = dble(29.62) - svpt0 = dble(273.15) - grid%q = spval - - ! Loop through local variable - - do i = 1, grid%nz - - ! Check local variable and proceed accordingly - - if(grid%t(i) .ne. spval .and. grid%rh(i) .ne. spval) then - - ! Compute local variables - - es = dble(0.01)*grid%rh(i)*svp1*dble(10.0)*exp(svp2*(grid%t(i) & - & - svpt0)/(grid%t(i) - svp3)) - - ! Check local variable and proceed accordingly - - if(es .ge. grid%p(i)/dble(100.0)) then - - ! Define local variables - - grid%wvmxrt(i) = dble(1.e-6) - - else ! if(es .ge. grid%p(i)/dble(100.0)) - - ! Define local variables - - grid%wvmxrt(i) = max(eps*es/(grid%p(i)/dble(100.0) - es), & - & dble(1.e-6)) - - end if ! if(es .ge. grid%p(i)/dble(100.0)) - - end if ! if(grid%t(i) .ne. spval .and. grid%rh(i) .ne. spval) - - end do ! do i = 1, grid%nz - - !===================================================================== - - end subroutine meteo_methods_wvmxrt - - !======================================================================= - -end module meteo_methods_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/namelist_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/namelist_interface.F90 deleted file mode 100644 index 28a06c2bb..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/namelist_interface.F90 +++ /dev/null @@ -1,658 +0,0 @@ -module namelist_interface - - !======================================================================= - - !$$$ PROGRAM DOCUMENTATION BLOCK - - ! obs-preproc :: namelist_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - ! Review the README, within the top-level directory, which provides - ! relevant instructions and (any) references cited by algorithms - ! within this software suite. - - !======================================================================= - - ! Define associated modules and subroutines - - use kinds_interface - use variable_interface - - ! Define interfaces and attributes for module routines - - implicit none - - !----------------------------------------------------------------------- - - ! DESCRIPTION (alphabetized): - - ! * analdate; a FORTRAN character string specifying the analysis - ! date about which to define the observation times; formatted as, - ! assuming UNIX convention, ccyy-mm-dd_HH:MM:SS. - - ! * bufr_filepath; a FORTRAN character string specifying the - ! full-path to the BUFR file to be written (or appended) to. - - ! * bufr_info_filepath; a FORTRAN character string specifying - ! the full-path to the external file containing the BUFR - ! information for the respective observation type. - - ! * bufr_obs_filename; an array of FORTRAN character strings - ! specifying the path to the BUFR-formatted files to be used to - ! create the time-centered observations BUFR-formatted file. - - ! * bufr_obs_maxdate; a FORTRAN character string specifying the - ! maximum observation time for all time-centered observation - ! collected from bufr_obs_filename (see above); formatted as, - ! assuming UNIX convention, ccyy-mm-dd_HH:MM:SS. - - ! * bufr_obs_mindate; a FORTRAN character string specifying the - ! minimum observation time for all time-centered observation - ! collected from bufr_obs_filename (see above); formatted as, - ! assuming UNIX convention, ccyy-mm-dd_HH:MM:SS. - - ! * bufr_tblpath; a FORTRAN character string specifying the - ! full-path to the external file containing the BUFR table to be - ! written (or appended) to the output BUFR file. - - ! * datapath; a FORTRAN character string specifying the full-path to - ! the directory to contain output files written by the respective - ! routines. - - ! * debug; a FORTRAN logical value specifying whether to include - ! debug information during execution. - - ! Both is_fcst_model and is_fv3 must both be .true. for these - ! files to be invoked. - - ! * fv3_dyns_filename; an array of FORTRAN character strings - ! specifying the path to the FV3 netcdf files containing the - ! dynamical core variables; namely, the following netcdf - ! variables: - - ! + T; temperature (K). - - ! + delp; pressure layer difference (Pa). - - ! + ua; zonal wind on at the center of the grid cell (meters per - ! second). - - ! + va; meridional wind on at the center of the grid cell (meters - ! per second). - - ! * fv3_gridspec_filename; an array of FORTRAN character strings - ! specifying th path to the FV3 netcdf files containing the grid - ! geographical coordinate values; namely the following netcdf - ! variables: - - ! + lat; the grid cell corner latitude values. - - ! + latt; the grid cell center latitude values. - - ! + lon; the grid cell corner longitude values. - - ! + lont; the grid cell center longitude values. - - ! * fv3_orog_filename; an array of FORTRAN character strings - ! specifying the path to the FV3 netcdf files containing the - ! orography; namely the following netcdf variables: - - ! + slmsk; the land/sea mask. - - ! Both is_fcst_model and is_fv3 must both be .true. for these - ! files to be invoked. - - ! * fv3_static_filename; a FORTRAN character string specifying the - ! path to the FV3 netcdf file containing the static variables; - ! namely the following netcdf variables: - - ! + hyam; the hybrid-pressure coordinate values for the model - ! layers. - - ! + hybm; the hybrid-pressure coordinate values for the model - ! layers. - - ! Both is_fcst_model and is_fv3 must both be .true. for this file - ! to be invoked. - - ! * fv3_tracer_filename; an array of FORTRAN character strings - ! specifying the path to the FV3 netcdf files containing the - ! tracer variables; namely the following netcdf variables: - - ! + sphum; specific humidity (kilograms per kilogram). - - ! Both is_fcst_model and is_fv3 must both be .true. for these - ! files to be invoked. - - ! * grid_ratio; a FORTRAN 4-byte float value specifying the - ! grid-refinement ratio; used only for nested grid tiles. - - ! * is_bufrobs; a FORTRAN logical value specifying whether to - ! created BUFR-formatted observation files using the - ! bufr_obs_filename (see above) values and the values for - ! bufr_obs_maxdate and bufr_obs_mindate (see above). - - ! * is_fcst_model; a FORTRAN logical value specifying whether the - ! observations to be formatted are computed from forecast model - ! fields. - - ! * is_fv3; a FORTRAN logical value specifying whether the forecast - ! model, for the creation of observations from forecast model - ! fields, is from the FV3; is_fcst_model must be .true. to invoke - ! this option. - - ! * is_global; a FORTRAN logical value specifying whether the - ! ingested fields are from a global forecast model; applies only - ! if is_fcst_model is .true.. - - ! * is_gpsrobufr; a FORTRAN logical value specifying that the - ! time-centered observations are for Global Position System (GPS) - ! Radio Occultation (RO) observations; see is_bufrobs (above) and - ! bufr_obs_filename (above). - - ! * is_prepbufr; a FORTRAN logical value specifying that the - ! time-centered observations are for a prepbufr-type observation - ! file; see is_bufrobs (above) and bufr_obs_filename (above). - - ! * is_recon; a FORTRAN logical variable specifying whether the - ! observations to be formatted are derived from reconnissance-type - ! missions. - - ! * is_recon_vdm; a FORTRAN logical value specifying whether the - ! reconnissance observations are derived from vortex data message - ! (VDM) files. - - ! * is_recon_tdr; a FORTRAN logical value specifying whether the - ! reconnissance observations are derived from Tail-Doppler Radar - ! (TDR) Binary Universal Formatted (BUFR) files. - - ! * is_regional; a FORTRAN logical value specifying whether the - ! ingested fields are from a regional forecast model; applies only - ! if is_fcst_model is .true.. - - ! * is_relocate; a FORTRAN logical value specifying whether to - ! relocate forecast model derived observations relative to - ! tropical cyclone (TC) observed geographical locations. - - ! * is_rotate_winds; a FORTRAN logical value specifying whether to - ! rotate forecast model vector winds to an Earth-relative rotation - ! relative to a user specified geographical location. - - ! * is_satbufr; a FORTRAN logical value specifying that the - ! time-centered observations are for a satellite observation - ! bufr-type files; see is_bufrobs (above) and bufr_obs_filename - ! (above). - - ! * is_sonde; a FORTRAN logical value specifying whether the - ! observations to be formatted are derived from sondes. - - ! * is_sonde_tempdrop; a FORTRAN logical value specifying whether - ! the sonde observations are derived from TEMP-DROP messages. - - ! * mask_land; a FORTRAN logical value specifying whether to apply a - ! land-mask for observation values (i.e., all observations - ! occuring over non-zero topography are masked out -- not written - ! as a BUFR record). - - ! * mask_ocean; a FORTRAN logical value specifying whether to apply - ! a ocean-mask for observation values (i.e., all observations - ! occuring over ocean are masked out -- not written as a BUFR - ! record). - - ! * recon_filelist; a FORTRAN character string specifying the - ! full-path to the external file containing a list of files - ! containing aircraft reconnissance derived observations to be - ! written into a BUFR record. - - ! * recon_tdr_filepath; a FORTRAN character string specifying the - ! full-path to the external file containing the TDR BUFR - ! observation records. - - ! * sample_radius; a FORTRAN 4-byte float value specifying the - ! thinning radius for forecast model derived observations; units - ! are meters. - - ! * sample_nindex; a FORTRAN integer value specifying the - ! thinning index for forecast model derived observations. - - ! * sonde_filelist; a FORTRAN character string specifying the - ! full-path to the external file containing a list of TEMPDROP - ! formatted sondes to be decoded. - - ! * tc_radius; a FORTRAN 4-byte float value specifying the maximum - ! sampling radius for forecast model derived observations relative - ! to tropical cyclone (TC) observed positions. - - ! * tcinfo_filename; a FORTRAN character string specifying the path - ! to the ASCII formatted file containing the observed and model - ! forecast attributes for the respective TC events; is_fcst_model - ! must be .true. for this file to be invoked. - - ! * tdr_min_offset_seconds; a FORTRAN 4-byte float value specifying - ! the minimum observation time offset (in seconds) relative to the - ! time on the TDR BUFR file (see recon_tdr_filepath). - - ! * tdr_max_offset_seconds; a FORTRAN 4-byte float value specifying - ! the maximum observation time offset (in seconds) relative to the - ! time on the TDR BUFR file (see recon_tdr_filepath). - - ! * tdr_offset_deconds; a FORTRAN 4-byte float value specifying the - ! minimum difference between the observation time offset values - ! (see tdr_min_offset_seconds and tdr_max_offset_seconds). - - ! * tempdrop_compute_drift; a FORTRAN logical value specifying - ! whether to estimate the sonde drift, and the respective - ! geographical locations, from the collected TEMP-DROP formatted - ! observations. - - ! * tempdrop_hsa_table_file; a FORTRAN character string specifying - ! the full-path to a column-delimited table; if this file does not - ! exist upon call to this routine, it will be created; if the file - ! does exist upon call to this routine, it will be appended. - - ! * tempdrop_normalize; a FORTRAN logical value specifying whether - ! to normalize the geographical coordinate values computed for the - ! advection trajectory of the TEMP-DROP formatted observations. - - ! * tempdrop_write_nc_skewt; a FORTRAN logical value specifying - ! whether to write a network common data format (netcdf) file - ! containing interpolated National Oceanic and Atmospheric - ! Administration (NOAA) Atlantic Oceanographic and Meteorological - ! Laboratory (AOML) Hurricane Research Division (HRD) spline - ! analysis (HSA) values; tempdrop_compute_drift must be true. - - ! * wmm_coeff_filepath; a FORTRAN character string containing the - ! World Magnetic Model (WMM) coefficients that are used to - ! estimate the variations of the magnetic North Pole relative to - ! the Meteorological (e.g., 'true') North Pole; these are used in - ! instances of reconnissance (e.g., aircraft) collected - ! observations. - - !----------------------------------------------------------------------- - - ! Define local variables - - character(len=500) :: & - & bufr_obs_filename(10) = 'NOT USED' - character(len=500) :: & - & fv3_dyns_filename(6) = 'NOT USED' - character(len=500) :: & - & fv3_gridspec_filename(6) = 'NOT USED' - character(len=500) :: & - & fv3_orog_filename(6) = 'NOT USED' - character(len=500) :: & - & fv3_tracer_filename(6) = 'NOT USED' - character(len=500) :: & - & bufr_filepath = 'NOT USED' - character(len=500) :: & - & bufr_info_filepath = 'NOT USED' - character(len=500) :: & - & bufr_tblpath = 'NOT USED' - character(len=500) :: & - & datapath = './' - character(len=500) :: & - & fv3_static_filename = 'NOT USED' - character(len=500) :: & - & recon_filelist = 'NOT USED' - character(len=500) :: & - & recon_tdr_filepath = 'NOT USED' - character(len=500) :: & - & sonde_filelist = 'NOT USED' - character(len=500) :: & - & tcinfo_filename = 'NOT USED' - character(len=500) :: & - & tempdrop_hsa_table_file = './tempdrop-hsa.table' - character(len=500) :: & - & wmm_coeff_filepath = 'NOT USED' - character(len=19) :: & - & analdate = '2000-01-01_00:00:00' - character(len=19) :: & - & bufr_obs_maxdate = '2000-01-01_00:00:00' - character(len=19) :: & - & bufr_obs_mindate = '2000-01-01_00:00:00' - logical :: & - & debug = .false. - logical :: & - & is_bufr_obs = .false. - logical :: & - & is_fcst_model = .false. - logical :: & - & is_fv3 = .false. - logical :: & - & is_global = .false. - logical :: & - & is_gpsrobufr = .false. - logical :: & - & is_prepbufr = .false. - logical :: & - & is_recon = .false. - logical :: & - & is_recon_tdr = .false. - logical :: & - & is_recon_vdm = .false. - logical :: & - & is_regional = .false. - logical :: & - & is_relocate = .false. - logical :: & - & is_rotate_winds = .false. - logical :: & - & is_satbufr = .false. - logical :: & - & is_sonde = .false. - logical :: & - & is_sonde_tempdrop = .false. - logical :: & - & mask_land = .false. - logical :: & - & mask_ocean = .false. - logical :: & - & tempdrop_compute_drift = .false. - logical :: & - & tempdrop_normalize = .false. - logical :: & - & tempdrop_write_nc_skewt = .false. - real(r_kind) :: & - & grid_ratio = 1.0 - real(r_kind) :: & - & sample_radius = spval - integer :: & - & sample_nindex = 1 - real(r_kind) :: & - & tc_radius = 600000.0 - real(r_kind) :: & - & tdr_min_offset_seconds = 7200.0 - real(r_kind) :: & - & tdr_max_offset_seconds = -7200.0 - real(r_kind) :: & - & tdr_offset_dseconds = 1800.0 - integer :: & - & nbufr_obs_files = 0 - namelist /share/ analdate, datapath, debug, is_bufr_obs, & - & is_fcst_model, is_recon, is_sonde - namelist /bufrio/ bufr_filepath, bufr_info_filepath, & - & bufr_obs_filename, bufr_obs_maxdate, bufr_obs_mindate, & - & bufr_tblpath, is_gpsrobufr, is_prepbufr, is_satbufr, mask_land, & - & mask_ocean - namelist /fcst_mdl/ fv3_dyns_filename, fv3_gridspec_filename, & - & fv3_orog_filename, fv3_static_filename, fv3_tracer_filename, & - & grid_ratio, is_fv3, is_global, is_regional, is_rotate_winds, & - & sample_radius, sample_nindex - namelist /recon/ is_recon_tdr, is_recon_vdm, recon_filelist, & - & recon_tdr_filepath, tdr_min_offset_seconds, & - & tdr_max_offset_seconds, tdr_offset_dseconds - namelist /sonde/ is_sonde_tempdrop, sonde_filelist, & - & tempdrop_compute_drift, tempdrop_hsa_table_file, & - & tempdrop_normalize, tempdrop_write_nc_skewt - namelist /tc/ is_relocate, tc_radius, tcinfo_filename - namelist /wmm/ wmm_coeff_filepath - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! namelist.f90 - - ! DESCRIPTION: - - ! This subroutine acts as the interface to the namelist file, - ! provided as 'obs-preproc.input' by the user. - - !----------------------------------------------------------------------- - - subroutine namelist() - - ! Define variables computed within routine - - character(len=500) :: nml_filename - logical :: is_it_there - integer :: unit_nml - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - nml_filename = './obs-preproc.input' - unit_nml = 9 - is_it_there = .false. - inquire(file = trim(adjustl(nml_filename)),exist = is_it_there) - - ! Check local variable and proceed accordingly - - if(is_it_there) then - - ! Define local variables - - open(file = trim(adjustl(nml_filename)), & - unit = unit_nml , & - status = 'old' , & - form = 'formatted' , & - action = 'read') - read(unit_nml,NML = share) - read(unit_nml,NML = bufrio) - read(unit_nml,NML = fcst_mdl) - read(unit_nml,NML = recon) - read(unit_nml,NML = sonde) - read(unit_nml,NML = tc) - read(unit_nml,NML = wmm) - close(unit_nml) - - ! Loop through local variable - - do i = 1, size(bufr_obs_filename) - - ! Check local variable and proceed accordingly - - if(trim(adjustl(bufr_obs_filename(i))) .ne. 'NOT USED') then - - ! Define local variables - - nbufr_obs_files = nbufr_obs_files + 1 - - end if ! if(trim(adjustl(bufr_obs_filename(i))) .ne. 'NOT - ! USED') - - end do ! do i = 1, size(bufr_obs_filename) - - else ! if(is_it_there) - - ! Define local variables - - write(6,500) trim(adjustl(nml_filename)) - stop(99) - - end if ! if(is_it_there) - - ! Define local variables - - write(6,*) '&SHARE' - write(6,*) 'ANALDATE = ', analdate - write(6,*) 'DATAPATH = ', & - & trim(adjustl(datapath)) - write(6,*) 'DEBUG = ', debug - write(6,*) 'IS_BUFR_OBS = ', is_bufr_obs - write(6,*) 'IS_FCST_MODEL = ', is_fcst_model - write(6,*) 'IS_RECON = ', is_recon - write(6,*) 'IS_SONDE = ', is_sonde - write(6,*) '/' - write(6,*) '&BUFRIO' - write(6,*) 'BUFR_FILEPATH = ', & - & trim(adjustl(bufr_filepath)) - write(6,*) 'BUFR_INFO_FILEPATH = ', & - & trim(adjustl(bufr_info_filepath)) - write(6,*) 'BUFR_OBS_FILENAME = ' - - ! Loop through local variable - - do i = 1, nbufr_obs_files - - ! Define local variables - - write(6,*) trim(adjustl(bufr_obs_filename(i))) - - end do ! do i = 1, nbufr_obs_files - - ! Define local variables - - write(6,*) 'BUFR_OBS_MAXDATE = ', bufr_obs_maxdate - write(6,*) 'BUFR_OBS_MINDATE = ', bufr_obs_mindate - write(6,*) 'BUFR_TBLPATH = ', & - & trim(adjustl(bufr_tblpath)) - write(6,*) 'IS_GPSROBUFR = ', is_gpsrobufr - write(6,*) 'IS_PREPBUFR = ', is_prepbufr - write(6,*) 'IS_SATBUFR = ', is_satbufr - write(6,*) 'MASK_LAND = ', mask_land - write(6,*) 'MASK_OCEAN = ', mask_ocean - write(6,*) '/' - write(6,*) '&FCST_MDL' - - ! Check local variable and proceed accordingly - - if(is_global) then - - ! Define local variables - - write(6,*) 'FV3_DYNS_FILENAME = ' - - ! Loop through local variable - - do i = 1, 6 - - ! Define local variables - - write(6,*) trim(adjustl(fv3_dyns_filename(i))) - - end do ! do i = 1, 6 - - ! Define local variables - - write(6,*) 'FV3_OROG_FILENAME = ' - - ! Loop through local variable - - do i = 1, 6 - - ! Define local variables - - write(6,*) trim(adjustl(fv3_orog_filename(i))) - - end do ! do i = 1, 6 - - ! Define local variables - - write(6,*) 'FV3_STATIC_FILENAME = ', & - & trim(adjustl(fv3_static_filename)) - - ! Define local variables - - write(6,*) 'FV3_TRACER_FILENAME = ' - - ! Loop through local variable - - do i = 1, 6 - - ! Define local variables - - write(6,*) trim(adjustl(fv3_tracer_filename(i))) - - end do ! do i = 1, 6 - - end if ! if(is_global) - - ! Check local variable and proceed accordingly - - if(is_regional) then - - ! Define local variables - - write(6,*) 'FV3_DYNS_FILENAME = ', & - & trim(adjustl(fv3_dyns_filename(1))) - write(6,*) 'FV3_GRIDSPEC_FILENAME = ', & - & trim(adjustl(fv3_gridspec_filename(1))) - write(6,*) 'FV3_OROG_FILENAME = ', & - & trim(adjustl(fv3_orog_filename(1))) - write(6,*) 'FV3_STATIC_FILENAME = ', & - & trim(adjustl(fv3_static_filename)) - write(6,*) 'FV3_TRACER_FILENAME = ', & - & trim(adjustl(fv3_tracer_filename(1))) - - end if ! if(is_regional) - - ! Define local variables - - write(6,*) 'GRID_RATIO = ', grid_ratio - write(6,*) 'IS_FV3 = ', is_fv3 - write(6,*) 'IS_GLOBAL = ', is_global - write(6,*) 'IS_REGIONAL = ', is_regional - write(6,*) 'IS_ROTATE_WINDS = ', is_rotate_winds - write(6,*) 'SAMPLE_RADIUS = ', sample_radius - write(6,*) 'SAMPLE_NINDEX = ', sample_nindex - write(6,*) '/' - write(6,*) '&RECON' - write(6,*) 'IS_RECON_TDR = ', is_recon_tdr - write(6,*) 'IS_RECON_VDM = ', is_recon_vdm - write(6,*) 'RECON_FILELIST = ', & - & trim(adjustl(recon_filelist)) - write(6,*) 'RECON_TDR_FILEPATH = ', & - & trim(adjustl(recon_tdr_filepath)) - write(6,*) 'TDR_MAX_OFFSET_SECONDS = ', tdr_max_offset_seconds - write(6,*) 'TDR_MIN_OFFSET_SECONDS = ', tdr_min_offset_seconds - write(6,*) 'TDR_OFFSET_DSECONDS = ', tdr_offset_dseconds - write(6,*) '/' - write(6,*) '&SONDE' - write(6,*) 'IS_SONDE_TEMPDROP = ', is_sonde_tempdrop - write(6,*) 'SONDE_FILELIST = ', & - & trim(adjustl(sonde_filelist)) - write(6,*) 'TEMPDROP_COMPUTE_DRIFT = ', & - & tempdrop_compute_drift - write(6,*) 'TEMPDROP_HSA_TABLE_FILE = ', & - & trim(adjustl(tempdrop_hsa_table_file)) - write(6,*) 'TEMPDROP_NORMALIZE = ', tempdrop_normalize - write(6,*) 'TEMPDROP_WRITE_NC_SKEWT = ', & - & tempdrop_write_nc_skewt - write(6,*) '/' - write(6,*) '&TC' - write(6,*) 'IS_RELOCATE = ', is_relocate - write(6,*) 'TC_RADIUS = ', tc_radius - write(6,*) 'TCINFO_FILENAME = ', & - & trim(adjustl(tcinfo_filename)) - write(6,*) '/' - write(6,*) '&WMM' - write(6,*) 'WMM_COEFF_FILEPATH = ', & - & trim(adjustl(wmm_coeff_filepath)) - write(6,*) '/' - write(6,*) '' -500 format('NAMELISTPARAMS: ', a, ' not found in the current working ', & - & 'directory. ABORTING!!!!') - - !===================================================================== - - end subroutine namelist - - !======================================================================= - -end module namelist_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/netcdf_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/netcdf_interface.F90 deleted file mode 100644 index fe818f199..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/netcdf_interface.F90 +++ /dev/null @@ -1,1772 +0,0 @@ -module netcdf_interface - - !======================================================================= - - !$$$ MODULE DOCUMENTATION BLOCK - - ! obs-preproc :: netcdf_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - !======================================================================= - - ! Define associated modules and subroutines - - use kinds_interface - use netcdf - use variable_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: ncdimid - public :: ncfileid - public :: ncstatus - public :: ncvarid - public :: netcdf_interface_close - public :: netcdf_interface_getattr - public :: netcdf_interface_getdim - public :: netcdf_interface_getvar - public :: netcdf_interface_open - public :: netcdf_interface_putattr - public :: netcdf_interface_putvar - public :: netcdf_interface_writedef - interface netcdf_interface_getattr - module procedure getattr_char - module procedure getattr_real - end interface netcdf_interface_getattr - interface netcdf_interface_getvar - module procedure getvar_char_1d - module procedure getvar_double_2d - module procedure getvar_double_3d - module procedure getvar_double_4d - module procedure getvar_real_1d - module procedure getvar_real_2d - module procedure getvar_real_3d - module procedure getvar_real_4d - end interface netcdf_interface_getvar - interface netcdf_interface_putattr - module procedure putattr_char - module procedure putattr_double - module procedure putattr_int - module procedure putattr_real - end interface netcdf_interface_putattr - interface netcdf_interface_putvar - module procedure putvar_double - module procedure putvar_double_1d - module procedure putvar_double_2d - module procedure putvar_double_3d - module procedure putvar_double_4d - module procedure putvar_real_1d - module procedure putvar_real_2d - module procedure putvar_real_3d - module procedure putvar_real_4d - end interface netcdf_interface_putvar - - ! Define local variables - - integer :: ncdimid - integer :: ncfileid - integer :: ncstatus - integer :: ncvarid - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! getattr_char.f90 - - ! DESCRIPTION: - - ! This subroutine retrieves a character attribute from a netcdf - ! file. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * attrname; a FORTRAN character string specifying the netcdf - ! attribute. - - ! * var; a FORTRAN character string to contain the netcdf attribute - ! value. - - ! OPTIONAL INPUT VARIABLES: - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key; if not present, a global netcdf attribute is - ! assumed. - - ! OUTPUT VARIABLES: - - ! * var; a FORTRAN character string specifying the netcdf attribute - ! value. - - !----------------------------------------------------------------------- - - subroutine getattr_char(filename,attrname,var,varname) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: attrname - character(len=100), optional :: varname - character(len=*) :: var - - !===================================================================== - - ! Define local variables - - call netcdf_interface_open(filename,.true.,.false.,.false.) - - ! Check local variable and proceed accordingly - - if(present(varname)) then - - ! Define local variables - - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_get_att(ncfileid,ncvarid,trim(adjustl(attrname)), & - & var) - - else ! if(present(varname)) - - ! Define local variables - - ncstatus = nf90_get_att(ncfileid,nf90_global, & - & trim(adjustl(attrname)),var) - - end if ! if(present(varname)) - - ! Define local variables - - call netcdf_interface_close() - - !===================================================================== - - end subroutine getattr_char - - !======================================================================= - - ! SUBROUTINE: - - ! getvar_char_1d.f90 - - ! DESCRIPTION: - - ! This subroutine reads a 1-dimensional character string variable - ! from a user specified netcdf file specified by the user supplied - ! netcdf API key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * strlen; a FORTRAN integer specifying the length for each element - ! * of the character string variable. - - ! * var; a FORTRAN 1-dimensional character variable array to contain - ! the contents of the user specified netcdf variable. - - ! OUTPUT VARIABLES: - - ! * var; a FORTRAN 1-dimensional character variable array containing - ! the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine getvar_char_1d(filename,varname,strlen,var) - - ! Define variables passed to routine - - integer :: strlen - character(len=500) :: filename - character(len=100) :: varname - character(len=strlen) :: var(:) - - ! Define variables computed within routine - - character(len=strlen), dimension(:), allocatable :: workgrid - integer :: d1 - - !===================================================================== - - ! Define local variables - - d1 = size(var(:)) - - ! Allocate memory for local variables - - if(.not. allocated(workgrid)) allocate(workgrid(d1)) - - ! Define local variables - - call netcdf_interface_open(filename,.true.,.false.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,workgrid) - var = workgrid - call netcdf_interface_close() - - ! Deallocate memory for local variables - - if(allocated(workgrid)) deallocate(workgrid) - - !===================================================================== - - end subroutine getvar_char_1d - - !======================================================================= - - ! SUBROUTINE: - - ! getvar_double_2d.f90 - - ! DESCRIPTION: - - ! This subroutine reads a 2-dimensional variable from a user - ! specified netcdf file specified by the user supplied netcdf API - ! key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 2-dimensional 8-byte precision variable array to - ! contain the contents of the user specified netcdf variable. - - ! OUTPUT VARIABLES: - - ! * var; a FORTRAN 2-dimensional 8-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine getvar_double_2d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_double) :: var(:,:) - - ! Define variables computed within routine - - real(r_double), dimension(:,:), allocatable :: workgrid - integer :: d1 - integer :: d2 - - !===================================================================== - - ! Define local variables - - d1 = size(var(:,1)) - d2 = size(var(1,:)) - - ! Allocate memory for local variables - - if(.not. allocated(workgrid)) allocate(workgrid(d1,d2)) - - ! Define local variables - - call netcdf_interface_open(filename,.true.,.false.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,workgrid) - var = workgrid - call netcdf_interface_close() - - ! Deallocate memory for local variables - - if(allocated(workgrid)) deallocate(workgrid) - - !===================================================================== - - end subroutine getvar_double_2d - - !======================================================================= - - ! SUBROUTINE: - - ! getvar_double_3d.f90 - - ! DESCRIPTION: - - ! This subroutine reads a 3-dimensional variable from a user - ! specified netcdf file specified by the user supplied netcdf API - ! key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 3-dimensional 8-byte precision variable array to - ! contain the contents of the user specified netcdf variable. - - ! OUTPUT VARIABLES: - - ! * var; a FORTRAN 3-dimensional 8-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine getvar_double_3d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_double) :: var(:,:,:) - - ! Define variables computed within routine - - real(r_double), dimension(:,:,:), allocatable :: workgrid - integer :: d1 - integer :: d2 - integer :: d3 - - !===================================================================== - - ! Define local variables - - d1 = size(var(:,1,1)) - d2 = size(var(1,:,1)) - d3 = size(var(1,1,:)) - - ! Allocate memory for local variables - - if(.not. allocated(workgrid)) allocate(workgrid(d1,d2,d3)) - - ! Define local variables - - call netcdf_interface_open(filename,.true.,.false.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,workgrid) - var = workgrid - call netcdf_interface_close() - - ! Deallocate memory for local variables - - if(allocated(workgrid)) deallocate(workgrid) - - !===================================================================== - - end subroutine getvar_double_3d - - !======================================================================= - - ! SUBROUTINE: - - ! getvar_double_4d.f90 - - ! DESCRIPTION: - - ! This subroutine reads a 4-dimensional variable from a user - ! specified netcdf file specified by the user supplied netcdf API - ! key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 4-dimensional 8-byte precision variable array to - ! contain the contents of the user specified netcdf variable. - - ! OUTPUT VARIABLES: - - ! * var; a FORTRAN 4-dimensional 8-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine getvar_double_4d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_double) :: var(:,:,:,:) - - ! Define variables computed within routine - - real(r_double), dimension(:,:,:,:), allocatable :: workgrid - integer :: d1 - integer :: d2 - integer :: d3 - integer :: d4 - - !===================================================================== - - ! Define local variables - - d1 = size(var(:,1,1,1)) - d2 = size(var(1,:,1,1)) - d3 = size(var(1,1,:,1)) - d4 = size(var(1,1,1,:)) - - ! Allocate memory for local variables - - if(.not. allocated(workgrid)) allocate(workgrid(d1,d2,d3,d4)) - - ! Define local variables - - call netcdf_interface_open(filename,.true.,.false.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,workgrid) - var = workgrid - call netcdf_interface_close() - - ! Deallocate memory for local variables - - if(allocated(workgrid)) deallocate(workgrid) - - !===================================================================== - - end subroutine getvar_double_4d - - !======================================================================= - - ! SUBROUTINE: - - ! getattr_real.f90 - - ! DESCRIPTION: - - ! This subroutine retrieves a 4-byte real-valued attribute from a - ! netcdf file. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * attrname; a FORTRAN character string specifying the netcdf - ! attribute. - - ! * var; a FORTRAN 4-byte real-valued variable to contain the netcdf - ! attribute value. - - ! OPTIONAL INPUT VARIABLES: - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key; if not present, a global netcdf attribute is - ! assumed. - - ! OUTPUT VARIABLES: - - ! * var; a FORTRAN 4-byte real-valued variable specifying the netcdf - ! attribute value. - - !----------------------------------------------------------------------- - - subroutine getattr_real(filename,attrname,var,varname) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: attrname - character(len=100), optional :: varname - real(r_kind) :: var - - !===================================================================== - - ! Define local variables - - call netcdf_interface_open(filename,.true.,.false.,.false.) - - ! Check local variable and proceed accordingly - - if(present(varname)) then - - ! Define local variables - - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_get_att(ncfileid,ncvarid,trim(adjustl(attrname)), & - & var) - - else ! if(present(varname)) - - ! Define local variables - - ncstatus = nf90_get_att(ncfileid,nf90_global, & - & trim(adjustl(attrname)),var) - - end if ! if(present(varname)) - - ! Define local variables - - call netcdf_interface_close() - - !===================================================================== - - end subroutine getattr_real - - !======================================================================= - - ! SUBROUTINE: - - ! getvar_real_1d.f90 - - ! DESCRIPTION: - - ! This subroutine reads a 1-dimensional variable from a user - ! specified netcdf file specified by the user supplied netcdf API - ! key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 1-dimensional 4-byte precision variable array to - ! contain the contents of the user specified netcdf variable. - - ! OUTPUT VARIABLES: - - ! * var; a FORTRAN 1-dimensional 4-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine getvar_real_1d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_kind) :: var(:) - - ! Define variables computed within routine - - real(r_kind), dimension(:), allocatable :: workgrid - integer :: d1 - - !===================================================================== - - ! Define local variables - - d1 = size(var(:)) - - ! Allocate memory for local variables - - if(.not. allocated(workgrid)) allocate(workgrid(d1)) - - ! Define local variables - - call netcdf_interface_open(filename,.true.,.false.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,workgrid) - var = workgrid - call netcdf_interface_close() - - ! Deallocate memory for local variables - - if(allocated(workgrid)) deallocate(workgrid) - - !===================================================================== - - end subroutine getvar_real_1d - - !======================================================================= - - ! SUBROUTINE: - - ! getvar_real_2d.f90 - - ! DESCRIPTION: - - ! This subroutine reads a 2-dimensional variable from a user - ! specified netcdf file specified by the user supplied netcdf API - ! key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 2-dimensional 4-byte precision variable array to - ! contain the contents of the user specified netcdf variable. - - ! OUTPUT VARIABLES: - - ! * var; a FORTRAN 2-dimensional 4-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine getvar_real_2d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_kind) :: var(:,:) - - ! Define variables computed within routine - - real(r_kind), dimension(:,:), allocatable :: workgrid - integer :: d1 - integer :: d2 - - !===================================================================== - - ! Define local variables - - d1 = size(var(:,1)) - d2 = size(var(1,:)) - - ! Allocate memory for local variables - - if(.not. allocated(workgrid)) allocate(workgrid(d1,d2)) - - ! Define local variables - - call netcdf_interface_open(filename,.true.,.false.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,workgrid) - var = workgrid - call netcdf_interface_close() - - ! Deallocate memory for local variables - - if(allocated(workgrid)) deallocate(workgrid) - - !===================================================================== - - end subroutine getvar_real_2d - - !======================================================================= - - ! SUBROUTINE: - - ! getvar_real_3d.f90 - - ! DESCRIPTION: - - ! This subroutine reads a 3-dimensional variable from a user - ! specified netcdf file specified by the user supplied netcdf API - ! key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 3-dimensional 4-byte precision variable array to - ! contain the contents of the user specified netcdf variable. - - ! OUTPUT VARIABLES: - - ! * var; a FORTRAN 3-dimensional 4-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine getvar_real_3d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_kind) :: var(:,:,:) - - ! Define variables computed within routine - - real(r_kind), dimension(:,:,:), allocatable :: workgrid - integer :: d1 - integer :: d2 - integer :: d3 - - !===================================================================== - - ! Define local variables - - d1 = size(var(:,1,1)) - d2 = size(var(1,:,1)) - d3 = size(var(1,1,:)) - - ! Allocate memory for local variables - - if(.not. allocated(workgrid)) allocate(workgrid(d1,d2,d3)) - - ! Define local variables - - call netcdf_interface_open(filename,.true.,.false.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,workgrid) - var = workgrid - call netcdf_interface_close() - - ! Deallocate memory for local variables - - if(allocated(workgrid)) deallocate(workgrid) - - !===================================================================== - - end subroutine getvar_real_3d - - !======================================================================= - - ! SUBROUTINE: - - ! getvar_real_4d.f90 - - ! DESCRIPTION: - - ! This subroutine reads a 4-dimensional variable from a user - ! specified netcdf file specified by the user supplied netcdf API - ! key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 4-dimensional 4-byte precision variable array to - ! contain the contents of the user specified netcdf variable. - - ! OUTPUT VARIABLES: - - ! * var; a FORTRAN 4-dimensional 4-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine getvar_real_4d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_kind) :: var(:,:,:,:) - - ! Define variables computed within routine - - real(r_kind), dimension(:,:,:,:), allocatable :: workgrid - integer :: d1 - integer :: d2 - integer :: d3 - integer :: d4 - - !===================================================================== - - ! Define local variables - - d1 = size(var(:,1,1,1)) - d2 = size(var(1,:,1,1)) - d3 = size(var(1,1,:,1)) - d4 = size(var(1,1,1,:)) - - ! Allocate memory for local variables - - if(.not. allocated(workgrid)) allocate(workgrid(d1,d2,d3,d4)) - - ! Define local variables - - call netcdf_interface_open(filename,.true.,.false.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,workgrid) - var = workgrid - call netcdf_interface_close() - - ! Deallocate memory for local variables - - if(allocated(workgrid)) deallocate(workgrid) - - !===================================================================== - - end subroutine getvar_real_4d - - !======================================================================= - - ! SUBROUTINE: - - ! netcdf_interface_close.f90 - - ! DESCRIPTION: - - ! This subroutine closes a Network Common Data Format (netcdf) file - ! defined by the FORTRAN integer variable ncfileid. - - !----------------------------------------------------------------------- - - subroutine netcdf_interface_close() - - !===================================================================== - - ! Define local variables - - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - end subroutine netcdf_interface_close - - !======================================================================= - - ! SUBROUTINE: - - ! netcdf_interface_getdim.f90 - - ! DESCRIPTION: - - ! This subroutine assigns the dimension value associated with the - ! netcdf API key specified by the user. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * dimname; a FORTRAN character string specifying the netcdf API - ! key for the respective netcdf dimension variable. - - ! * dimval; a FORTRAN integer variable to contain the netcdf - ! dimension value. - - ! OUTPUT VARIABLES: - - ! * dimval; a FORTRAN integer value specifying the netcdf dimension - ! value. - - !----------------------------------------------------------------------- - - subroutine netcdf_interface_getdim(filename,dimname,dimval) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: dimname - integer :: dimval - - !===================================================================== - - ! Define local variables - - call netcdf_interface_open(filename,.true.,.false.,.false.) - ncstatus = nf90_inq_dimid(ncfileid,trim(adjustl(dimname)),ncdimid) - ncstatus = nf90_inquire_dimension(ncfileid,ncdimid,len=dimval) - call netcdf_interface_close() - - !===================================================================== - - end subroutine netcdf_interface_getdim - - !======================================================================= - - ! SUBROUTINE: - - ! netcdf_interface_open.f90 - - ! DESCRIPTION: - - ! This subroutine opens a Network Common Data Format (netcdf) file - ! with permissions in accordance with the specifications of the - ! user; the global variable ncfileid is defined by this subroutine - ! until terminated by the subroutine netcdf_interface_close.f90. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * is_read; a FORTRAN logical variable specifying to open the - ! netcdf file with read-only permissions. - - ! * is_rdwr; a FORTRAN logical variable specifying to open the - ! netcdf file with read and write permissions. - - ! * is_write; a FORTRAN logical variable specifying to open a new - ! (and clobber any previous existence of a) the netcdf file with - ! write permissions. - - !----------------------------------------------------------------------- - - subroutine netcdf_interface_open(filename,is_read,is_rdwr,is_write) - - ! Define variables passed to routine - - character(len=500) :: filename - logical :: is_read - logical :: is_rdwr - logical :: is_write - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(is_read) then - - ! Define local variables - - ncstatus = nf90_open(trim(adjustl(filename)),nf90_nowrite, & - & ncfileid) - - end if ! if(is_read) - - ! Check local variable and proceed accordingly - - if(is_rdwr) then - - ! Define local variables - - ncstatus = nf90_open(trim(adjustl(filename)),nf90_write, & - & ncfileid) - - end if ! if(is_rdwr) - - ! Check local variable and proceed accordingly - - if(is_write) then - - ! Define local variables - - ncstatus = nf90_create(path=trim(adjustl(filename)), & - & cmode=or(nf90_clobber,nf90_64bit_offset),ncid=ncfileid) - - end if ! if(is_write) - - !===================================================================== - - end subroutine netcdf_interface_open - - !======================================================================= - - ! SUBROUTINE: - - ! netcdf_interface_writedef.f90 - - ! DESCRIPTION: - - ! This subroutine writes the Network Common Data Format (netcdf) - ! file dimension and variable definition section. - - ! INPUT VARIABLES: - - ! * varinfo; a FORTRAN varinfo_struct variable containing the - ! dimension and variable definitions for the netcdf file. - - !----------------------------------------------------------------------- - - subroutine netcdf_interface_writedef(varinfo) - - ! Define variables passed to routine - - type(varinfo_struct) :: varinfo - - ! Define variables computed within routine - - integer, dimension(:), allocatable :: dimid - - ! Define counting variables - - integer :: i, j - - !===================================================================== - - ! Loop through local variable - - do i = 1, varinfo%ndims - - ! Define local variables - - ncstatus = nf90_def_dim(ncfileid,trim(adjustl(varinfo%dimname(i))), & - & varinfo%dimval(i),varinfo%dimid(i)) - - end do ! do i = 1, varinfo%ndims - - ! Loop through local variable - - do i = 1, varinfo%nvars - - ! Allocate memory for local variables - - if(.not. allocated(dimid)) allocate(dimid(varinfo%varndims(i))) - - ! Loop through local variable - - do j = 1, varinfo%varndims(i) - - ! Define local variables - - dimid(j) = varinfo%vardimid(i,j) - - end do ! do j = 1, varinfo%varndims(i) - - ! Check local variable and proceed accordingly - - if(varinfo%vartype(i) .eq. 'double') then - - ! Define local variables - - ncstatus = nf90_def_var(ncfileid, & - & trim(adjustl(varinfo%varname(i))),nf90_double, & - & dimid(1:varinfo%varndims(i)),varinfo%varid(i)) - - end if ! if(varinfo%vartype(i) .eq. 'double') - - ! Check local variable and proceed accordingly - - if(varinfo%vartype(i) .eq. 'float') then - - ! Define local variables - - ncstatus = nf90_def_var(ncfileid, & - & trim(adjustl(varinfo%varname(i))),nf90_float, & - & dimid(1:varinfo%varndims(i)),varinfo%varid(i)) - - end if ! if(varinfo%vartype(i) .eq. 'float') - - ! Check local variable and proceed accordingly - - if(varinfo%vartype(i) .eq. 'integer') then - - ! Define local variables - - ncstatus = nf90_def_var(ncfileid, & - & trim(adjustl(varinfo%varname(i))),nf90_int, & - & dimid(1:varinfo%varndims(i)),varinfo%varid(i)) - - end if ! if(varinfo%vartype(i) .eq. 'integer') - - ! Loop through local variable - - do j = 1, varinfo%varnattrs(i) - - ! Define local variables - - ncstatus = nf90_put_att(ncfileid,varinfo%varid(i), & - & trim(adjustl(varinfo%varattrs(i,j,1))), & - & trim(adjustl(varinfo%varattrs(i,j,2)))) - - ! Check local variable and proceed accordingly - - if(varinfo%vartype(i) .eq. 'float') then - - ! Define local variables - - ncstatus = nf90_put_att(ncfileid,varinfo%varid(i), & - & '_FillValue',spval) - - end if ! if(varinfo%vartype(i) .eq. 'float') - - ! Check local variable and proceed accordingly - - if(varinfo%vartype(i) .eq. 'integer') then - - ! Define local variables - - ncstatus = nf90_put_att(ncfileid,varinfo%varid(i), & - & '_FillValue',-99) - - end if ! if(varinfo%vartype(i) .eq. 'integer') - - end do ! do j = 1, varinfo%varnattrs(i) - - ! Deallocate memory for local variables - - if(allocated(dimid)) deallocate(dimid) - - end do ! do i = 1, varinfo%nvars - - ! Define local variables - - ncstatus = nf90_enddef(ncfileid) - - !===================================================================== - - end subroutine netcdf_interface_writedef - - !======================================================================= - - ! SUBROUTINE: - - ! putattr_char.f90 - - ! DESCRIPTION: - - ! This subroutine writes a character attribute to a netcdf file. - - ! INPUT VARIABLES: - - ! * attrname; a FORTRAN character string specifying the netcdf - ! attribute. - - ! * var; a FORTRAN character string to contain the netcdf attribute - ! value. - - ! OPTIONAL INPUT VARIABLES: - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key; if not present, a global netcdf attribute is - ! assumed. - - !----------------------------------------------------------------------- - - subroutine putattr_char(attrname,var,varname) - - ! Define variables passed to routine - - character(len=100) :: attrname - character(len=100), optional :: varname - character(len=*) :: var - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(present(varname)) then - - ! Define local variables - - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_put_att(ncfileid,ncvarid,trim(adjustl(attrname)), & - & var) - - else ! if(present(varname)) - - ! Define local variables - - ncstatus = nf90_put_att(ncfileid,nf90_global, & - & trim(adjustl(attrname)),var) - - end if ! if(present(varname)) - - !===================================================================== - - end subroutine putattr_char - - !======================================================================= - - ! SUBROUTINE: - - ! putattr_int.f90 - - ! DESCRIPTION: - - ! This subroutine writes an integer-valued variable attribute to a - ! netcdf file. - - ! INPUT VARIABLES: - - ! * attrname; a FORTRAN character string specifying the netcdf - ! attribute. - - ! * var; a FORTRAN integer-valued variable containing the netcdf - ! attribute value. - - ! OPTIONAL INPUT VARIABLES: - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key; if not present, a global netcdf attribute is - ! assumed. - - !----------------------------------------------------------------------- - - subroutine putattr_int(attrname,var,varname) - - ! Define variables passed to routine - - character(len=100) :: attrname - character(len=100), optional :: varname - integer :: var - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(present(varname)) then - - ! Define local variables - - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_put_att(ncfileid,ncvarid,trim(adjustl(attrname)), & - & var) - - else ! if(present(varname)) - - ! Define local variables - - ncstatus = nf90_put_att(ncfileid,nf90_global, & - & trim(adjustl(attrname)),var) - - end if ! if(present(varname)) - - !===================================================================== - - end subroutine putattr_int - - !======================================================================= - - ! SUBROUTINE: - - ! putattr_double.f90 - - ! DESCRIPTION: - - ! This subroutine writes a 8-byte real-valued variable attribute to - ! a netcdf file. - - ! INPUT VARIABLES: - - ! * attrname; a FORTRAN character string specifying the netcdf - ! attribute. - - ! * var; a FORTRAN 8-byte real-valued variable containing the netcdf - ! attribute value. - - ! OPTIONAL INPUT VARIABLES: - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key; if not present, a global netcdf attribute is - ! assumed. - - !----------------------------------------------------------------------- - - subroutine putattr_double(attrname,var,varname) - - ! Define variables passed to routine - - character(len=100) :: attrname - character(len=100), optional :: varname - real(r_double) :: var - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(present(varname)) then - - ! Define local variables - - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_put_att(ncfileid,ncvarid,trim(adjustl(attrname)), & - & var) - - else ! if(present(varname)) - - ! Define local variables - - ncstatus = nf90_put_att(ncfileid,nf90_global, & - & trim(adjustl(attrname)),var) - - end if ! if(present(varname)) - - !===================================================================== - - end subroutine putattr_double - - !======================================================================= - - ! SUBROUTINE: - - ! putvar_double.f90 - - ! DESCRIPTION: - - ! This subroutine writes a variable value to a user specified netcdf - ! file in accordance with the user supplied netcdf API key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 8-byte precision value. - - !----------------------------------------------------------------------- - - subroutine putvar_double(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_double) :: var - - !===================================================================== - - ! Define local variables - - call netcdf_interface_open(filename,.false.,.true.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_put_var(ncfileid,ncvarid,var) - call netcdf_interface_close() - - !===================================================================== - - end subroutine putvar_double - - !======================================================================= - - ! SUBROUTINE: - - ! putvar_double_1d.f90 - - ! DESCRIPTION: - - ! This subroutine write a 1-dimensional variable to a user specified - ! netcdf file in accordance with the user supplied netcdf API key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 1-dimensional 8-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine putvar_double_1d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_double) :: var(:) - - !===================================================================== - - ! Define local variables - - call netcdf_interface_open(filename,.false.,.true.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_put_var(ncfileid,ncvarid,var) - call netcdf_interface_close() - - !===================================================================== - - end subroutine putvar_double_1d - - !======================================================================= - - ! SUBROUTINE: - - ! putvar_double_2d.f90 - - ! DESCRIPTION: - - ! This subroutine write a 2-dimensional variable to a user specified - ! netcdf file in accordance with the user supplied netcdf API key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 2-dimensional 8-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine putvar_double_2d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_double) :: var(:,:) - - !===================================================================== - - ! Define local variables - - call netcdf_interface_open(filename,.false.,.true.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_put_var(ncfileid,ncvarid,var) - call netcdf_interface_close() - - !===================================================================== - - end subroutine putvar_double_2d - - !======================================================================= - - ! SUBROUTINE: - - ! putvar_double_3d.f90 - - ! DESCRIPTION: - - ! This subroutine write a 3-dimensional variable to a user specified - ! netcdf file in accordance with the user supplied netcdf API key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 3-dimensional 8-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine putvar_double_3d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_double) :: var(:,:,:) - - !===================================================================== - - ! Define local variables - - call netcdf_interface_open(filename,.false.,.true.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_put_var(ncfileid,ncvarid,var) - call netcdf_interface_close() - - !===================================================================== - - end subroutine putvar_double_3d - - !======================================================================= - - ! SUBROUTINE: - - ! putvar_double_4d.f90 - - ! DESCRIPTION: - - ! This subroutine write a 4-dimensional variable to a user specified - ! netcdf file in accordance with the user supplied netcdf API key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 4-dimensional 8-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine putvar_double_4d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_double) :: var(:,:,:,:) - - !===================================================================== - - ! Define local variables - - call netcdf_interface_open(filename,.false.,.true.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_put_var(ncfileid,ncvarid,var) - call netcdf_interface_close() - - !===================================================================== - - end subroutine putvar_double_4d - - !======================================================================= - - ! SUBROUTINE: - - ! putattr_real.f90 - - ! DESCRIPTION: - - ! This subroutine writes a 4-byte real-valued variable attribute to - ! a netcdf file. - - ! INPUT VARIABLES: - - ! * attrname; a FORTRAN character string specifying the netcdf - ! attribute. - - ! * var; a FORTRAN 4-byte real-valued variable containing the netcdf - ! attribute value. - - ! OPTIONAL INPUT VARIABLES: - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key; if not present, a global netcdf attribute is - ! assumed. - - !----------------------------------------------------------------------- - - subroutine putattr_real(attrname,var,varname) - - ! Define variables passed to routine - - character(len=100) :: attrname - character(len=100), optional :: varname - real(r_kind) :: var - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(present(varname)) then - - ! Define local variables - - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_put_att(ncfileid,ncvarid,trim(adjustl(attrname)), & - & var) - - else ! if(present(varname)) - - ! Define local variables - - ncstatus = nf90_put_att(ncfileid,nf90_global, & - & trim(adjustl(attrname)),var) - - end if ! if(present(varname)) - - !===================================================================== - - end subroutine putattr_real - - !======================================================================= - - ! SUBROUTINE: - - ! putvar_real_1d.f90 - - ! DESCRIPTION: - - ! This subroutine write a 1-dimensional variable to a user specified - ! netcdf file in accordance with the user supplied netcdf API key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 1-dimensional 4-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine putvar_real_1d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_kind) :: var(:) - - !===================================================================== - - ! Define local variables - - call netcdf_interface_open(filename,.false.,.true.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_put_var(ncfileid,ncvarid,var) - call netcdf_interface_close() - - !===================================================================== - - end subroutine putvar_real_1d - - !======================================================================= - - ! SUBROUTINE: - - ! putvar_real_2d.f90 - - ! DESCRIPTION: - - ! This subroutine write a 2-dimensional variable to a user specified - ! netcdf file in accordance with the user supplied netcdf API key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 2-dimensional 4-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine putvar_real_2d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_kind) :: var(:,:) - - !===================================================================== - - ! Define local variables - - call netcdf_interface_open(filename,.false.,.true.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_put_var(ncfileid,ncvarid,var) - call netcdf_interface_close() - - !===================================================================== - - end subroutine putvar_real_2d - - !======================================================================= - - ! SUBROUTINE: - - ! putvar_real_3d.f90 - - ! DESCRIPTION: - - ! This subroutine write a 3-dimensional variable to a user specified - ! netcdf file in accordance with the user supplied netcdf API key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 3-dimensional 4-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine putvar_real_3d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_kind) :: var(:,:,:) - - !===================================================================== - - ! Define local variables - - call netcdf_interface_open(filename,.false.,.true.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_put_var(ncfileid,ncvarid,var) - call netcdf_interface_close() - - !===================================================================== - - end subroutine putvar_real_3d - - !======================================================================= - - ! SUBROUTINE: - - ! putvar_real_4d.f90 - - ! DESCRIPTION: - - ! This subroutine write a 4-dimensional variable to a user specified - ! netcdf file in accordance with the user supplied netcdf API key. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the full-path to - ! the netcdf file. - - ! * varname; a FORTRAN character string specifying the netcdf - ! variable API key. - - ! * var; a FORTRAN 4-dimensional 4-byte precision variable array - ! containing the contents of the user specified netcdf variable. - - !----------------------------------------------------------------------- - - subroutine putvar_real_4d(filename,varname,var) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=100) :: varname - real(r_kind) :: var(:,:,:,:) - - !===================================================================== - - ! Define local variables - - call netcdf_interface_open(filename,.false.,.true.,.false.) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - ncstatus = nf90_put_var(ncfileid,ncvarid,var) - call netcdf_interface_close() - - !===================================================================== - - end subroutine putvar_real_4d - - !======================================================================= - -end module netcdf_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/obs_preproc b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/obs_preproc new file mode 160000 index 000000000..bf4519d76 --- /dev/null +++ b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/obs_preproc @@ -0,0 +1 @@ +Subproject commit bf4519d76034bd28ce9e674ad702b46bb10d6c8e diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/obs_preproc_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/obs_preproc_interface.F90 deleted file mode 100644 index baadb7219..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/obs_preproc_interface.F90 +++ /dev/null @@ -1,90 +0,0 @@ -module obs_preproc_interface - - !======================================================================= - - !$$$ PROGRAM DOCUMENTATION BLOCK - - ! obs-preproc :: obs_preproc_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - ! Review the README, within the top-level directory, which provides - ! relevant instructions and (any) references cited by algorithms - ! within this software suite. - - !======================================================================= - - ! Define associated modules and subroutines - - use diagnostics_interface - use kinds_interface - use namelist_interface - use observations_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: obs_preproc - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! obs_preproc.f90 - - ! DESCRIPTION: - - ! This subroutine is the driver routine to preprocess all - ! observation types in preparation for subsequent data assimilation - ! applications. - - !----------------------------------------------------------------------- - - subroutine obs_preproc() - - ! Define variables computed within routine - - real(r_kind) :: time_start - - !===================================================================== - - ! Define local variables - - call diagnostics_time_start(time_start) - call namelist() - - ! Compute local variables - - call observations() - - ! Define local variables - - call diagnostics_time_stop(time_start) - - !===================================================================== - - end subroutine obs_preproc - - !======================================================================= - -end module obs_preproc_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/observations_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/observations_interface.F90 deleted file mode 100644 index c948f0a55..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/observations_interface.F90 +++ /dev/null @@ -1,170 +0,0 @@ -module observations_interface - - !======================================================================= - - !$$$ PROGRAM DOCUMENTATION BLOCK - - ! obs-preproc :: observations_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - ! Review the README, within the top-level directory, which provides - ! relevant instructions and (any) references cited by algorithms - ! within this software suite. - - !======================================================================= - - ! Define associated modules and subroutines - - use bufr_obs_interface - use forecast_model_interface - use kinds_interface - use namelist_interface - use recon_tdr_interface - use recon_vdm_interface - use sonde_tempdrop_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: observations - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! observations.f90 - - ! DESCRIPTION: - - ! This is the driver routine for the preparation of all observation - ! types. - - !----------------------------------------------------------------------- - - subroutine observations() - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(is_bufr_obs) call bufr_obs_update() - if(is_fcst_model) call obs_fcst_model() - if(is_recon) call obs_recon() - if(is_sonde) call obs_sonde() - - !===================================================================== - - end subroutine observations - - !======================================================================= - - ! SUBROUTINE: - - ! obs_fcst_model.f90 - - ! DESCRIPTION: - - ! This is the driver routine for the preparation of all observations - ! collected from forecast model files; currently the following - ! forecast models are supported: - - ! + Finite Volume Cubed Sphere (FV3) - - !----------------------------------------------------------------------- - - subroutine obs_fcst_model() - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(is_fv3) call forecast_model_fv3() - - !===================================================================== - - end subroutine obs_fcst_model - - !======================================================================= - - ! SUBROUTINE: - - ! obs_recon.f90 - - ! DESCRIPTION: - - ! This is the driver routine for the preparation of all observations - ! collected from reconnissance messages; currently the following - ! platforms are supported: - - ! + Tail-Doppler radar (TDR) reconnissance observation information. - - ! + National Hurricane Center (NHC) Vortex Data Messages (VDM). - - !----------------------------------------------------------------------- - - subroutine obs_recon() - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(is_recon_tdr) call recon_tdr() - if(is_recon_vdm) call recon_vdm() - - !===================================================================== - - end subroutine obs_recon - - !======================================================================= - - ! SUBROUTINE: - - ! obs_sonde.f90 - - ! DESCRIPTION: - - ! This is the driver routine for the preparation of all observations - ! collected from sondes; currently the following platforms are - ! supported: - - ! + American Oceanographic and Meteorological Laboratory (AOML) - ! Hurricane Research Division (HRD) TEMP-DROP sondes. - - !----------------------------------------------------------------------- - - subroutine obs_sonde() - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(is_sonde_tempdrop) call sonde_tempdrop() - - !===================================================================== - - end subroutine obs_sonde - - !======================================================================= - -end module observations_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/recon_tdr_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/recon_tdr_interface.F90 deleted file mode 100644 index d0ebe7f86..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/recon_tdr_interface.F90 +++ /dev/null @@ -1,522 +0,0 @@ -module recon_tdr_interface - - !======================================================================= - - !$$$ PROGRAM DOCUMENTATION BLOCK - - ! obs-preproc :: recon_tdr_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - ! Review the README, within the top-level directory, which provides - ! relevant instructions and (any) references cited by algorithms - ! within this software suite. - - !======================================================================= - - ! Define associated modules and subroutines - - use bufrio_interface - use namelist_interface - use time_methods_interface - use variable_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: recon_tdr - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! recon_tdr.f90 - - ! DESCRIPTION: - - ! This is the driver routine for determining the status and usage - ! capabilities for Tail-Doppler Radar (TDR) Binary Universal Format - ! (BUFR) file observations collected during tropical cyclone (TC) - ! events. - - !----------------------------------------------------------------------- - - subroutine recon_tdr() - - ! Define variables computed within routine - - type(tdr_struct) :: tdr - - !===================================================================== - - ! Define local variables - - call tdr_stmid(tdr) - call tdr_timeinfo(tdr) - call tdr_flag(tdr) - call write_tdr_status(tdr) - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(tdr) - - !===================================================================== - - end subroutine recon_tdr - - !======================================================================= - - ! SUBROUTINE: - - ! tdr_flag.f90 - - ! DESCRIPTION: - - ! This subroutine determines - - ! INPUT VARIABLES: - - ! * tdr; a FORTRAN tdr_struct variable containing (at minimum) - ! arrays for the event identifiers (stmid) and the observation - ! time offsets relative to the file timestamp (time_min and - ! time_max). - - ! OUTPUT VARIABLES: - - ! * tdr; a FORTRAN tdr_struct variable containing the usage flag for - ! the TDR observation; 0 = use, 1 = no usage based on - ! user-specified (namelist-level) time check thresholds. - - !----------------------------------------------------------------------- - - subroutine tdr_flag(tdr) - - ! Define variables passed to routine - - type(tdr_struct) :: tdr - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Loop through local variable - - do i = 1, size(tdr%stmid) - - ! Check local variable and proceed accordingly - - if((tdr%time_min(i) .gt. tdr_min_offset_seconds) .or. & - & (tdr%time_max(i) .lt. tdr_max_offset_seconds) .or. & - & (abs(tdr%time_max(i) - tdr%time_min(i)) .lt. & - & tdr_offset_dseconds)) then - - ! Define local variables - - tdr%flag(i) = 1 - - else ! if((tdr%time_min(i) .gt. tdr_min_offset_seconds) - ! .or. (tdr%time_max(i) .lt. tdr_max_offset_seconds) - ! .or. (abs(tdr%time_max(i) - tdr%time_min(i)) - ! .lt. tdr_offset_dseconds)) - - ! Define local variables - - tdr%flag(i) = 0 - - end if ! if((tdr%time_min(i) .gt. tdr_min_offset_seconds) - ! .or. (tdr%time_max(i) .lt. tdr_max_offset_seconds) - ! .or. (abs(tdr%time_max(i) - tdr%time_min(i)) - ! .lt. tdr_offset_dseconds)) - - end do ! do i = 1, size(tdr%stmid) - - !===================================================================== - - end subroutine tdr_flag - - !======================================================================= - - ! SUBROUTINE: - - ! tdr_stmid.f90 - - ! DESCRIPTION: - - ! This subroutine determines the tropical cyclone (TC) identifier - ! for which the tail-Doppler radar (TDR) observations are collected. - - ! INPUT VARIABLES: - - ! * tdr; a FORTRAN tdr_struct variable. - - ! OUTPUT VARIABLES: - - ! * tdr; a FORTRAN tdr_struct variable containing the number of TC - ! event TDR observations within the BUFR-formatted file and the - ! corresponding TC identifiers. - - !----------------------------------------------------------------------- - - subroutine tdr_stmid(tdr) - - ! Define variables passed to routine - - type(tdr_struct) :: tdr - - ! Define variables computed within routine - - type(bufr_struct) :: bufr - type(bufrhdr_struct) :: bufrhdr - character(len=3) :: stmid - real(r_double) :: hdr - integer :: tcid - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - equivalence(hdr,stmid) - bufr%mxmn = 1 - bufr%mxlv = 1 - bufr%hdstr = 'STMID' - call bufrio_interface_readhdruniq(recon_tdr_filepath,bufr,bufrhdr) - tdr%nstmid = size(bufrhdr%hdr) - call variable_interface_setup_struct(tdr) - - ! Loop through local variable - - do i = 1, size(bufrhdr%hdr) - - ! Define local variables - - hdr = bufrhdr%hdr(1,i) - read(stmid,'(i)') tcid - call write_tdr_tcid(tcid,tdr%stmid(i)) - - end do ! do i = 1, size(bufrhdr%hdr) - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(bufrhdr) - - ! Define local variables - -500 format(i2.2,'L') -501 format(i2.2,'E') -502 format(i2.2,'C') - - !===================================================================== - - end subroutine tdr_stmid - - !======================================================================= - - ! SUBROUTINE: - - ! tdr_timeinfo.f90 - - ! DESCRIPTION: - - ! This subroutine collects the file and observation time information - ! for each respective TDR event. - - ! INPUT VARIABLES: - - ! * tdr; a FORTRAN tdr_struct variable containing (at minimum) the - ! number of TC event TDR observations within the BUFR-formatted - ! file and the corresponding TC identifiers. - - ! OUTPUT VARIABLES: - - ! * tdr; a FORTRAN tdr_struct variable containing the observation - ! time offsets (time_min and time_max) relative to the file - ! timestamp (file_timestamp). - - !----------------------------------------------------------------------- - - subroutine tdr_timeinfo(tdr) - - ! Define variables passed to routine - - type(tdr_struct) :: tdr - - ! Define variables computed within routine - - type(bufr_struct) :: bufr - type(bufrhdr_struct) :: bufrhdr - character(len=10) :: datestr - character(len=3) :: ctcid - character(len=3) :: stmid - real(r_double) :: hdr(7) - real(r_double) :: jday_file - real(r_double) :: jday_obs - real(r_double) :: time_diff - integer :: dd - integer :: hh - integer :: mm - integer :: nn - integer :: ss - integer :: tcid - integer :: yyyy - - ! Define counting variables - - integer :: i, j - - !===================================================================== - - ! Define local variables - - equivalence(hdr(7),stmid) - bufr%mxmn = 7 - bufr%mxlv = 1 - bufr%hdstr = 'YEAR MNTH DAYS HOUR MINU SECO STMID' - call bufrio_interface_readhdrall(recon_tdr_filepath,bufr,bufrhdr) - write(datestr,'(i10)') bufr%idate - read(datestr,'(i4,3i2)') yyyy, mm, dd, hh - yyyy = 2000 + yyyy - nn = 0 - ss = 0 - write(tdr%file_timestamp,500) yyyy, mm, dd, hh, nn, ss - - ! Compute local variables - - call time_methods_julian_day(yyyy,mm,dd,hh,nn,ss,jday_file) - - ! Loop through local variable - - do i = 1, size(tdr%stmid) - - ! Define local variables - - tdr%time_max(i) = -1.0*spval - tdr%time_min(i) = spval - tdr%nrecs(i) = 0 - - ! Loop through local variable - - do j = 1, bufr%nrecs - - ! Define local variables - - hdr(7) = bufrhdr%hdr(7,j) - read(stmid,'(i)') tcid - call write_tdr_tcid(tcid,ctcid) - - ! Check local variable and proceed accordingly - - if(trim(adjustl(ctcid)) .eq. trim(adjustl(tdr%stmid(i)))) then - - ! Define local variables - - yyyy = int(bufrhdr%hdr(1,j)) - mm = int(bufrhdr%hdr(2,j)) - dd = int(bufrhdr%hdr(3,j)) - hh = int(bufrhdr%hdr(4,j)) - nn = int(bufrhdr%hdr(5,j)) - ss = int(bufrhdr%hdr(6,j)) - - ! Compute local variables - - call time_methods_julian_day(yyyy,mm,dd,hh,nn,ss,jday_obs) - time_diff = (jday_obs - jday_file)*86400 - - ! Define local variables - - tdr%time_min(i) = min(tdr%time_min(i),time_diff) - tdr%time_max(i) = max(tdr%time_max(i),time_diff) - tdr%nrecs(i) = tdr%nrecs(i) + 1 - - end if ! if(trim(adjustl(ctcid)) - ! .eq. trim(adjustl(tdr%stmid(i)))) - - end do ! do j = 1, bufr%nrecs - - end do ! do i = 1, size(tdr%stmid) - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(bufrhdr) - - ! Define local variables - -500 format(i4.4,'-',i2.2,'-',i2.2,'_',i2.2,':',i2.2,':',i2.2) - - !===================================================================== - - end subroutine tdr_timeinfo - - !======================================================================= - - ! SUBROUTINE: - - ! write_tdr_status.f90 - - ! DESCRIPTION: - - ! This subroutine writes an external formatted file for each TDR - ! event which contains information pertaining to the collected TDR - ! observations; each file is written to the data path specified by - ! the user (datapath, namelist level) as 'recon_tdr_status.', - ! where is the TDR event identifier. - - ! INPUT VARIABLES: - - ! * tdr; a FORTRAN tdr_struct variable. - - !----------------------------------------------------------------------- - - subroutine write_tdr_status(tdr) - - ! Define variables passed to routine - - type(tdr_struct) :: tdr - - ! Define variables computed within routine - - character(len=500) :: filename - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Loop through local variable - - do i = 1, size(tdr%stmid) - - ! Define local variables - - write(filename,500) tdr%stmid(i) - filename = trim(adjustl(datapath))//filename - open(99,file=trim(adjustl(filename)),form='formatted') - write(99,501) tdr%stmid(i) - write(99,502) tdr%file_timestamp - write(99,503) tdr%time_min(i) - write(99,504) tdr%time_max(i) - write(99,505) tdr%nrecs(i) - write(99,506) tdr%flag(i) - write(99,507) trim(adjustl(recon_tdr_filepath)) - close(99) - - end do ! do i = 1, size(tdr%stmid) - - ! Define local variables - -500 format('recon_tdr_status.',a3) -501 format('EVENT: ',a3) -502 format('FILE_TIMESTAMP: ',a19) -503 format('MIN_SECONDS_OFFSET: ',f13.5) -504 format('MAX_SECONDS_OFFSET: ',f13.5) -505 format('NUMBER_OBSERVATIONS: ',i) -506 format('TDR_USAGE_FLAG: ',i1) -507 format('FILE_PATH: ',a) - - !===================================================================== - - end subroutine write_tdr_status - - !======================================================================= - - ! SUBROUTINE: - - ! write_tdr_tcid.f90 - - ! DESCRIPTION: - - ! This subroutine defines a logical character string corresponding - ! to the TDR event. - - ! INPUT VARIABLES: - - ! * itcid; a FORTRAN integer value containing the TDR event - ! identifier. - - ! * ctcid; a FORTRAN character string. - - ! OUTPUT VARIABLES: - - ! * ctcid; a FORTRAN character string defining the TC event - ! corresponding to the TDR event. - - ! NOTES: - - ! 100 <= itcid < 200; North Atlantic Ocean TDR event. - - ! 200 <= itcid < 300; Eastern Pacific Ocean TDR event. - - ! 300 <= itcid; Central Pacific Ocean TDR event. - - !----------------------------------------------------------------------- - - subroutine write_tdr_tcid(itcid,ctcid) - - ! Define variables passed to routine - - character(len=3) :: ctcid - integer :: itcid - - !===================================================================== - - ! Check local variable and proceed accordingly - - if((itcid .ge. 100) .and. (itcid .lt. 200)) then - - ! Define local variables - - write(ctcid,500) int(itcid - 100) - - else if((itcid .ge. 200) .and. (itcid .lt. 300)) then - - ! Define local variables - - write(ctcid,501) int(itcid - 200) - - else if(itcid .lt. 300) then - - ! Define local variables - - write(ctcid,502) int(itcid - 300) - - end if ! if((itcid .ge. 100) .and. (itcid .lt. 200)) - - ! Define local variables - -500 format(i2.2,'L') -501 format(i2.2,'E') -502 format(i2.2,'C') - - !===================================================================== - - end subroutine write_tdr_tcid - - !======================================================================= - -end module recon_tdr_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/recon_vdm_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/recon_vdm_interface.F90 deleted file mode 100644 index 02e07999b..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/recon_vdm_interface.F90 +++ /dev/null @@ -1,408 +0,0 @@ -module recon_vdm_interface - - !======================================================================= - - !$$$ PROGRAM DOCUMENTATION BLOCK - - ! obs-preproc :: recon_vdm_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - ! Review the README, within the top-level directory, which provides - ! relevant instructions and (any) references cited by algorithms - ! within this software suite. - - !======================================================================= - - ! Define associated modules and subroutines - - use bufrio_interface - use constants_interface - use fileio_interface - use grid_methods_interface - use kinds_interface - use math_methods_interface - use meteo_methods_interface - use namelist_interface - use time_methods_interface - use variable_interface - use wmm_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: recon_vdm - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! recon_vdm.f90 - - ! DESCRIPTION: - - ! This is the driver routine for preparing National Oceanic and - ! Atmospheric Administration (NOAA) National Hurricane Center (NHC) - ! aircraft reconnissance vortex data message (VDM) files within a - ! Binary Universal Formatted (BUFR) file. - - !----------------------------------------------------------------------- - - subroutine recon_vdm() - - ! Define variables computed within routine - - type(vdm_struct) :: vdm - - !===================================================================== - - ! Define local variables - - call fileio_interface_read(recon_filelist,vdm) - - ! Compute local variables - - call obs_locations(vdm) - call obs_winds(vdm) - - ! Define local variables - - call vdm_bufr(vdm) - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(vdm) - - !===================================================================== - - end subroutine recon_vdm - - !======================================================================= - - ! SUBROUTINE: - - ! obs_locations.f90 - - ! DESCRIPTION: - - ! This subroutine estimates the flight-level observation locations - ! using the fix location and the bearing (heading) and distance - ! relative to the respective fix location; the flight-level bearing - ! (heading) values are correct for the magnetic declination - ! (variation), resulting from the reconnissance mission compass - ! derived bearing, using the World Magnetic Model (WMM). - - ! REFERENCES: - - ! https://www.ngdc.noaa.gov/geomag/WMM/ - - ! INPUT VARIABLES: - - ! * vdm; a FORTRAN vdm_struct variable. - - ! OUTPUT VARIABLES: - - ! * vdm; a FORTRAN vdm_struct variable with latitude and longitude - ! estimates computed from the flight-level observation attributes. - - !----------------------------------------------------------------------- - - subroutine obs_locations(vdm) - - ! Define variables passed to routine - - type(vdm_struct) :: vdm - - ! Define variables computed within routine - - type(grid_struct) :: grid - type(wmm_struct) :: wmm - - ! Define counting variables - - integer :: i, j - - !===================================================================== - - ! Loop through local variable - - do i = 1, vdm%nvdm - - ! Loop through local variable - - do j = 1, vdm%nobs - - ! Define local variables - - grid%gclat = vdm%fix_lat(i) - grid%gclon = vdm%fix_lon(i) - wmm%coeff_filepath = wmm_coeff_filepath - wmm%glat = vdm%fix_lat(i) - wmm%glon = vdm%fix_lon(i) - read(vdm%fix_time(i)(1:4),'(f4.0)') wmm%year - - ! Check local variable and proceed accordingly - - if((vdm%obs_head(i,j) .ne. spval) .and. (vdm%obs_dist(i,j) .ne. & - & spval)) then - - ! Define local variables - - wmm%alt = vdm%obs_alt(i,j)/1000.0 - - ! Compute local variables - - call wmm_compute(wmm) - - ! Define local variables - - grid%gchead = (vdm%obs_head(i,j) + wmm%dec) + 270.0 - grid%gcdist = vdm%obs_dist(i,j) - - ! Compute local variables - - call grid_methods_gcgeo(grid) - - ! Define local variables - - vdm%obs_lat(i,j) = grid%gclat - vdm%obs_lon(i,j) = grid%gclon - - end if ! if((vdm%obs_head(i,j) .ne. spval) - ! .and. (vdm%obs_dist(i,j) .ne. spval)) - - end do ! do j = 1, vdm%nobs - - end do ! do i = 1, vdm%nvdm - - !===================================================================== - - end subroutine obs_locations - - !======================================================================= - - ! SUBROUTINE: - - ! obs_winds.f90 - - ! DESCRIPTION: - - ! This subroutine computes the vector wind components (e.g., u- and - ! v-) using the wind speed and direction. - - ! REFERENCES: - - ! http://jrscience.wcp.muohio.edu/downloads/VortexDataMessage.pdf - - ! INPUT VARIABLES: - - ! * vdm; a FORTRAN vdm_struct variable. - - ! OUTPUT VARIABLES: - - ! * vdm; a FORTRAN vdm_struct variable with zonal (u-) and - ! meridional (v-) wind estimates computed from the flight-level - ! observation attributes. - - !----------------------------------------------------------------------- - - subroutine obs_winds(vdm) - - ! Define variables passed to routine - - type(vdm_struct) :: vdm - - ! Define variables computed within routine - - real(r_kind) :: dir - real(r_kind) :: spd - - ! Define counting variables - - integer :: i, j - - !===================================================================== - - ! Loop through local variable - - do i = 1, vdm%nvdm - - ! Loop through local variable - - do j = 1, vdm%nobs - - ! Check local variable and proceed accordingly - - if((vdm%obs_wdir(i,j) .ne. spval) .and. (vdm%obs_wspd(i,j) .ne. & - & spval)) then - - ! Define local variables - - dir = (vdm%obs_wdir(i,j)*deg2rad) - spd = vdm%obs_wspd(i,j) - - ! Compute local variables - - vdm%obs_u(i,j) = abs(spd)*sin(dir) - vdm%obs_v(i,j) = abs(spd)*cos(dir) - - end if ! if((vdm%obs_wdir(i,j) .ne. spval) - ! .and. (vdm%obs_wspd(i,j) .ne. spval)) - - end do ! do j = 1, vdm%nobs - - end do ! do i = 1, vdm%nvdm - - !===================================================================== - - end subroutine obs_winds - - !======================================================================= - - ! SUBROUTINE: - - ! vdm_bufr.f90 - - ! DESCRIPTION: - - ! This subroutine constucts an external Binary Universal Formatted - ! (BUFR) file containing each available observation within the - ! FORTRAN vdm_struct variable. - - ! INPUT VARIABLES: - - ! * vdm; a FORTRAN vdm_struct variable. - - !----------------------------------------------------------------------- - - subroutine vdm_bufr(vdm) - - ! Define variables passed to routine - - type(vdm_struct) :: vdm - - ! Define variables computed within routine - - type(bufr_struct) :: bufr - type(bufr_info_struct) :: bufr_info - character(len=500) :: lbufr_filepath - character(len=8) :: cacobid - real(r_double) :: anljday - real(r_double) :: obsjday - real(r_double) :: racobid - integer :: dd - integer :: hh - integer :: mm - integer :: nn - integer :: ss - integer :: yyyy - - ! Define counting variables - - integer :: i, j - - !===================================================================== - - ! Define local variables - - equivalence(racobid,cacobid) - call time_methods_date_attributes(analdate,yyyy,mm,dd,hh,nn,ss) - call time_methods_julian_day(yyyy,mm,dd,hh,nn,ss,anljday) - bufr_info%filename = bufr_info_filepath - call fileio_interface_read(bufr_info) - bufr%hdstr = 'SID XOB YOB DHR TYP' - bufr%obstr = 'POB UOB VOB' - bufr%qcstr = 'PQM WQM' - bufr%oestr = 'POE WOE' - bufr%subset = trim(adjustl(bufr_info%subset)) - bufr%mxmn = 5 - bufr%mxlv = 1 - lbufr_filepath = trim(adjustl(bufr_filepath)) - call bufrio_interface_idate(analdate,bufr) - call bufrio_interface_open(lbufr_filepath,bufr_tblpath,bufr,.false., & - & .false.,.true.) - - ! Loop through local variable - - do i = 1, vdm%nvdm - - ! Loop through local variable - - do j = 1, vdm%nobs - - ! Check local variable and proceed accordingly - - if((vdm%obs_u(i,j) .ne. spval) .and. (vdm%obs_v(i,j) .ne. & - & spval) .and. (vdm%obs_lon(i,j) .ne. spval) .and. & - & (vdm%obs_lat(i,j) .ne. spval)) then - - ! Define local variables - - call variable_interface_setup_struct(bufr) - call time_methods_date_attributes(vdm%obs_time(i,j),yyyy,mm, & - & dd,hh,nn,ss) - - ! Compute local variables - - call time_methods_julian_day(yyyy,mm,dd,hh,nn,ss,obsjday) - - ! Define local variables - - write(cacobid,500) hh, nn, ss - bufr%hdr(1) = dble(racobid) - bufr%hdr(2) = dble(vdm%obs_lon(i,j) + 360.0) - bufr%hdr(3) = dble(vdm%obs_lat(i,j)) - bufr%hdr(4) = (obsjday - anljday)*dble(24.0) - bufr%hdr(5) = bufr_info%obs_type_wind - bufr%obs(1,1) = vdm%obs_plev(i,j)/100.0 - bufr%obs(2,1) = vdm%obs_u(i,j) - bufr%obs(3,1) = vdm%obs_v(i,j) - bufr%qcf(1,1) = 2.0 - bufr%qcf(2,1) = 2.0 - call bufrio_interface_write(bufr) - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(bufr) - - end if ! if((vdm%obs_u(i,j) .ne. spval) - ! .and. (vdm%obs_v(i,j) .ne. spval) - ! .and. (vdm%obs_lon(i,j) .ne. spval) - ! .and. (vdm%obs_lat(i,j) .ne. spval)) - - end do ! do j = 1, vdm%nobs - - end do ! do i = 1, vdm%nvdm - - ! Define local variables - - call bufrio_interface_close(.false.,.true.) -500 format('VD',a2,a2,a2) - - !===================================================================== - - end subroutine vdm_bufr - - !======================================================================= - -end module recon_vdm_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/sonde_tempdrop_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/sonde_tempdrop_interface.F90 deleted file mode 100644 index a34b4028b..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/sonde_tempdrop_interface.F90 +++ /dev/null @@ -1,2195 +0,0 @@ -module sonde_tempdrop_interface - - !======================================================================= - - !$$$ PROGRAM DOCUMENTATION BLOCK - - ! obs-preproc :: sonde_tempdrop_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - ! Review the README, within the top-level directory, which provides - ! relevant instructions and (any) references cited by algorithms - ! within this software suite. - - !======================================================================= - - ! Define associated modules and subroutines - - use bufrio_interface - use constants_interface - use fileio_interface - use grid_methods_interface - use kinds_interface - use math_methods_interface - use meteo_methods_interface - use namelist_interface - use netcdf_interface - use time_methods_interface - use variable_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: sonde_tempdrop - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! sonde_tempdrop.f90 - - ! DESCRIPTION: - - ! This is the driver routine for the decoding and formatting of the - ! National Oceanic and Atmospheric Administration (NOAA) Atlantic - ! Oceanographic and Meteorological Laboratory (AOML) Hurricane - ! Research Division (HRD) TEMP-DROP message sondes and subqeuently - ! preparing a Binary Universal Formatted (BUFR) file. - - !----------------------------------------------------------------------- - - subroutine sonde_tempdrop() - - ! Define variables computed within routine - - type(hsa_struct), dimension(:), allocatable :: hsa - type(meteo_struct) :: meteo - type(sonde_struct) :: sonde - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - call fileio_interface_read(sonde) - - ! Allocate memory for local variables - - if(.not. allocated(hsa)) allocate(hsa(sonde%nsondes)) - - ! Loop through local variable - - do i = 1, sonde%nsondes - - ! Compute local variables - - call tempdrop_to_hsa(sonde%filename(i),hsa(i),meteo) - - ! Define local variables - - call fileio_interface_write(tempdrop_hsa_table_file, & - & sonde%filename(i),hsa(i)) - - ! Check local variable and proceed accordingly - - if(tempdrop_compute_drift) then - - ! Define local variables - - call check_tempdrop_msg(sonde%filename(i),hsa(i)) - - ! Check local variable and proceed accordingly - - if(hsa(i)%process) then - - ! Compute local variables - - call sonde_drift(sonde,hsa(i),meteo) - - end if ! if(hsa(i)%process) - - end if ! if(tempdrop_compute_drift) - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(meteo) - - end do ! do i = 1, sonde%nsondes - - ! Define local variables - - call sonde_bufr(hsa) - - ! Loop through local variable - - do i = 1, sonde%nsondes - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(hsa(i)) - - end do ! do i = 1, sonde%nsondes - - ! Deallocate memory for local variables - - if(allocated(hsa)) deallocate(hsa) - call variable_interface_cleanup_struct(sonde) - - !===================================================================== - - end subroutine sonde_tempdrop - - !======================================================================= - - ! SUBROUTINE: - - ! check_tempdrop_msg.f90 - - ! DESCRIPTION: - - ! This subroutine checks that the parameters required to compute the - ! drift correction are available within the respective TEMP-DROP - ! formatted observation/message file; the attribute 'process' within - ! the FORTRAN hsa_struct variable is updated accordingly. - - ! INPUT VARIABLES: - - ! * infile; a FORTRAN character string specifying the path to the - ! external file containing the TEMPDROP messages. - - ! * hsa; a FORTRAN hsa_struct variable. - - ! OUTPUT VARIABLES: - - ! * hsa; a FORTRAN hsa_struct variable where the attribute value - ! 'process' as been defined accordingly. - - !----------------------------------------------------------------------- - - subroutine check_tempdrop_msg(infile,hsa) - - ! Define variables passed to routine - - type(hsa_struct) :: hsa - character(len=500) :: infile - - ! Define variables passed to routine - - character(len=70) :: line - logical :: find_rel - logical :: find_spg - logical :: find_spl - - !===================================================================== - - ! Define local variables - - hsa%process = .false. - find_rel = .false. - find_spg = .false. - find_spl = .false. - open(99,file=trim(adjustl(infile)),status='old') -100 read(99,'(a)',end=1000) line - if(index(line,'REL') .ne. 0) find_rel = .true. - goto 100 -1000 continue - close(99) - open(99,file=trim(adjustl(infile)),status='old') -101 read(99,'(a)',end=1001) line - if(index(line,'SPG') .ne. 0) find_spg = .true. - goto 101 -1001 continue - close(99) - open(99,file=trim(adjustl(infile)),status='old') -102 read(99,'(a)',end=1002) line - if(index(line,'SPL') .ne. 0) find_spl = .true. - goto 102 -1002 continue - close(99) - - ! Check local variable and proceed accordingly - - if(find_rel .and. (find_spg .or. find_spl)) then - - ! Define local variables - - hsa%process = .true. - - end if ! if(find_rel .and. (find_spg .or. find_spl)) - - !===================================================================== - - end subroutine check_tempdrop_msg - - !======================================================================= - - ! SUBROUTINE: - - ! compute_drift.f90 - - ! DESCRIPTION: - - ! This subroutine computes the drift-correction estimate for the - ! sonde trajectory; the updated geographical locations and time - ! information are written to the respective FORTRAN hsa_struct - ! variables. - - ! INPUT VARIABLES: - - ! * hsa; a FORTRAN hsa_struct variable containing the decoded - ! TEMP-DROP attributes for the release and splash times, the - ! timestamp attributes, and the filename to which the decoded - ! TEMP-DROP message is written. - - ! * hsa_interp; a FORTRAN hsa_struct variable containing updated - ! observed variable profiles obtain via interpolation. - - ! * meteo; a FORTRAN meteo_struct variable containing both observed - ! and diagnostic variables computed from the decoded TEMP-DROP - ! message. - - ! OUTPUT VARIABLES: - - ! * hsa; a FORTRAN hsa_struct variable containing the - ! drift-corrected HSA decoded TEMP-DROP messages. - - ! * meteo; a FORTRAN meteo_struct variable containing - ! drift-corrected observed and diagnostic variables computed from - ! the decoded TEMP-DROP message. - - !----------------------------------------------------------------------- - - subroutine compute_drift(hsa,hsa_interp,meteo) - - ! Define variables passed to routine - - type(hsa_struct) :: hsa - type(hsa_struct) :: hsa_interp - type(meteo_struct) :: meteo - - ! Define variables computed within routine - - type(grid_struct) :: grid - type(statgrid_struct) :: statgrid - character(len=8) :: yymmdd - character(len=4) :: hhnn - real(r_double) :: julian_time - real(r_double) :: spg_julian - real(r_kind) :: avgp - real(r_kind) :: avgt - real(r_kind) :: dtime - real(r_kind) :: fallrate - real(r_kind) :: gsndfall2 - real(r_kind) :: norma - real(r_kind) :: normb - real(r_kind) :: plat - real(r_kind) :: plon - real(r_kind) :: ppres - real(r_kind) :: ptemp - real(r_kind) :: ptime - real(r_kind) :: spgtime - real(r_kind) :: timediff - integer :: dd - integer :: hh - integer :: mm - integer :: nn - integer :: rel_hmsts - integer :: spg_hmsts - integer :: ss - integer :: time_hmsts - integer :: time_sthms - integer :: yyyy - - ! Define counting variables - - integer :: i, j - - !===================================================================== - - ! Define local variables - - call time_methods_hmsts(hsa_interp%logtime,time_hmsts) - hsa_interp%fallrate = spval - - ! Check local variable and proceed accordingly - - if(hsa_interp%spgtime .eq. -999) then - - ! Define local variables - - statgrid%n = hsa_interp%nz - call variable_interface_setup_struct(statgrid) - statgrid%var = hsa_interp%t - where(statgrid%var .le. -90.0) statgrid%var = spval - - ! Compute local variables - - avgp = 0.5*(hsa_interp%pmax + hsa_interp%pmin) - call math_methods_stats(statgrid) - avgt = statgrid%mean - fallrate = gsndfall2(avgp,avgt,spval,hsa_interp%psfc,.true.)/100.0 - call time_methods_hmsts(hsa_interp%logtime,time_hmsts) - spgtime = float(time_hmsts) + (hsa_interp%pmax - & - & hsa_interp%pmin)/fallrate - call time_methods_sthms(int(spgtime),time_sthms) - - ! Define local variables - - hsa_interp%spgtime = time_sthms - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(statgrid) - - end if ! if(hsa_interp%spgtime .eq. -999) - - ! Compute local variables - - call time_methods_hmsts(hsa_interp%reltime,time_hmsts) - - ! Define local variables - - hsa_interp%time = time_hmsts - hsa_interp%fallrate = 0.0 - - ! Loop through local variable - - do i = 1, hsa_interp%nz - - ! Check local variable and proceed accordingly - - if((hsa_interp%p(i) .ge. hsa_interp%pmin) .and. (hsa_interp%t(i) & - & .ge. -90.0)) then - - ! Define local variables - - ppres = hsa_interp%p(i) - ptemp = hsa_interp%t(i) - goto 1000 - - end if ! if((hsa_interp%p(i) .ge. hsa_interp%pmin) .and. - ! (hsa_interp%t(i) .ge. -90.0)) - - end do ! do i = 1, hsa_interp%nz - - ! Define local variables - -1000 continue - call time_methods_hmsts(hsa_interp%reltime,time_hmsts) - ptime = float(time_hmsts) - hsa_interp%time(hsa_interp%nz) = ptime - - ! Loop through local variable - - do i = (hsa_interp%nz - 1), 1, -1 - - ! Check local variable and proceed accordingly - - if(hsa_interp%t(i) .ge. -90.0) then - - ! Define local variables - - avgp = 0.5*(ppres + hsa_interp%p(i)) - avgt = 0.5*(ptemp + hsa_interp%t(i)) - - ! Compute local variables - - hsa_interp%fallrate(i) = gsndfall2(avgp,avgt,spval, & - & hsa_interp%psfc,.true.)/100.0 - timediff = (hsa_interp%p(i) - ppres)/ & - & hsa_interp%fallrate(i) - timediff = max(timediff,0.0) - hsa_interp%time(i) = ptime - timediff - - ! Define local variables - - ppres = hsa_interp%p(i) - ptemp = hsa_interp%t(i) - ptime = hsa_interp%time(i) - - end if ! if(hsa_interp%t(i) .ge. -90.0) - - end do ! do i = (hsa_interp%nz - 1), 1, -1 - - ! Define local variables - - plat = hsa%rellat - plon = hsa%rellon - ptime = hsa_interp%time(hsa_interp%nz) - hsa_interp%lon = plon - hsa_interp%lat = plat - - ! Loop through local variable - - do i = hsa_interp%nz, 2, -1 - - ! Check local variable and proceed accordingly - - if((hsa_interp%p(i) .le. hsa_interp%pmax) .and. (hsa_interp%p(i) & - & .ge. hsa_interp%pmin) .and. ((hsa_interp%tail(i) .eq. & - & 'MANL') .or. (hsa_interp%tail(i) .eq. 'SIGL'))) then - - ! Define local variables - - grid%gclat = plat - grid%gclon = -1.0*plon - - ! Compute local variables - - dtime = ptime - hsa_interp%time(i) - grid%gchead = 270.0 + atan2(hsa_interp%v(i),hsa_interp%u(i))* & - & rad2deg - grid%gcdist = sqrt(hsa_interp%u(i)**2.0 + hsa_interp%v(i)**2.0)* & - & dtime - - ! Compute local variables - - call grid_methods_gcgeo(grid) - - ! Define local variables - - hsa_interp%lon(i) = -1.0*grid%gclon - hsa_interp%lat(i) = grid%gclat - plat = hsa_interp%lat(i) - plon = hsa_interp%lon(i) - ptime = hsa_interp%time(i) - - else if(hsa_interp%p(i) .eq. 1070.0) then - - ! Define local variables - - hsa_interp%lon(i) = hsa_interp%spglon - hsa_interp%lat(i) = hsa_interp%spglat - - else ! if((hsa_interp%p(i) .le. hsa_interp%pmax) - ! .and. (hsa_interp%p(i) .ge. hsa_interp%pmin) - ! .and. ((hsa_interp%tail(i) .eq. 'MANL') - ! .or. (hsa_interp%tail(i) .eq. 'SIGL'))) - - ! Define local variables - - hsa_interp%lon(i) = hsa%lon(i) - hsa_interp%lat(i) = hsa%lat(i) - - end if ! if((hsa_interp%p(i) .le. hsa_interp%pmax) - ! .and. (hsa_interp%p(i) .ge. hsa_interp%pmin) - ! .and. ((hsa_interp%tail(i) .eq. 'MANL') - ! .or. (hsa_interp%tail(i) .eq. 'SIGL'))) - - end do ! do i = hsa_interp%nz, 2, -1 - - ! Define local variables - - statgrid%n = hsa_interp%nz - call variable_interface_setup_struct(statgrid) - norma = min(hsa%rellon,hsa%spglon) - normb = max(hsa%rellon,hsa%spglon) - statgrid%var = hsa_interp%lon - - ! Compute local variables - - call math_methods_normalize_values(statgrid,norma,normb) - - ! Define local variables - - if(tempdrop_normalize) hsa_interp%lon = statgrid%var - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(statgrid) - - ! Define local variables - - statgrid%n = hsa_interp%nz - call variable_interface_setup_struct(statgrid) - norma = min(hsa%rellat,hsa%spglat) - normb = max(hsa%rellat,hsa%spglat) - statgrid%var = hsa_interp%lat - - ! Compute local variables - - call math_methods_normalize_values(statgrid,norma,normb) - - ! Define local variables - - if(tempdrop_normalize) hsa_interp%lat = statgrid%var - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(statgrid) - - ! Define local variables - - j = 0 - - ! Loop through local variable - - do i = 1, hsa_interp%nz - - ! Check local variable and proceed accordingly - - if((hsa_interp%p(i) .le. hsa_interp%pmax) .and. (hsa_interp%p(i) & - & .ge. hsa_interp%pmin) .and. ((hsa_interp%tail(i) .eq. & - & 'MANL') .or. (hsa_interp%tail(i) .eq. 'SIGL'))) then - - ! Compute local variables - - timediff = (hsa_interp%time(hsa_interp%nz) - & - & hsa_interp%time(i))/86400.0 - julian_time = hsa_interp%rel_julian + dble(timediff) - - ! Define local variables - - j = j + 1 - meteo%lon(j) = -1.0*dble(hsa_interp%lon(i)) - meteo%lat(j) = dble(hsa_interp%lat(i)) - meteo%jdate(j) = julian_time - - end if ! if((hsa_interp%p(i) .le. hsa_interp%pmax) - ! .and. (hsa_interp%p(i) .ge. hsa_interp%pmin) - ! .and. ((hsa_interp%tail(i) .eq. 'MANL') - ! .or. (hsa_interp%tail(i) .eq. 'SIGL'))) - - end do ! do i = 1, hsa_interp%nz - - ! Loop through local variable - - do i = hsa_interp%nz, 1, -1 - - ! Compute local variables - - timediff = (hsa_interp%time(hsa_interp%nz) - & - & hsa_interp%time(i))/86400.0 - julian_time = hsa_interp%rel_julian + dble(timediff) - - ! Define local variables - - call time_methods_gregorian_date(dble(julian_time),yyyy,mm,dd,hh, & - & nn,ss) - timediff = real(julian_time - dble(int(julian_time))) - write(yymmdd,'(i4,2(i2.2))') yyyy, mm, dd - write(hhnn,'(2(i2.2))') hh, nn - read(yymmdd(3:8),'(f7.0)') hsa%yymmdd(i) - read(hhnn,'(i4)') hsa%gmt(i) - hsa%lon(i) = hsa_interp%lon(i) - hsa%lat(i) = hsa_interp%lat(i) - - end do ! do i = hsa_interp%nz, 1, -1 - - ! Define local variables - - call time_methods_hmsts(hsa%spgtime,spg_hmsts) - - ! Check local variable and proceed accordingly - - if(spg_hmsts .ge. hsa_interp%rel_hmsts) then - - ! Define local variables - - hsa%spg_julian = hsa%rel_julian + dble((dble(spg_hmsts - & - & hsa_interp%rel_hmsts)/86400.0)) - - end if ! if(spg_hmsts .ge. hsa_interp%rel_hmsts) - - ! Check local variable and proceed accordingly - - if(spg_hmsts .lt. hsa_interp%rel_hmsts) then - - ! Define local variables - - hsa%spg_julian = hsa_interp%rel_julian + & - & dble(dble(spg_hmsts)/86400.0) - - end if ! if(spg_hmsts .lt. hsa_interp%rel_hmsts) - - !===================================================================== - - end subroutine compute_drift - - !======================================================================= - - ! SUBROUTINE: - - ! compute_meteo.f90 - - ! DESCRIPTION: - - ! This subroutine computes the diagnostic meteorological variables - ! along the sonde trajectory from the collected observed values; - ! this is used in order to compute other (useful) diagnostics (e.g., - ! Skew-T/Log-P). - - ! INPUT VARIABLES: - - ! * meteo; a FORTRAN meteo_struct variable containing populated - ! arrays for observed variables collected along the sonde - ! trajectory. - - ! OUTPUT VARIABLES: - - ! * meteo; a FORTRAN meteo_struct variable containing populated - ! diagnostic variable arrays computed from the observed variables - ! collected along the sonde trajectory. - - !----------------------------------------------------------------------- - - subroutine compute_meteo(meteo) - - ! Define variables passed to routine - - type(meteo_struct) :: meteo - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Loop through local variable - - do i = 1, meteo%nz - - ! Check local variable and proceed accordingly - - if(meteo%p(i) .gt. meteo%psfc) then - - ! Define local variables - - meteo%p(i) = spval - meteo%t(i) = spval - meteo%z(i) = spval - meteo%u(i) = spval - meteo%v(i) = spval - meteo%rh(i) = spval - - end if ! if(meteo%p(i) .gt. meteo%psfc) - - end do ! do i = 1, meteo%nz - - ! Compute local variables - - call meteo_methods_wvmxrt(meteo) - call meteo_methods_dwpttemp(meteo) - call meteo_methods_wspdwdir(meteo) - - !===================================================================== - - end subroutine compute_meteo - - !======================================================================= - - ! SUBROUTINE: - - ! interp_sonde.f90 - - ! DESCRIPTION: - - ! This subroutine attempts to fill missing observation values along - ! a sonde trajectory using the pressure level of the observation and - ! other available values along the profile; this subroutine also - ! populates the observation variables within the FORTRAN - ! meteo_struct variable. - - ! NOTE: - - ! Only observations collected along the sonde trajectory that occur - ! at the designated mandatory (MANL) and significant (SIGL) levels - ! are used for interpolation. - - ! INPUT VARIABLES: - - ! * hsa; a FORTRAN hsa_struct variable. - - ! * meteo; a FORTRAN meteo_struct variable. - - ! OUTPUT VARIABLES: - - ! * hsa; a FORTRAN hsa_struct variable containing updated observed - ! variable profiles obtain via interpolation. - - ! * meteo; a FORTRAN meteo_struct variable containing populated - ! observed variable arrays. - - !----------------------------------------------------------------------- - - subroutine interp_sonde(hsa,meteo) - - ! Define variables passed to routine - - type(hsa_struct) :: hsa - type(meteo_struct) :: meteo - - ! Define variables computed within routine - - type(interp_p_struct) :: interp_p - real(r_kind) :: dstp - real(r_kind) :: dstvar - integer :: nz - - ! Define counting variables - - integer :: i, j - - !===================================================================== - - ! Define local variables - - where(hsa%t .le. -90.0) hsa%t = spval - nz = count((hsa%p .le. hsa%pmax) .and. (hsa%p .ge. hsa%pmin) & - & .and. ((hsa%tail .eq. 'MANL') .or. (hsa%tail .eq. 'SIGL'))) - interp_p%nz = count((hsa%p .le. hsa%pmax) .and. (hsa%p .ge. hsa%pmin) & - & .and. (hsa%t .ne. spval) .and. ((hsa%tail .eq. 'MANL') .or. & - & (hsa%tail .eq. 'SIGL'))) - meteo%nz = nz - call variable_interface_setup_struct(meteo) - j = 0 - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) .and. & - & ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) & - & then - - ! Define local variables - - j = j + 1 - meteo%p(j) = dble(hsa%p(i)*100.0) - - end if ! if(hsa%p(i) .le. hsa%pmax .and. hsa%p(i) .ge. hsa%pmin - ! .and. ((hsa%tail(i) .eq. 'MANL' .or. hsa%tail(i) - ! .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Define local variables - - interp_p%psfc = hsa%psfc - meteo%psfc = dble(hsa%psfc*100.0) - - ! Loop through local variable - - do while((interp_p%nz .lt. nz) .and. (interp_p%nz .gt. 1)) - - ! Define local variables - - call variable_interface_setup_struct(interp_p) - j = 0 - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) & - & .and. (hsa%t(i) .ne. spval) .and. ((hsa%tail(i) .eq. & - & 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) then - - ! Define local variables - - j = j + 1 - interp_p%p(j) = hsa%p(i) - interp_p%var(j) = hsa%t(i) - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. (hsa%t(i) .ne. spval) - ! .and. ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) - ! .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) & - & .and. (hsa%t(i) .eq. spval) .and. ((hsa%tail(i) .eq. & - & 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) then - - ! Define local variables - - dstp = hsa%p(i) - - ! Compute local variables - - call math_methods_llp_interp(interp_p,dstp,dstvar) - - ! Define local variables - - hsa%t(i) = dstvar - goto 1000 - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. (hsa%t(i) .eq. spval) - ! .and. ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) - ! .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Define local variables - -1000 continue - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(interp_p) - - ! Define local variables - - interp_p%nz = count((hsa%p .le. hsa%pmax) .and. (hsa%p .ge. & - & hsa%pmin) .and. (hsa%t .ne. spval) .and. ((hsa%tail .eq. & - & 'MANL') .or. (hsa%tail .eq. 'SIGL'))) - - end do ! do while((interp_p%nz .lt. nz) .and. (interp_p%nz - ! .gt. 1)) - - ! Define local variables - - j = 0 - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) .and. & - & ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) & - & then - - ! Define local variables - - j = j + 1 - meteo%t(j) = dble(hsa%t(i) + 273.15) - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. ((hsa%tail(i) .eq. 'MANL') - ! .or. (hsa%tail(i) .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Define local variables - - where(hsa%t .eq. spval) hsa%t = -99.0 - where(hsa%u .le. -90.0) hsa%u = spval - interp_p%nz = count((hsa%p .le. hsa%pmax) .and. (hsa%p .ge. & - & hsa%pmin) .and. (hsa%u .ne. spval) .and. ((hsa%tail .eq. & - & 'MANL' .or. hsa%tail .eq. 'SIGL'))) - - ! Loop through local variable - - do while((interp_p%nz .lt. nz) .and. (interp_p%nz .gt. 1)) - - ! Define local variables - - call variable_interface_setup_struct(interp_p) - j = 0 - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) & - & .and. (hsa%u(i) .ne. spval) .and. ((hsa%tail(i) .eq. & - & 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) then - - ! Define local variables - - j = j + 1 - interp_p%p(j) = hsa%p(i) - interp_p%var(j) = hsa%u(i) - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. (hsa%u(i) .ne. spval) - ! .and. ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) - ! .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) & - & .and. (hsa%u(i) .eq. spval) .and. ((hsa%tail(i) .eq. & - & 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) then - - ! Define local variables - - dstp = hsa%p(i) - - ! Compute local variables - - call math_methods_llp_interp(interp_p,dstp,dstvar) - - ! Define local variables - - hsa%u(i) = dstvar - goto 1001 - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. (hsa%u(i) .eq. spval) - ! .and. ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) - ! .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Define local variables - -1001 continue - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(interp_p) - - ! Define local variables - - interp_p%nz = count((hsa%p .le. hsa%pmax) .and. (hsa%p .ge. & - & hsa%pmin) .and. (hsa%u .ne. spval) .and. ((hsa%tail .eq. & - & 'MANL') .or. (hsa%tail .eq. 'SIGL'))) - - end do ! do while((interp_p%nz .lt. nz) .and. (interp_p%nz - ! .gt. 1)) - - ! Define local variables - - j = 0 - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) .and. & - & ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) & - & then - - ! Define local variables - - j = j + 1 - meteo%u(j) = dble(hsa%u(i)) - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. ((hsa%tail(i) .eq. 'MANL') - ! .or. (hsa%tail(i) .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Define local variables - - where(hsa%u .eq. spval) hsa%u = -99.0 - where(hsa%v .le. -90.0) hsa%v = spval - interp_p%nz = count((hsa%p .le. hsa%pmax) .and. (hsa%p .ge. & - & hsa%pmin) .and. (hsa%v .ne. spval) .and. ((hsa%tail .eq. & - & 'MANL') .or. (hsa%tail .eq. 'SIGL'))) - - ! Loop through local variable - - do while((interp_p%nz .lt. nz) .and. (interp_p%nz .gt. 1)) - - ! Define local variables - - call variable_interface_setup_struct(interp_p) - j = 0 - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) & - & .and. (hsa%v(i) .ne. spval) .and. ((hsa%tail(i) .eq. & - & 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) then - - ! Define local variables - - j = j + 1 - interp_p%p(j) = hsa%p(i) - interp_p%var(j) = hsa%v(i) - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. (hsa%v(i) .ne. spval) - ! .and. ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) - ! .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) & - & .and. (hsa%v(i) .eq. spval) .and. ((hsa%tail(i) .eq. & - & 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) then - - ! Define local variables - - dstp = hsa%p(i) - - ! Compute local variables - - call math_methods_llp_interp(interp_p,dstp,dstvar) - - ! Define local variables - - hsa%v(i) = dstvar - goto 1002 - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. (hsa%v(i) .eq. spval) - ! .and. ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) - ! .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Define local variables - -1002 continue - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(interp_p) - - ! Define local variables - - interp_p%nz = count((hsa%p .le. hsa%pmax) .and. (hsa%p .ge. & - & hsa%pmin) .and. (hsa%v .ne. spval) .and. ((hsa%tail .eq. & - & 'MANL' .or. hsa%tail .eq. 'SIGL'))) - - end do ! do while((interp_p%nz .lt. nz) .and. (interp_p%nz - ! .gt. 1)) - - ! Define local variables - - j = 0 - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) .and. & - & ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) & - & then - - ! Define local variables - - j = j + 1 - meteo%v(j) = dble(hsa%v(i)) - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. ((hsa%tail(i) .eq. 'MANL') - ! .or. (hsa%tail(i) .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Define local variables - - where(hsa%v .eq. spval) hsa%v = -99.0 - where(hsa%z .le. -90.0) hsa%z = spval - interp_p%nz = count((hsa%p .le. hsa%pmax) .and. (hsa%p .ge. hsa%pmin) & - & .and. (hsa%z .ne. spval) .and. ((hsa%tail .eq. 'MANL') .or. & - & (hsa%tail .eq. 'SIGL'))) - - ! Loop through local variable - - do while((interp_p%nz .lt. nz) .and. (interp_p%nz .gt. 1)) - - ! Define local variables - - call variable_interface_setup_struct(interp_p) - j = 0 - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) & - & .and. (hsa%z(i) .ne. spval) .and. ((hsa%tail(i) .eq. & - & 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) then - - ! Define local variables - - j = j + 1 - interp_p%p(j) = hsa%p(i) - interp_p%var(j) = hsa%z(i) - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. (hsa%z(i) .ne. spval) - ! .and. ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) - ! .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Define local variables - - j = 0 - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) & - & .and. (hsa%z(i) .eq. spval) .and. ((hsa%tail(i) .eq. & - & 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) then - - ! Define local variables - - dstp = hsa%p(i) - - ! Compute local variables - - call math_methods_llp_interp(interp_p,dstp,dstvar) - - ! Define local variables - - hsa%z(i) = dstvar - goto 1003 - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. (hsa%z(i) .eq. spval) - ! .and. ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) - ! .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Define local variables - -1003 continue - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(interp_p) - - ! Define local variables - - interp_p%nz = count((hsa%p .le. hsa%pmax) .and. (hsa%p .ge. & - & hsa%pmin) .and. (hsa%z .ne. spval) .and. ((hsa%tail .eq. & - & 'MANL') .or. (hsa%tail .eq. 'SIGL'))) - - end do ! do while((interp_p%nz .lt. nz) .and. (interp_p%nz - ! .gt. 1)) - - ! Define local variables - - j = 0 - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) .and. & - & ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) & - & then - - ! Define local variables - - j = j + 1 - meteo%z(j) = dble(hsa%z(i)) - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. ((hsa%tail(i) .eq. 'MANL') - ! .or. (hsa%tail(i) .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Define local variables - - where(hsa%z .eq. spval) hsa%z = -99.0 - where(hsa%rh .le. -90.0) hsa%rh = spval - - ! Define local variables - - interp_p%nz = count((hsa%p .le. hsa%pmax) .and. (hsa%p .ge. & - & hsa%pmin) .and. (hsa%rh .ne. spval) .and. ((hsa%tail .eq. & - & 'MANL') .or. (hsa%tail .eq. 'SIGL'))) - - ! Loop through local variable - - do while((interp_p%nz .lt. nz) .and. (interp_p%nz .gt. 1)) - - ! Define local variables - - call variable_interface_setup_struct(interp_p) - j = 0 - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) & - & .and. (hsa%rh(i) .ne. spval) .and. ((hsa%tail(i) .eq. & - & 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) then - - ! Define local variables - - j = j + 1 - interp_p%p(j) = hsa%p(i) - interp_p%var(j) = hsa%rh(i) - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. (hsa%rh(i) .ne. spval) - ! .and. ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) - ! .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Define local variables - - j = 0 - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) & - & .and. (hsa%rh(i) .eq. spval) .and. ((hsa%tail(i) .eq. & - & 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) then - - ! Define local variables - - dstp = hsa%p(i) - - ! Compute local variables - - call math_methods_llp_interp(interp_p,dstp,dstvar) - - ! Define local variables - - hsa%rh(i) = dstvar - goto 1004 - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. (hsa%rh(i) .eq. spval) - ! .and. ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) - ! .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Define local variables - -1004 continue - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(interp_p) - - ! Define local variables - - interp_p%nz = count((hsa%p .le. hsa%pmax) .and. (hsa%p .ge. & - & hsa%pmin) .and. (hsa%rh .ne. spval) .and. ((hsa%tail .eq. & - & 'MANL') .or. (hsa%tail .eq. 'SIGL'))) - - end do ! do while((interp_p%nz .lt. nz) .and. (interp_p%nz - ! .gt. 1)) - - ! Define local variables - - j = 0 - - ! Loop through local variables - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) .ge. hsa%pmin) .and. & - & ((hsa%tail(i) .eq. 'MANL') .or. (hsa%tail(i) .eq. 'SIGL'))) & - & then - - ! Define local variables - - j = j + 1 - meteo%rh(j) = dble(hsa%rh(i)) - - end if ! if((hsa%p(i) .le. hsa%pmax) .and. (hsa%p(i) - ! .ge. hsa%pmin) .and. ((hsa%tail(i) .eq. 'MANL') - ! .or. (hsa%tail(i) .eq. 'SIGL'))) - - end do ! do i = 1, hsa%nz - - ! Define local variables - - where(hsa%rh .eq. spval) hsa%rh = -99.0 - - !===================================================================== - - end subroutine interp_sonde - - !======================================================================= - - ! SUBROUTINE: - - ! plevs_sonde.f90 - - ! DESCRIPTION: - - ! This subroutine defines the pressure levels bounded by the sonde - ! observations. - - ! INPUT VARIABLES: - - ! * hsa; a FORTRAN hsa_struct variable containing (at minimum) the - ! level attribute ('tail') and the pressure levels ('p' - ! attribute). - - ! OUTPUT VARIABLES: - - ! * hsa; a FORTRAN hsa_struct variable containing the lowest - ! atmospheric pressure level for the sonde observation (pmax), the - ! highest atmospheric pressure level for the sonde observation - ! (pmin), and the number of valid levels (nmnlevs). - - !----------------------------------------------------------------------- - - subroutine plevs_sonde(hsa) - - ! Define variables passed to routine - - type(hsa_struct) :: hsa - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Define local variables - - hsa%nmnlevs = 0 - hsa%pmax = -spval - hsa%pmin = spval - - ! Loop through local variable - - do i = 1, hsa%nz - - ! Check local variable and proceed accordingly - - if((hsa%tail(i) .eq. 'MANL' .or. hsa%tail(i) .eq. 'SIGL') .and. & - & hsa%p(i) .lt. 1070.0) then - - ! Define local variables - - hsa%nmnlevs = hsa%nmnlevs + 1 - hsa%pmax = max(hsa%p(i),hsa%pmax) - hsa%pmin = min(hsa%p(i),hsa%pmin) - - end if ! if(hsa%tail(i) .eq. 'MANL' .or. hsa%tail(i) - ! .eq. 'SIGL') - - end do ! do i = 1, hsa%nz - - !===================================================================== - - end subroutine plevs_sonde - - !======================================================================= - - ! SUBROUTINE: - - ! sonde_bufr.f90 - - ! DESCRIPTION: - - ! This subroutine constucts an external Binary Universal Formatted - ! (BUFR) file containing each available observations within the - ! FORTRAN hsa_struct variable array. - - ! INPUT VARIABLES: - - ! * hsa; an array of FORTRAN hsa_struct variables. - - !----------------------------------------------------------------------- - - subroutine sonde_bufr(hsa) - - ! Define variables passed to routine - - type(hsa_struct) :: hsa(:) - - ! Define variables computed within routine - - type(bufr_struct) :: bufr - type(bufr_info_struct) :: bufr_info - type(meteo_struct) :: meteo - character(len=500) :: filename - character(len=500) :: lbufr_filepath - character(len=8) :: cacobid - character(len=6) :: acid - character(len=8) :: cdate - character(len=6) :: ctime - character(len=6) :: obsn - character(len=2) :: msnid - real(r_double) :: anljday - real(r_double) :: obsjday - real(r_double) :: racobid - integer :: dd - integer :: hh - integer :: mm - integer :: nn - integer :: ss - integer :: strstrt - integer :: strstop - integer :: yyyy - - ! Define counting variables - - integer :: i, j - - !===================================================================== - - ! Define local variables - - equivalence(racobid,cacobid) - call time_methods_date_attributes(analdate,yyyy,mm,dd,hh,nn,ss) - call time_methods_julian_day(yyyy,mm,dd,hh,nn,ss,anljday) - bufr_info%filename = bufr_info_filepath - call fileio_interface_read(bufr_info) - bufr%hdstr = 'SID XOB YOB DHR TYP' - bufr%obstr = 'POB QOB TOB UOB VOB ZOB' - bufr%qcstr = 'PQM QQM TQM WQM ZQM' - bufr%oestr = 'POE QOE TOE WOE ZOE' - bufr%subset = trim(adjustl(bufr_info%subset)) - bufr%mxmn = 6 - bufr%mxlv = 1 - lbufr_filepath = trim(adjustl(bufr_filepath)) - call bufrio_interface_idate(analdate,bufr) - call bufrio_interface_open(lbufr_filepath,bufr_tblpath,bufr,.false., & - & .false.,.true.) - - ! Loop through local variable - - do i = 1, size(hsa) - - ! Define local variables - - strstrt = index(trim(adjustl(hsa(i)%filename)),'/',back=.true.) & - & + 1 - strstop = len(trim(adjustl(hsa(i)%filename))) - filename = trim(adjustl(hsa(i)%filename(strstrt:strstop))) - msnid = filename(1:2) - acid = filename(1:6) - obsn = filename(7:8) - - ! Check local variable and proceed accordingly - - if(trim(adjustl(msnid)) .eq. 'AF') then - - ! Define local variables - - write(cacobid,500) trim(adjustl(acid(3:5))), trim(adjustl(obsn)) - - end if ! if(trim(adjustl(msnid)) .eq. 'AF') - - ! Check local variable and proceed accordingly - - if(trim(adjustl(msnid)) .eq. 'NA') then - - ! Define local variables - - write(cacobid,501) trim(adjustl(obsn)) - - end if ! if(trim(adjustl(msnid)) .eq. 'NA') - - ! Check local variable and proceed accordingly - - if(trim(adjustl(msnid)) .eq. 'NO') then - - ! Define local variables - - write(cacobid,502) trim(adjustl(acid(5:5))), trim(adjustl(obsn)) - - end if ! if(trim(adjustl(msnid)) .eq. 'NO') - - ! Loop through local variable - - do j = 1, hsa(i)%nz - - ! Check local variable and proceed accordingly - - if((hsa(i)%yymmdd(j) .ne. hsa_spval) .and. ((hsa(i)%tail(j) .eq. & - & 'SIGL') .or. (hsa(i)%tail(j) .eq. 'MANL'))) then - - ! Define local variables - - call variable_interface_setup_struct(bufr) - write(cdate,'(i8)') (20000000 + & - & (int(hsa(i)%yymmdd(j)))) - write(ctime,'(i4.4,i2.2)') hsa(i)%gmt(j), 0 - write(bufr%cdate,503) cdate(1:4), cdate(5:6), cdate(7:8), & - & ctime(1:2), ctime(3:4), ctime(5:6) - call time_methods_date_attributes(bufr%cdate,yyyy,mm,dd,hh, & - & nn,ss) - - ! Compute local variables - - call time_methods_julian_day(yyyy,mm,dd,hh,nn,ss,obsjday) - - ! Define local variables - - bufr%hdr(1) = dble(racobid) - bufr%hdr(2) = dble(-1.0*hsa(i)%lon(j) + 360.0) - bufr%hdr(3) = dble(hsa(i)%lat(j)) - bufr%hdr(4) = (obsjday - anljday)*dble(24.0) - bufr%hdr(5) = bufr_info%obs_type_mass - meteo%nz = 1 - call variable_interface_setup_struct(meteo) - - ! Check local variable and proceed accordingly - - if(hsa(i)%t(j) .ne. hsa_spval) then - - ! Define local variables - - bufr%obs(1,1) = hsa(i)%p(j) - bufr%obs(3,1) = hsa(i)%t(j) - bufr%obs(6,1) = hsa(i)%z(j) - bufr%qcf(1,1) = 2.0 - bufr%qcf(3,1) = 2.0 - bufr%qcf(6,1) = 2.0 - - ! Check local variable and proceed accordingly - - if(hsa(i)%rh(j) .ne. hsa_spval) then - - ! Define local variables - - meteo%p(1) = dble(hsa(i)%p(j)*100.0) - meteo%rh(1) = dble(hsa(i)%rh(j)) - meteo%t(1) = dble(hsa(i)%t(j) + 273.15) - - ! Compute local variables - - call meteo_methods_spechumd(meteo) - - ! Define local variables - - bufr%obs(2,1) = real(meteo%q(1))*1000.0*1000.0 - bufr%qcf(2,1) = 2.0 - - end if ! if(hsa(i)%rh(j) .ne. hsa_spval) - - ! Define local variables - - call bufrio_interface_write(bufr) - - end if ! if(hsa(i)%t(j) .ne. hsa_spval) - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(bufr) - call variable_interface_cleanup_struct(meteo) - - ! Define local variables - - call variable_interface_setup_struct(bufr) - bufr%hdr(1) = dble(racobid) - bufr%hdr(2) = dble(-1.0*hsa(i)%lon(j) + 360.0) - bufr%hdr(3) = dble(hsa(i)%lat(j)) - bufr%hdr(4) = (obsjday - anljday)*dble(24.0) - bufr%hdr(5) = bufr_info%obs_type_wind - - ! Check local variable and proceed accordingly - - if(hsa(i)%u(j) .ne. hsa_spval .and. hsa(i)%v(j) .ne. & - & hsa_spval) then - - ! Define local variables - - bufr%obs(1,1) = hsa(i)%p(j) - bufr%obs(4,1) = hsa(i)%u(j) - bufr%obs(5,1) = hsa(i)%v(j) - bufr%obs(6,1) = hsa(i)%z(j) - bufr%qcf(1,1) = 2.0 - bufr%qcf(4,1) = 2.0 - bufr%qcf(6,1) = 2.0 - call bufrio_interface_write(bufr) - - end if ! if(hsa(i)%u(j) .ne. hsa_spval .and. hsa(i)%v(j) - ! .ne. hsa_spval) - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(bufr) - - end if ! if((hsa(i)%yymmdd(j) .ne. hsa_spval) - ! .and. ((hsa(i)%tail(j) .eq. 'SIGL') - ! .or. (hsa(i)%tail(j) .eq. 'MANL'))) - - end do ! do j = 1, hsa(i)%nz - - end do ! do i = 1, size(hsa) - - ! Define local variables - - call bufrio_interface_close(.false.,.true.) -500 format(a3,a2,'A') -501 format('872',a2,'A') -502 format('AA',a1,a2,'A') -503 format(a4,'-',a2,'-',a2,'_',a2,':',a2,':',a2) - - !===================================================================== - - end subroutine sonde_bufr - - !======================================================================= - - ! SUBROUTINE: - - ! sonde_drift.f90 - - ! DESCRIPTION: - - ! This subroutine estimates the horizontal displacement of the sonde - ! as a function of the theoretical fall rate and the wind profile; - ! vertical interpolation along a linear-log pressure coordinate is - ! performed to estimate the theoretical fall rate and the zonal- and - ! meridional-displacement via the zonal- and meridional-wind vector - ! components, respectively; an external file containing the HSA - ! formatted data record with the new timestamps and geographical - ! coordinates is written to: - - ! /__.hsa.drft - - ! REFERENCES: - - ! Hock, T. F., and J. L. Franklin, 1999: The NCAR GPS - ! Dropwindsonde. Bull. Amer. Meteor. Soc., 80, 407–420. - - ! INPUT VARIABLES: - - ! * filename; a FORTRAN character string specifying the path to the - ! external file containing the HSA formatted decoded TEMPDROP - ! message; the output file generated by this routine appends the - ! string '.drft' to this filename. - - ! * meteo; a FORTRAN meteo_struct variable containing the aircraft - ! identifier (acid), the observation number (obnum), and the - ! full-path to the TEMPDROP file (tempdrop_name); the arrays - ! within this struct are populated within this routine. - - !----------------------------------------------------------------------- - - subroutine sonde_drift(sonde,hsa,meteo) - - ! Define variables passed to routine - - type(hsa_struct) :: hsa - type(meteo_struct) :: meteo - type(sonde_struct) :: sonde - - ! Define variables computed within routine - - type(hsa_struct) :: hsa_interp - character(len=500) :: error_filename - character(len=500) :: skewt_filename - - ! Define counting variables - - integer :: i - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(hsa%nz .le. 0) goto 1000 - - ! Define local variables - - call plevs_sonde(hsa) - - ! Check local variable and proceed accordingly - - if(hsa%nmnlevs .le. 1) goto 1000 - - ! Compute local variables - - call timeinfo_sonde(hsa) - - ! Define local variables - - hsa_interp%nz = hsa%nz - call variable_interface_setup_struct(hsa_interp) - hsa_interp = hsa - - ! Compute local variables - - call interp_sonde(hsa_interp,meteo) - call compute_meteo(meteo) - call compute_drift(hsa,hsa_interp,meteo) - - ! Define local variables - - error_filename = trim(adjustl(hsa%filename))//'.error' - skewt_filename = trim(adjustl(hsa%filename))//'.nc' - call fileio_interface_write(error_filename,hsa,meteo) - hsa%filename = trim(adjustl(hsa%filename))//'.drft' - call fileio_interface_write(hsa) - - ! Check local variable and proceed accordingly - - if(tempdrop_write_nc_skewt) then - - ! Define local variables - - call fileio_interface_write(sonde,meteo,skewt_filename) - - end if ! if(tempdrop_write_nc_skewt) - - ! Define local variables - -1000 continue - - ! Deallocate memory for local variables - - call variable_interface_cleanup_struct(hsa_interp) - - !===================================================================== - - end subroutine sonde_drift - - !======================================================================= - - ! SUBROUTINE: - - ! tempdrop_to_hsa.f90 - - ! DESCRIPTION: - - ! This subroutine decodes the TEMP-DROP formatted message to the - ! AOML HRD HSA format and writes the results to an external - ! formatted file. - - ! INPUT VARIABLES: - - ! * infile; a FORTRAN character string specifying the path to the - ! external file containing the TEMPDROP messages. - - ! * hsa; a FORTRAN hsa_struct variable. - - ! * meteo; a FORTRAN meteo_struct variable. - - ! OUTPUT VARIABLES: - - ! * hsa; a FORTRAN hsa_struct variable containing the decoded - ! TEMP-DROP attributes for the release and splash times, the - ! timestamp attributes, and the filename to which the decoded - ! TEMP-DROP message is written; the output filename is as follows: - - ! /__.hsa - - ! * meteo; a FORTRAN meteo_struct variable containing the aircraft - ! identifier (acid), the observation number (obnum), and the - ! full-path to the TEMPDROP file (tempdrop_name). - - !----------------------------------------------------------------------- - - subroutine tempdrop_to_hsa(infile,hsa,meteo) - - ! Define variables passed to routine - - type(hsa_struct) :: hsa - type(meteo_struct) :: meteo - character(len=500) :: infile - - ! Define variables computed within routine - - character(len=3), dimension(12) :: month_data - character(len=70) :: line - character(len=5) :: acid - character(len=3) :: month - character(len=2) :: obnum - logical :: exist - logical :: exist_chk - integer :: lupa - integer :: iac - integer :: iwx - integer :: iflag - integer :: iyrs - integer :: imns - integer :: idys - integer :: ihrs - integer :: inns - integer :: strstrt - integer :: strstop - - ! Define counting variables - - integer :: i, j - - !===================================================================== - - ! Define local variables - - hsa%spgtime = -999 - data month_data/'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug', & - & 'Sep','Oct','Nov','Dec'/ - iyrs = 0 - imns = 0 - idys = 0 - iwx = 1 - iflag = 1 - lupa = 150 - open(12,file=trim(adjustl(infile)),status='old') -20 read(12,'(a)',end=1000) line - - ! Check local variable and proceed accordingly - - if(line(1:5) .eq. 'Sonde') then - - ! Define local variables - - read(line(30:31),'(i2)') idys - read(line(33:35),'(a3)') month - read(line(37:38),'(i2)') iyrs - hsa%yyyy = 1900 + iyrs - - ! Loop through local variable - - do i = 1, size(month_data) - - ! Check local variable and proceed accordingly - - if(month_data(i) .eq. month) then - - ! Define local variables - - imns = i - - end if ! if(month_data(i) .eq. month) - - end do ! do i = 1, size(month_data) - - end if ! if(line(1:5) .eq. 'Sonde') - - ! Check local variable and proceed accordingly - - if(line(1:5) .eq. '61616') then - - ! Define local variables - - read(line(7:11),'(a)') acid - strstrt = index(line,'OB') - strstop = strstrt + 5 - read(line(strstop-2:strstop),'(a2)') obnum - - ! Check local variable and proceed accordingly - - if(trim(adjustl(obnum)) .eq. '') obnum = '00' - - ! Check local variable and proceed accordingly - - if(acid(1:1) .eq. 'A') then - - ! Define local variables - - iac = 30 - - else if(acid(5:5) .eq. 'F') then - - ! Define local variables - - iac = 8 - - else ! if(acid(1:1) .eq. 'A') - - ! Define local variables - - read(line(11:11),'(i1)') iac - iac = iac + 40 - - end if ! if(acid(1:1) .eq. 'A') - - end if ! if(line(1:5) .eq. '61616') - - ! Check local variable and proceed accordingly - - if(idys .eq. 0 .or. imns .eq. 0 .or. iyrs .eq. 0) then - - ! Define local variables - - strstrt = index(infile,'/',back=.true.) + 1 - strstop = strstrt + 3 - read(infile(strstrt:strstop),'(i4)') hsa%yyyy - strstrt = index(infile,'/',back=.true.) + 3 - strstop = strstrt + 1 - read(infile(strstrt:strstop),'(i2)') iyrs - strstrt = strstop + 1 - strstop = strstrt + 1 - read(infile(strstrt:strstop),'(i2)') imns - strstrt = strstop + 1 - strstop = strstrt + 1 - read(infile(strstrt:strstop),'(i2)') idys - strstrt = strstop + 1 - strstop = strstrt + 1 - read(infile(strstrt:strstop),'(i2)') ihrs - strstrt = strstop + 1 - strstop = strstrt + 1 - read(infile(strstrt:strstop),'(i2)') inns - - end if ! if(idys .eq. 0 .or. imns .eq. 0 .or. iyrs .eq. 0) - - ! Define local variables - - hsa%mm = imns - hsa%dd = idys - hsa%hh = ihrs - hsa%nn = inns - hsa%ss = 0 - goto 20 -1000 continue - close(12) - meteo%acid = acid - meteo%obnum = obnum - meteo%tempdrop_name = infile - write(hsa%filename,500) trim(adjustl(datapath)), acid, obnum, iyrs, & - & imns,idys - inquire(file=trim(adjustl(hsa%filename)),exist=exist) - - ! Check local variable and proceed accordingly - - if(exist) then - - ! Loop through local variable - - do i = 1, 1000 - - ! Define local variables - - write(hsa%filename,501) trim(adjustl(datapath)), acid, obnum, & - & iyrs, imns, idys, i - inquire(file=trim(adjustl(hsa%filename)),exist=exist_chk) - if(.not. exist_chk) goto 1001 - - end do ! do i = 1, 1000 - - end if ! if(exist) - - ! Define local variables - -1001 continue - open(99,file=trim(adjustl(hsa%filename)),form='formatted') - open(12,file=trim(adjustl(infile)),status='old') -21 read(12,'(a)',end=1002) line - - ! Check local variable and proceed accordingly - - if(index(line,'REL') .ne. 0) then - - ! Check local variable and proceed accordingly - - if((len(trim(adjustl(line))) - index(line,'REL')) .lt. 21) & - & return - - ! Define local variables - - call spginfo(line,hsa%reltime,hsa%rellat,hsa%rellon,'REL') - - endif ! if(index(line,'REL') .ne. 0) - - ! Check local variable and proceed accordingly - - if(index(line,'SPG') .ne. 0) then - - ! Check local variable and proceed accordingly - - if((len(trim(adjustl(line))) - index(line,'SPG')) .lt. 21) & - & return - - ! Define local variables - - call spginfo(line,hsa%spgtime,hsa%spglat,hsa%spglon,'SPG') - - endif ! if(index(line,'SPG') .ne. 0) - - ! Check local variable and proceed accordingly - - if(index(line,'SPL') .ne. 0) then - - ! Check local variable and proceed accordingly - - if((len(trim(adjustl(line))) - index(line,'SPL')) .lt. 21) & - & return - - ! Define local variables - - call spginfo(line,hsa%spgtime,hsa%spglat,hsa%spglon,'SPL') - - end if ! if(index(line,'SPL') .ne. 0) - - ! Check local variable and proceed accordingly - - if((index(line,'XX') .ne. 0)) then - - ! Compute local variables - - call drop(99,iwx,iflag,iyrs,imns,idys,line,hsa%psfc,meteo%acid, & - & meteo%obnum) - - end if ! if(index(line,'XX') .ne. 0) - - ! Define local variables - - goto 21 -1002 continue - close(12) - close(99) - call fileio_interface_read(hsa) -500 format(a,a5,'_'a2,'_',3(i2.2),'.hsa') -501 format(a,a5,'_'a2,'_',3(i2.2),'_'(i2.2),'.hsa') - - !===================================================================== - - end subroutine tempdrop_to_hsa - - !======================================================================= - - ! SUBROUTINE: - - ! timeinfo_sonde.f90 - - ! DESCRIPTION: - - ! This subroutine computes the Julian date for the sonde release and - ! returns the FORTRAN hsa_struct variable time attributes. - - ! INPUT VARIABLES: - - ! * hsa; a FORTRAN hsa_struct variable containing (at minimum) the - ! sonde release time (specified in the 'reltime' attribute) and - ! the year, month, and day of month timestamp (specified in the - ! 'yymmdd' attribute). - - ! OUTPUT VARIABLES: - - ! * hsa; a FORTRAN hsa_struct variable where the timestamp - ! attributes for year, month, and day of month ('yyyy', 'mm', and - ! 'dd' attributes, respectively) have been defined and the Julian - ! date timestamp for the sonde release (rel_julian) has been - ! computed. - - !----------------------------------------------------------------------- - - subroutine timeinfo_sonde(hsa) - - ! Define variables passed to routine - - type(hsa_struct) :: hsa - - ! Define variables computed within routine - - character(len=8) :: yymmdd - real(r_double) :: hsa_julian - real(r_double) :: julian_day - integer :: dd - integer :: dd_hsa - integer :: dd_rel - integer :: hh_hsa - integer :: hh_rel - integer :: mm - integer :: mm_hsa - integer :: mm_rel - integer :: nn_hsa - integer :: nn_rel - integer :: seconds - integer :: ss_hsa - integer :: ss_rel - integer :: yyyy - integer :: yyyy_hsa - integer :: yyyy_rel - - !===================================================================== - - ! Define local variables - - seconds = int((hsa%hh*3600.0) + (hsa%nn*60.0) + hsa%ss) - - ! Compute local variables - - call time_methods_julian_day(hsa%yyyy,hsa%mm,hsa%dd,0,0,0,hsa_julian) - - ! Define local variables - - hsa_julian = hsa_julian + real(seconds)/86400.0 - write(yymmdd,'(i6)') int(hsa%yymmdd(hsa%nz)) - read(yymmdd(1:2),'(i2)') yyyy - read(yymmdd(3:4),'(i2)') mm - read(yymmdd(5:6),'(i2)') dd - hsa%yyyy = 2000 + yyyy - hsa%mm = mm - hsa%dd = dd - hsa%logtime = hsa%gmt(1)*100 - - ! Compute local variables - - call time_methods_julian_day(hsa%yyyy,hsa%mm,hsa%dd,0,0,0,julian_day) - call time_methods_hmsts(hsa%reltime,hsa%rel_hmsts) - - ! Define local variables - - hsa%rel_julian = julian_day + real(hsa%rel_hmsts)/86400.0 - - ! Compute local variables - - call time_methods_gregorian_date(hsa_julian,yyyy_hsa,mm_hsa,dd_hsa, & - & hh_hsa,nn_hsa,ss_hsa) - call time_methods_gregorian_date(hsa%rel_julian,yyyy_rel,mm_rel, & - & dd_rel,hh_rel,nn_rel,ss_rel) - - ! Check local variable and proceed accordingly - - if((dd_rel .eq. dd_hsa) .and. (hh_rel .gt. hh_hsa)) then - - ! Define local variables - - hsa%rel_julian = hsa%rel_julian - 1.0 - - end if ! if((dd_rel .eq. dd_hsa) .and. (hh_rel .gt. hh_hsa)) - - !===================================================================== - - end subroutine timeinfo_sonde - - !======================================================================= - -end module sonde_tempdrop_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/time_methods_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/time_methods_interface.F90 deleted file mode 100644 index 9f1fe3268..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/time_methods_interface.F90 +++ /dev/null @@ -1,451 +0,0 @@ -module time_methods_interface - - !======================================================================= - - !$$$ PROGRAM DOCUMENTATION BLOCK - - ! obs-preproc :: time_methods_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - ! Review the README, within the top-level directory, which provides - ! relevant instructions and (any) references cited by algorithms - ! within this software suite. - - !======================================================================= - - ! Define associated modules and subroutines - - use kinds_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: time_methods_date_attributes - public :: time_methods_gregorian_date - public :: time_methods_hmsts - public :: time_methods_julian_day - public :: time_methods_sthms - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! time_methods_date_attributes.f90 - - ! DESCRIPTION: - - ! This subroutine returns the integer attributes from the user - ! specified integer defining the date to be parsed. - - ! INPUT VARIABLES: - - ! * dateint; a FORTRAN integer defining the date to be parsed. - - ! * yyyy; a FORTRAN integer value to specify the year for the parsed - ! date. - - ! * mm; a FORTRAN integer value to specify the month for the parsed - ! date. - - ! * dd; a FORTRAN integer value to specify the day for the parsed - ! date. - - ! * hh; a FORTRAN integer value to specify the hour of day for the - ! parsed date. - - ! * nn; a FORTRAN integer value to specify the minute of hour for - ! the parsed date. - - ! * ss; a FORTRAN integer value to specify the second of minute for - ! the parsed date. - - - ! OUTPUT VARIABLES: - - ! * yyyy; a FORTRAN integer value specifying the year for the parsed - ! date. - - ! * mm; a FORTRAN integer value specifying the month for the parsed - ! date. - - ! * dd; a FORTRAN integer value specifying the day for the parsed - ! date. - - ! * hh; a FORTRAN integer value specifying the hour of day for the - ! parsed date. - - ! * nn; a FORTRAN integer value specifying the minute of hour for - ! the parsed date. - - ! * ss; a FORTRAN integer value specifying the second of minute for - ! the parsed date. - - !----------------------------------------------------------------------- - - subroutine time_methods_date_attributes(datestr,yyyy,mm,dd,hh,nn,ss) - - ! Define variables passed to routine - - character(len=19) :: datestr - integer :: yyyy - integer :: mm - integer :: dd - integer :: hh - integer :: nn - integer :: ss - - !===================================================================== - - ! Define local variables - - read(datestr(1:4), '(i4.4)') yyyy - read(datestr(6:7), '(i2.2)') mm - read(datestr(9:10), '(i2.2)') dd - read(datestr(12:13),'(i2.2)') hh - read(datestr(15:16),'(i2.2)') nn - read(datestr(18:19),'(i2.2)') ss - - !===================================================================== - - end subroutine time_methods_date_attributes - - !======================================================================= - - ! SUBROUTINE: - - ! time_methods_gregorian_date.f90 - - ! DESCRIPTION: - - ! This subroutine determines the Gregorian calendar attributes from - ! the Julian date. - - ! REFERENCES: - - ! http://aa.usno.navy.mil/faq/docs/JD_Formula.php - - ! INPUT VARIABLES: - - ! * julian_day; a FORTRAN 8-byte real value specifying the Julian - ! day. - - ! * yyyy; a FORTRAN integer value to define the Gregorian calendar - ! year. - - ! * mm; a FORTRAN integer value to define the Gregorian calendar - ! month of year. - - ! * dd; a FORTRAN integer value to define the Gregorian calendar - ! day of month. - - ! * hh; a FORTRAN integer value to define the Gregorian calendar - ! hour of day. - - ! * nn; a FORTRAN integer value to define the Gregorian calendar - ! minute of hour. - - ! * ss; a FORTRAN integer value to define the Gregorian calendar - ! second of minute. - - ! OUTPUT VARIABLES: - - ! * yyyy; a FORTRAN integer value specifying the Gregorian calendar - ! year. - - ! * mm; a FORTRAN integer value specifying the Gregorian calendar - ! month of year. - - ! * dd; a FORTRAN integer value specifying the Gregorian calendar - ! day of month. - - ! * hh; a FORTRAN integer value specifying the Gregorian calendar - ! hour of day. - - ! * nn; a FORTRAN integer value specifying the Gregorian calendar - ! minute of hour. - - ! * ss; a FORTRAN integer value specifying the Gregorian calendar - ! second of minute. - - !----------------------------------------------------------------------- - - subroutine time_methods_gregorian_date(julian_day,yyyy,mm,dd,hh,nn,ss) - - ! Define variables passed to routine - - real(r_double) :: julian_day - integer :: yyyy - integer :: mm - integer :: dd - integer :: hh - integer :: nn - integer :: ss - - ! Define variables computed within routine - - real(r_double) :: wjulian_day - real(r_double) :: frac_day - integer :: i - integer :: j - integer :: k - integer :: l - integer :: n - - !===================================================================== - - ! Define local variables - - l = julian_day + 68569 - n = 4*l/146097 - l = l - (146097*n + 3)/4 - i = 4000*(l + 1)/1461001 - l = l - 1461*i/4 + 31 - j = 80*l/2447 - k = l - 2447*j/80 - l = j/11 - j = j + 2 - 12*l - i = 100*(n - 49) + i + l - yyyy = i - mm = j - dd = k - - ! Compute local variables - - call time_methods_julian_day(yyyy,mm,dd,0,0,0,wjulian_day) - frac_day = (julian_day - wjulian_day)*86400.0 - - ! Define local variables - - hh = int(frac_day/3600.0) - - ! Compute local variables - - frac_day = frac_day - (hh*3600.0) - - ! Define local variables - - nn = int(frac_day/60.0) - - ! Compute local variables - - ss = int(frac_day - (nn*60.0)) - - !===================================================================== - - end subroutine time_methods_gregorian_date - - !======================================================================= - - ! SUBROUTINE: - - ! time_methods_hmsts.f90 - - ! DESCRIPTION: - - ! This subroutine returns the seconds elapsed for a given day - ! provided the respective hours, minutes, and seconds. - - ! INPUT VARIABLES: - - ! * x; a FORTRAN integer value containing the hours, minutes, and - ! seconds as (assuming UNIX convention) HHMMSS. - - ! * secs; a FORTRAN integer value defining the total number of - ! seconds elapsed for a given day. - - ! OUTPUT VARIABLES: - - ! * secs; a FORTRAN integer value defining the total number of - ! seconds elapsed for a given day. - - !----------------------------------------------------------------------- - - subroutine time_methods_hmsts(x,secs) - - ! Define variables passed to routine - - integer :: x - integer :: secs - - ! Define variables computed within routine - - integer :: ihr - integer :: imin - integer :: isecs - - !===================================================================== - - ! Define local variables - - ihr = x/10000 - imin = mod(x,10000)/100 - isecs = mod(mod(x,10000),100) - - ! Compute local variables - - secs = (ihr*3600) + (imin*60) + isecs - - !===================================================================== - - end subroutine time_methods_hmsts - - !======================================================================= - - ! SUBROUTINE: - - ! time_methods_julian_day.f90 - - ! DESCRIPTION: - - ! This subroutine determines the Julian date corresponding the - ! Gregorian calendar attributes. - - ! REFERENCES: - - ! http://aa.usno.navy.mil/faq/docs/JD_Formula.php - - ! INPUT VARIABLES: - - ! * yyyy; a FORTRAN integer value specifying the Gregorian calendar - ! year. - - ! * mm; a FORTRAN integer value specifying the Gregorian calendar - ! month. - - ! * dd; a FORTRAN integer value specifying the Gregorian calendar - ! day. - - ! * hh; a FORTRAN integer value specifying the Gregorian calendar - ! hour of day. - - ! * nn; a FORTRAN integer value specifying the Gregorian calendar - ! minute of hour. - - ! * ss; a FORTRAN integer value specifying the Gregorian calendar - ! second of minute. - - ! * julian_day; a FORTRAN 8-byte real value to define the Julian - ! date. - - ! OUTPUT VARIABLES: - - ! * julian_day; a FORTRAN 8-byte real value specifying the Julian - ! date. - - !----------------------------------------------------------------------- - - subroutine time_methods_julian_day(yyyy,mm,dd,hh,nn,ss,julian_day) - - ! Define variables passed to routine - - real(r_double) :: julian_day - integer :: yyyy - integer :: mm - integer :: dd - integer :: hh - integer :: nn - integer :: ss - - ! Define variables computed within routine - - real(r_double) :: frac_day - - !===================================================================== - - ! Compute local variables - - julian_day = dble(dd - 32075 + 1461*(yyyy + 4800 + (mm - 14)/12)/4 + & - & 367*(mm - 2 - (mm - 14)/12*12)/12 - 3*((yyyy + 4900 + & - & (mm - 14)/12)/100)/4) - - ! Define local variables - - frac_day = julian_day*86400.0 - frac_day = frac_day + dble(hh*3600.0) - frac_day = frac_day + dble(nn*60.0) - frac_day = frac_day + dble(ss) - julian_day = frac_day/86400.0 - - !===================================================================== - - end subroutine time_methods_julian_day - - !======================================================================= - - ! SUBROUTINE: - - ! time_methods_sthms.f90 - - ! DESCRIPTION: - - ! This subroutine returns the hours, minutes, and seconds with - ! respect to the total seconds specified by the user. - - ! INPUT VARIABLES: - - ! * secs; a FORTRAN integer value defining the total number of - ! seconds elapsed for a given day. - - ! * x; a FORTRAN integer value containing the hours, minutes, and - ! seconds as (assuming UNIX convention) HHMMSS. - - ! OUTPUT VARIABLES: - - ! * x; a FORTRAN integer value containing the hours, minutes, and - ! seconds as (assuming UNIX convention) HHMMSS. - - !----------------------------------------------------------------------- - - subroutine time_methods_sthms(secs,x) - - ! Define variables passed to routine - - integer :: secs - integer :: x - - ! Define variables computed within routine - - integer :: ihr - integer :: imin - integer :: isecs - - !===================================================================== - - ! Define local variables - - ihr = secs/3600 - imin = mod(secs,3600)/60 - isecs = mod(mod(secs,3600),60) - - ! Compute local variables - - x = (ihr*10000) + (imin*100) + isecs - - !===================================================================== - - end subroutine time_methods_sthms - - !======================================================================= - -end module time_methods_interface diff --git a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/variable_interface.F90 b/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/variable_interface.F90 deleted file mode 100644 index 98202712d..000000000 --- a/sorc/hafs_tools.fd/sorc/hafs_obs_preproc/variable_interface.F90 +++ /dev/null @@ -1,1784 +0,0 @@ -module variable_interface - - !======================================================================= - - !$$$ PROGRAM DOCUMENTATION BLOCK - - ! obs-preproc :: variable_interface - ! Copyright (C) 2019 Henry R. Winterbottom - - ! Email: henry.winterbottom@noaa.gov - - ! This program is free software: you can redistribute it and/or - ! modify it under the terms of the GNU General Public License as - ! published by the Free Software Foundation, either version 3 of the - ! License, or (at your option) any later version. - - ! This program is distributed in the hope that it will be useful, - ! but WITHOUT ANY WARRANTY; without even the implied warranty of - ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - ! General Public License for more details. - - ! You should have received a copy of the GNU General Public License - ! along with this program. If not, see - ! . - - ! Review the README, within the top-level directory, which provides - ! relevant instructions and (any) references cited by algorithms - ! within this software suite. - - !======================================================================= - - ! Define associated modules and subroutines - - use kinds_interface - - ! Define interfaces and attributes for module routines - - implicit none - private - public :: bufr_info_struct - public :: bufr_mxlv - public :: bufr_mxmn - public :: bufr_spval - public :: bufr_struct - public :: bufrhdr_struct - public :: fcstmdl_struct - public :: fv3_struct - public :: grid_struct - public :: hsa_spval - public :: hsa_struct - public :: interp_p_struct - public :: interp_spline_struct - public :: kdtree_struct - public :: meteo_struct - public :: sonde_struct - public :: spval - public :: statgrid_struct - public :: tcinfo_struct - public :: tdr_struct - public :: timeinfo_struct - public :: topogrid_struct - public :: variable_interface_cleanup_struct - public :: variable_interface_setup_struct - public :: varinfo_struct - public :: vdm_spval - public :: vdm_struct - interface variable_interface_cleanup_struct - module procedure finalize_bufr_struct - module procedure finalize_bufrhdr_struct - module procedure finalize_fcstmdl_struct - module procedure finalize_fv3_struct - module procedure finalize_grid_struct - module procedure finalize_hsa_struct - module procedure finalize_interp_p_struct - module procedure finalize_interp_spline_struct - module procedure finalize_kdtree_struct - module procedure finalize_meteo_struct - module procedure finalize_sonde_struct - module procedure finalize_statgrid_struct - module procedure finalize_tdr_struct - module procedure finalize_topogrid_struct - module procedure finalize_varinfo_struct - module procedure finalize_vdm_struct - end interface variable_interface_cleanup_struct - interface variable_interface_setup_struct - module procedure initialize_bufr_struct - module procedure initialize_bufrhdr_struct - module procedure initialize_fcstmdl_struct - module procedure initialize_fv3_struct - module procedure initialize_grid_struct - module procedure initialize_hsa_struct - module procedure initialize_interp_p_struct - module procedure initialize_interp_spline_struct - module procedure initialize_kdtree_struct - module procedure initialize_meteo_struct - module procedure initialize_sonde_struct - module procedure initialize_statgrid_struct - module procedure initialize_tdr_struct - module procedure initialize_topogrid_struct - module procedure initialize_varinfo_struct - module procedure initialize_vdm_struct - end interface variable_interface_setup_struct - - ! Define local variables - - real(r_double), parameter :: bufr_spval = 10.e10 - real(r_kind), parameter :: hsa_spval = -99.0 - real(r_kind), parameter :: spval = huge(0.0) - real(r_kind), parameter :: vdm_spval = -9.e30 - integer, parameter :: bufr_mxlv = 200 - integer, parameter :: bufr_mxmn = 35 - type bufr_struct - character(len=80) :: obstr - character(len=80) :: hdstr - character(len=80) :: qcstr - character(len=80) :: oestr - character(len=19) :: cdate - character(len=8) :: subset - real(r_double), dimension(:,:), allocatable :: obs - real(r_double), dimension(:,:), allocatable :: qcf - real(r_double), dimension(:,:), allocatable :: oer - real(r_double), dimension(:), allocatable :: hdr - integer :: idate - integer :: mxmn - integer :: mxlv - integer :: nrecs - end type bufr_struct ! type bufr_struct - type bufr_info_struct - character(len=500) :: filename - character(len=8) :: subset - integer :: obs_type_mass - integer :: obs_type_wind - end type bufr_info_struct ! type bufr_info_struct - type bufrhdr_struct - real(r_double), dimension(:,:), allocatable :: hdr - integer :: mxmn - integer :: nrecs - end type bufrhdr_struct ! type bufrhdr_struct - type fcstmdl_struct - real(r_kind), dimension(:,:), allocatable :: p - real(r_kind), dimension(:,:), allocatable :: q - real(r_kind), dimension(:,:), allocatable :: t - real(r_kind), dimension(:,:), allocatable :: u - real(r_kind), dimension(:,:), allocatable :: v - real(r_kind), dimension(:), allocatable :: lat - real(r_kind), dimension(:), allocatable :: lon - real(r_kind), dimension(:), allocatable :: slmsk - real(r_kind), dimension(:), allocatable :: idx - real(r_kind) :: clat - real(r_kind) :: clon - integer :: nobs - integer :: nz - end type fcstmdl_struct ! type fcstmdl_struct - type fv3_struct - real(r_kind), dimension(:,:,:), allocatable :: u - real(r_kind), dimension(:,:,:), allocatable :: v - real(r_kind), dimension(:,:), allocatable :: p - real(r_kind), dimension(:,:), allocatable :: q - real(r_kind), dimension(:,:), allocatable :: t - real(r_kind), dimension(:,:), allocatable :: ua - real(r_kind), dimension(:,:), allocatable :: va - real(r_kind), dimension(:), allocatable :: lat - real(r_kind), dimension(:), allocatable :: lon - real(r_kind), dimension(:), allocatable :: psfc - real(r_kind), dimension(:), allocatable :: slmsk - integer :: ncoords - integer :: nx - integer :: ny - integer :: nz - end type fv3_struct ! type fv3_struct - type grid_struct - real(r_kind), dimension(:), allocatable :: angle - real(r_kind), dimension(:), allocatable :: lat - real(r_kind), dimension(:), allocatable :: lon - real(r_kind), dimension(:), allocatable :: radius - real(r_kind) :: gcdist - real(r_kind) :: gchead - real(r_kind) :: gclat - real(r_kind) :: gclon - integer :: ncoords - integer :: nx - integer :: ny - end type grid_struct ! type grid_struct - type hsa_struct - character(len=4), dimension(:), allocatable :: tail - character(len=500) :: filename - logical :: process - real(r_double) :: rel_julian - real(r_double) :: spg_julian - real(r_kind), dimension(:), allocatable :: lat - real(r_kind), dimension(:), allocatable :: lon - real(r_kind), dimension(:), allocatable :: fallrate - real(r_kind), dimension(:), allocatable :: p - real(r_kind), dimension(:), allocatable :: rh - real(r_kind), dimension(:), allocatable :: t - real(r_kind), dimension(:), allocatable :: u - real(r_kind), dimension(:), allocatable :: v - real(r_kind), dimension(:), allocatable :: z - real(r_kind), dimension(:), allocatable :: time - real(r_kind), dimension(:), allocatable :: yymmdd - real(r_kind) :: pmax - real(r_kind) :: pmin - real(r_kind) :: psfc - real(r_kind) :: rellon - real(r_kind) :: rellat - real(r_kind) :: spglon - real(r_kind) :: spglat - integer, dimension(:), allocatable :: gmt - integer, dimension(:), allocatable :: wx - integer :: dd - integer :: hh - integer :: logtime - integer :: mm - integer :: nmnlevs - integer :: nn - integer :: nz - integer :: rel_hmsts - integer :: reltime - integer :: spgtime - integer :: ss - integer :: yyyy - end type hsa_struct ! type hsa_struct - type interp_p_struct - real(r_kind), dimension(:), allocatable :: var - real(r_kind), dimension(:), allocatable :: p - real(r_kind) :: psfc - integer :: nz - end type interp_p_struct ! type interp_p_struct - type interp_spline_struct - real(r_kind), dimension(:), allocatable :: xa - real(r_kind), dimension(:), allocatable :: ya - real(r_kind) :: x - real(r_kind) :: y - integer :: n - end type interp_spline_struct ! type interp_spline_struct - type kdtree_struct - real(r_kind), dimension(:,:), allocatable :: r2dist - real(r_kind) :: r2 - integer, dimension(:,:), allocatable :: idx - integer :: nalloc - integer :: ncoords - integer :: nfound - integer :: nn - end type kdtree_struct ! type kdtree_struct - type meteo_struct - character(len=500) :: tempdrop_name - character(len=5) :: acid - character(len=2) :: obnum - real(r_double), dimension(:), allocatable :: dwpt - real(r_double), dimension(:), allocatable :: jdate - real(r_double), dimension(:), allocatable :: lat - real(r_double), dimension(:), allocatable :: lon - real(r_double), dimension(:), allocatable :: p - real(r_double), dimension(:), allocatable :: q - real(r_double), dimension(:), allocatable :: rh - real(r_double), dimension(:), allocatable :: t - real(r_double), dimension(:), allocatable :: thta - real(r_double), dimension(:), allocatable :: thte - real(r_double), dimension(:), allocatable :: thtv - real(r_double), dimension(:), allocatable :: u - real(r_double), dimension(:), allocatable :: v - real(r_double), dimension(:), allocatable :: wdir - real(r_double), dimension(:), allocatable :: wspd - real(r_double), dimension(:), allocatable :: wvmxrt - real(r_double), dimension(:), allocatable :: z - real(r_kind), dimension(:), allocatable :: dist - real(r_kind), dimension(:), allocatable :: head - real(r_double) :: psfc - integer :: nz - end type meteo_struct ! type meteo_struct - type sonde_struct - character(len=500), dimension(:), allocatable :: filename - integer :: nsondes - end type sonde_struct ! type sonde_struct - type statgrid_struct - real(r_kind), dimension(:), allocatable :: var - real(r_kind) :: mean - real(r_kind) :: vari - real(r_kind) :: stdev - real(r_kind) :: varmin - real(r_kind) :: varmax - integer :: n - integer :: nvals - end type statgrid_struct ! type statgrid_struct - type tcinfo_struct - character(len=3) :: id - real(r_kind) :: mdl_clat - real(r_kind) :: mdl_clon - real(r_kind) :: mdl_pcen - real(r_kind) :: mdl_vmax - real(r_kind) :: obs_clat - real(r_kind) :: obs_clon - real(r_kind) :: obs_pcen - real(r_kind) :: obs_vmax - end type tcinfo_struct ! type tcinfo_struct - type tdr_struct - character(len=3), dimension(:), allocatable :: stmid - character(len=19) :: file_timestamp - real(r_kind), dimension(:), allocatable :: time_max - real(r_kind), dimension(:), allocatable :: time_min - integer, dimension(:), allocatable :: flag - integer, dimension(:), allocatable :: nrecs - integer :: nstmid - end type tdr_struct ! type tdr_struct - type timeinfo_struct - character(len=10) :: idatestr - real(r_double) :: jday - real(r_double) :: maxjday - real(r_double) :: minjday - integer :: idate - end type timeinfo_struct ! type timeinfo_struct - type topogrid_struct - real(r_kind), dimension(:), allocatable :: lat - real(r_kind), dimension(:), allocatable :: lon - real(r_kind), dimension(:), allocatable :: topo - integer :: ncoords - integer :: nx - integer :: ny - end type topogrid_struct ! type topogrid_struct - type varinfo_struct - character(len=500), dimension(:,:,:), allocatable :: varattrs - character(len=25), dimension(:), allocatable :: varname - character(len=10), dimension(:), allocatable :: dimname - character(len=10), dimension(:), allocatable :: vartype - integer, dimension(:,:), allocatable :: vardimid - integer, dimension(:), allocatable :: dimid - integer, dimension(:), allocatable :: dimval - integer, dimension(:), allocatable :: varid - integer, dimension(:), allocatable :: varndims - integer, dimension(:), allocatable :: varnattrs - integer :: nvars - integer :: ndims - integer :: nattrs - end type varinfo_struct ! type varinfo_struct - type vdm_struct - character(len=19), dimension(:,:), allocatable :: obs_time - character(len=500), dimension(:), allocatable :: filename - character(len=19), dimension(:), allocatable :: fix_time - real(r_kind), dimension(:,:), allocatable :: obs_alt - real(r_kind), dimension(:,:), allocatable :: obs_dist - real(r_kind), dimension(:,:), allocatable :: obs_head - real(r_kind), dimension(:,:), allocatable :: obs_lat - real(r_kind), dimension(:,:), allocatable :: obs_lon - real(r_kind), dimension(:,:), allocatable :: obs_plev - real(r_kind), dimension(:,:), allocatable :: obs_u - real(r_kind), dimension(:,:), allocatable :: obs_v - real(r_kind), dimension(:,:), allocatable :: obs_wdir - real(r_kind), dimension(:,:), allocatable :: obs_wspd - real(r_kind), dimension(:), allocatable :: fix_lat - real(r_kind), dimension(:), allocatable :: fix_lon - integer :: nobs - integer :: nvdm - end type vdm_struct ! type vdm_struct - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_bufr_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! bufr_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN bufr_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_bufr_struct(grid) - - ! Define variables passed routine - - type(bufr_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%obs)) deallocate(grid%obs) - if(allocated(grid%qcf)) deallocate(grid%qcf) - if(allocated(grid%oer)) deallocate(grid%oer) - if(allocated(grid%hdr)) deallocate(grid%hdr) - - !===================================================================== - - end subroutine finalize_bufr_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_bufrhdr_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! bufrhdr_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN bufrhdr_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_bufrhdr_struct(grid) - - ! Define variables passed routine - - type(bufrhdr_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%hdr)) deallocate(grid%hdr) - - !===================================================================== - - end subroutine finalize_bufrhdr_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_fcstmdl_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! fcstmdl_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN fcstmdl_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_fcstmdl_struct(grid) - - ! Define variables passed to routine - - type(fcstmdl_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%p)) deallocate(grid%p) - if(allocated(grid%q)) deallocate(grid%q) - if(allocated(grid%t)) deallocate(grid%t) - if(allocated(grid%u)) deallocate(grid%u) - if(allocated(grid%v)) deallocate(grid%v) - if(allocated(grid%lat)) deallocate(grid%lat) - if(allocated(grid%lon)) deallocate(grid%lon) - if(allocated(grid%slmsk)) deallocate(grid%slmsk) - if(allocated(grid%idx)) deallocate(grid%idx) - - !===================================================================== - - end subroutine finalize_fcstmdl_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_fv3_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! fv3_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN fv3_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_fv3_struct(grid) - - ! Define variables passed to routine - - type(fv3_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%u)) deallocate(grid%u) - if(allocated(grid%v)) deallocate(grid%v) - if(allocated(grid%p)) deallocate(grid%p) - if(allocated(grid%q)) deallocate(grid%q) - if(allocated(grid%t)) deallocate(grid%t) - if(allocated(grid%ua)) deallocate(grid%ua) - if(allocated(grid%va)) deallocate(grid%va) - if(allocated(grid%lat)) deallocate(grid%lat) - if(allocated(grid%lon)) deallocate(grid%lon) - if(allocated(grid%psfc)) deallocate(grid%psfc) - if(allocated(grid%slmsk)) deallocate(grid%slmsk) - - !===================================================================== - - end subroutine finalize_fv3_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_grid_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! grid_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN grid_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_grid_struct(grid) - - ! Define variables passed to routine - - type(grid_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%angle)) deallocate(grid%angle) - if(allocated(grid%lat)) deallocate(grid%lat) - if(allocated(grid%lon)) deallocate(grid%lon) - if(allocated(grid%radius)) deallocate(grid%radius) - - !===================================================================== - - end subroutine finalize_grid_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_hsa_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! hsa_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN hsa_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_hsa_struct(grid) - - ! Define variables passed to routine - - type(hsa_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%tail)) deallocate(grid%tail) - if(allocated(grid%lat)) deallocate(grid%lat) - if(allocated(grid%lon)) deallocate(grid%lon) - if(allocated(grid%fallrate)) deallocate(grid%fallrate) - if(allocated(grid%p)) deallocate(grid%p) - if(allocated(grid%rh)) deallocate(grid%rh) - if(allocated(grid%t)) deallocate(grid%t) - if(allocated(grid%u)) deallocate(grid%u) - if(allocated(grid%v)) deallocate(grid%v) - if(allocated(grid%yymmdd)) deallocate(grid%yymmdd) - if(allocated(grid%z)) deallocate(grid%z) - if(allocated(grid%gmt)) deallocate(grid%gmt) - if(allocated(grid%wx)) deallocate(grid%wx) - if(allocated(grid%time)) deallocate(grid%time) - - !===================================================================== - - end subroutine finalize_hsa_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_interp_p_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! interp_p_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN interp_p_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_interp_p_struct(grid) - - ! Define variables passed to routine - - type(interp_p_struct) :: grid - logical :: debug - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%p)) deallocate(grid%p) - if(allocated(grid%var)) deallocate(grid%var) - - !===================================================================== - - end subroutine finalize_interp_p_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_interp_spline_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! interp_spline_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN interp_spline_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_interp_spline_struct(grid) - - ! Define variables passed to routine - - type(interp_spline_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%xa)) deallocate(grid%xa) - if(allocated(grid%ya)) deallocate(grid%ya) - - !===================================================================== - - end subroutine finalize_interp_spline_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_kdtree_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! kdtree_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN kdtree_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_kdtree_struct(grid) - - ! Define variables passed to routine - - type(kdtree_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%r2dist)) deallocate(grid%r2dist) - if(allocated(grid%idx)) deallocate(grid%idx) - - !===================================================================== - - end subroutine finalize_kdtree_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_meteo_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! meteo_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_meteo_struct(grid) - - ! Define variables passed to routine - - type(meteo_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%dwpt)) deallocate(grid%dwpt) - if(allocated(grid%jdate)) deallocate(grid%jdate) - if(allocated(grid%lat)) deallocate(grid%lat) - if(allocated(grid%lon)) deallocate(grid%lon) - if(allocated(grid%p)) deallocate(grid%p) - if(allocated(grid%q)) deallocate(grid%q) - if(allocated(grid%rh)) deallocate(grid%rh) - if(allocated(grid%t)) deallocate(grid%t) - if(allocated(grid%thta)) deallocate(grid%thta) - if(allocated(grid%thte)) deallocate(grid%thte) - if(allocated(grid%thtv)) deallocate(grid%thtv) - if(allocated(grid%u)) deallocate(grid%u) - if(allocated(grid%v)) deallocate(grid%v) - if(allocated(grid%wdir)) deallocate(grid%wdir) - if(allocated(grid%wspd)) deallocate(grid%wspd) - if(allocated(grid%wvmxrt)) deallocate(grid%wvmxrt) - if(allocated(grid%z)) deallocate(grid%z) - - !===================================================================== - - end subroutine finalize_meteo_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_sonde_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! sonde_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN sonde_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_sonde_struct(grid) - - ! Define variables passed to routine - - type(sonde_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%filename)) deallocate(grid%filename) - - !===================================================================== - - end subroutine finalize_sonde_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_statgrid_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! statgrid_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN statgrid_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_statgrid_struct(grid) - - ! Define variables passed to routine - - type(statgrid_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%var)) deallocate(grid%var) - - !===================================================================== - - end subroutine finalize_statgrid_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_tdr_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! tdr_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN tdr_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_tdr_struct(grid) - - ! Define variables passed to routine - - type(tdr_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%stmid)) deallocate(grid%stmid) - if(allocated(grid%time_max)) deallocate(grid%time_max) - if(allocated(grid%time_min)) deallocate(grid%time_min) - if(allocated(grid%flag)) deallocate(grid%flag) - if(allocated(grid%nrecs)) deallocate(grid%nrecs) - - !===================================================================== - - end subroutine finalize_tdr_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_topogrid_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! topogrid_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN topogrid_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_topogrid_struct(grid) - - ! Define variables passed routine - - type(topogrid_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%lat)) deallocate(grid%lat) - if(allocated(grid%lon)) deallocate(grid%lon) - if(allocated(grid%topo)) deallocate(grid%topo) - - !===================================================================== - - end subroutine finalize_topogrid_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_varinfo_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! varinfo_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN varinfo_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_varinfo_struct(grid) - - ! Define variables passed to routine - - type(varinfo_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%varattrs)) deallocate(grid%varattrs) - if(allocated(grid%varname)) deallocate(grid%varname) - if(allocated(grid%vartype)) deallocate(grid%vartype) - if(allocated(grid%dimname)) deallocate(grid%dimname) - if(allocated(grid%dimval)) deallocate(grid%dimval) - if(allocated(grid%dimid)) deallocate(grid%dimid) - if(allocated(grid%vardimid)) deallocate(grid%vardimid) - if(allocated(grid%varid)) deallocate(grid%varid) - if(allocated(grid%varndims)) deallocate(grid%varndims) - if(allocated(grid%varnattrs)) deallocate(grid%varnattrs) - - !===================================================================== - - end subroutine finalize_varinfo_struct - - !======================================================================= - - ! SUBROUTINE: - - ! finalize_vdm_struct.f90 - - ! DESCRIPTION: - - ! This subroutine deallocates memory for all arrays within the - ! vdm_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN vdm_struct variable. - - !----------------------------------------------------------------------- - - subroutine finalize_vdm_struct(grid) - - ! Define variables passed to routine - - type(vdm_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%filename)) deallocate(grid%filename) - if(allocated(grid%fix_lat)) deallocate(grid%fix_lat) - if(allocated(grid%fix_lon)) deallocate(grid%fix_lon) - if(allocated(grid%fix_time)) deallocate(grid%fix_time) - if(allocated(grid%obs_alt)) deallocate(grid%obs_alt) - if(allocated(grid%obs_dist)) deallocate(grid%obs_dist) - if(allocated(grid%obs_head)) deallocate(grid%obs_head) - if(allocated(grid%obs_lat)) deallocate(grid%obs_lat) - if(allocated(grid%obs_lon)) deallocate(grid%obs_lon) - if(allocated(grid%obs_plev)) deallocate(grid%obs_plev) - if(allocated(grid%obs_time)) deallocate(grid%obs_time) - if(allocated(grid%obs_u)) deallocate(grid%obs_u) - if(allocated(grid%obs_v)) deallocate(grid%obs_v) - if(allocated(grid%obs_wdir)) deallocate(grid%obs_wdir) - if(allocated(grid%obs_wspd)) deallocate(grid%obs_wspd) - - !===================================================================== - - end subroutine finalize_vdm_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_bufr_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! bufr_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN bufr_struct variable containing the variables - ! necessary to allocate and initialize the respective variable - ! arrays. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN bufr_struct variable containing allocated and - ! initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_bufr_struct(grid) - - ! Define variables passed routine - - type(bufr_struct) :: grid - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(grid%mxmn .eq. 0) grid%mxmn = bufr_mxmn - if(grid%mxlv .eq. 0) grid%mxlv = bufr_mxlv - - ! Allocate memory for local variables - - if(.not. allocated(grid%obs)) allocate(grid%obs(grid%mxmn,grid%mxlv)) - if(.not. allocated(grid%qcf)) allocate(grid%qcf(grid%mxmn,grid%mxlv)) - if(.not. allocated(grid%oer)) allocate(grid%oer(grid%mxmn,grid%mxlv)) - if(.not. allocated(grid%hdr)) allocate(grid%hdr(grid%mxmn)) - - ! Define local variables - - grid%obs = bufr_spval - grid%qcf = bufr_spval - grid%oer = bufr_spval - grid%hdr = bufr_spval - - !===================================================================== - - end subroutine initialize_bufr_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_bufrhdr_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! bufrhdr_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN bufrhdr_struct variable containing the variables - ! necessary to allocate and initialize the respective variable - ! arrays. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN bufrhdr_struct variable containing allocated and - ! initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_bufrhdr_struct(grid) - - ! Define variables passed routine - - type(bufrhdr_struct) :: grid - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(grid%hdr)) allocate(grid%hdr(grid%mxmn,grid%nrecs)) - - !===================================================================== - - end subroutine initialize_bufrhdr_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_fcstmdl_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! fcstmdl_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN fcstmdl_struct variable. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN fcstmdl_struct variable containing allocated and - ! initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_fcstmdl_struct(grid) - - ! Define variables passed to routine - - type(fcstmdl_struct) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(.not. allocated(grid%p)) allocate(grid%p(grid%nobs,grid%nz)) - if(.not. allocated(grid%q)) allocate(grid%q(grid%nobs,grid%nz)) - if(.not. allocated(grid%t)) allocate(grid%t(grid%nobs,grid%nz)) - if(.not. allocated(grid%u)) allocate(grid%u(grid%nobs,grid%nz)) - if(.not. allocated(grid%v)) allocate(grid%v(grid%nobs,grid%nz)) - if(.not. allocated(grid%lat)) allocate(grid%lat(grid%nobs)) - if(.not. allocated(grid%lon)) allocate(grid%lon(grid%nobs)) - if(.not. allocated(grid%slmsk)) allocate(grid%slmsk(grid%nobs)) - if(.not. allocated(grid%idx)) allocate(grid%idx(grid%nobs)) - - !===================================================================== - - end subroutine initialize_fcstmdl_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_fv3_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! fv3_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN fv3_struct variable. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN fv3_struct variable containing allocated and - ! initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_fv3_struct(grid) - - ! Define variables passed to routine - - type(fv3_struct) :: grid - - !===================================================================== - - ! Define local variables - - if(grid%ncoords .le. 0) grid%ncoords = (grid%nx*grid%ny) - - ! Allocate memory for local variables - - if(.not. allocated(grid%u)) & - & allocate(grid%u(grid%nx,(grid%ny+1),grid%nz)) - if(.not. allocated(grid%v)) & - & allocate(grid%v((grid%nx+1),grid%ny,grid%nz)) - if(.not. allocated(grid%p)) & - & allocate(grid%p(grid%ncoords,grid%nz)) - if(.not. allocated(grid%q)) & - & allocate(grid%q(grid%ncoords,grid%nz)) - if(.not. allocated(grid%t)) & - & allocate(grid%t(grid%ncoords,grid%nz)) - if(.not. allocated(grid%ua)) & - & allocate(grid%ua(grid%ncoords,grid%nz)) - if(.not. allocated(grid%va)) & - & allocate(grid%va(grid%ncoords,grid%nz)) - if(.not. allocated(grid%lat)) & - & allocate(grid%lat(grid%ncoords)) - if(.not. allocated(grid%lon)) & - & allocate(grid%lon(grid%ncoords)) - if(.not. allocated(grid%psfc)) & - & allocate(grid%psfc(grid%ncoords)) - if(.not. allocated(grid%slmsk)) & - & allocate(grid%slmsk(grid%ncoords)) - - !===================================================================== - - end subroutine initialize_fv3_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_grid_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! grid_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN grid_struct variable. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN grid_struct variable where all arrays are - ! allocated and initialized (when necessary). - - !----------------------------------------------------------------------- - - subroutine initialize_grid_struct(grid) - - ! Define variables passed to routine - - type(grid_struct) :: grid - - !===================================================================== - - ! Define local variables - - if(grid%ncoords .le. 0) grid%ncoords = (grid%nx*grid%ny) - - ! Allocate memory for local variables - - if(.not. allocated(grid%angle)) & - & allocate(grid%angle(grid%ncoords)) - if(.not. allocated(grid%lat)) & - & allocate(grid%lat(grid%ncoords)) - if(.not. allocated(grid%lon)) & - & allocate(grid%lon(grid%ncoords)) - if(.not. allocated(grid%radius)) & - & allocate(grid%radius(grid%ncoords)) - - !===================================================================== - - end subroutine initialize_grid_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_hsa_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! hsa_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN hsa_struct variable. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN hsa_struct variable containing allocated and - ! initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_hsa_struct(grid) - - ! Define variables passed to routine - - type(hsa_struct) :: grid - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(grid%tail)) allocate(grid%tail(grid%nz)) - if(.not. allocated(grid%lat)) allocate(grid%lat(grid%nz)) - if(.not. allocated(grid%lon)) allocate(grid%lon(grid%nz)) - if(.not. allocated(grid%fallrate)) allocate(grid%fallrate(grid%nz)) - if(.not. allocated(grid%p)) allocate(grid%p(grid%nz)) - if(.not. allocated(grid%rh)) allocate(grid%rh(grid%nz)) - if(.not. allocated(grid%t)) allocate(grid%t(grid%nz)) - if(.not. allocated(grid%u)) allocate(grid%u(grid%nz)) - if(.not. allocated(grid%v)) allocate(grid%v(grid%nz)) - if(.not. allocated(grid%yymmdd)) allocate(grid%yymmdd(grid%nz)) - if(.not. allocated(grid%z)) allocate(grid%z(grid%nz)) - if(.not. allocated(grid%gmt)) allocate(grid%gmt(grid%nz)) - if(.not. allocated(grid%wx)) allocate(grid%wx(grid%nz)) - if(.not. allocated(grid%time)) allocate(grid%time(grid%nz)) - - ! Define local variables - - grid%process = .true. - - !===================================================================== - - end subroutine initialize_hsa_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_interp_p_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! interp_p_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN interp_p_struct variable. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN interp_p_struct variable containing allocated - ! and initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_interp_p_struct(grid) - - ! Define variables passed to routine - - type(interp_p_struct) :: grid - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(grid%p)) allocate(grid%p(grid%nz)) - if(.not. allocated(grid%var)) allocate(grid%var(grid%nz)) - - !===================================================================== - - end subroutine initialize_interp_p_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_interp_spline_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! interp_spline_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN interp_spline_struct variable. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN interp_spline_struct variable containing - ! allocated and initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_interp_spline_struct(grid) - - ! Define variables passed to routine - - type(interp_spline_struct) :: grid - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(grid%xa)) allocate(grid%xa(grid%n)) - if(.not. allocated(grid%ya)) allocate(grid%ya(grid%n)) - - !===================================================================== - - end subroutine initialize_interp_spline_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_kdtree_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! kdtree_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN kdtree_struct variable. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN kdtree_struct variable where all arrays are - ! allocated and initialized (when necessary). - - !----------------------------------------------------------------------- - - subroutine initialize_kdtree_struct(grid) - - ! Define variables passed to routine - - type(kdtree_struct) :: grid - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(grid%r2dist)) & - & allocate(grid%r2dist(grid%ncoords,grid%nn)) - if(.not. allocated(grid%idx)) & - & allocate(grid%idx(grid%ncoords,grid%nn)) - - !===================================================================== - - end subroutine initialize_kdtree_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_meteo_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! meteo_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN meteo_struct variable containing allocated and - ! initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_meteo_struct(grid) - - ! Define variables passed to routine - - type(meteo_struct) :: grid - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(grid%dwpt)) allocate(grid%dwpt(grid%nz)) - if(.not. allocated(grid%jdate)) allocate(grid%jdate(grid%nz)) - if(.not. allocated(grid%lat)) allocate(grid%lat(grid%nz)) - if(.not. allocated(grid%lon)) allocate(grid%lon(grid%nz)) - if(.not. allocated(grid%p)) allocate(grid%p(grid%nz)) - if(.not. allocated(grid%q)) allocate(grid%q(grid%nz)) - if(.not. allocated(grid%rh)) allocate(grid%rh(grid%nz)) - if(.not. allocated(grid%t)) allocate(grid%t(grid%nz)) - if(.not. allocated(grid%thta)) allocate(grid%thta(grid%nz)) - if(.not. allocated(grid%thte)) allocate(grid%thte(grid%nz)) - if(.not. allocated(grid%thtv)) allocate(grid%thtv(grid%nz)) - if(.not. allocated(grid%u)) allocate(grid%u(grid%nz)) - if(.not. allocated(grid%v)) allocate(grid%v(grid%nz)) - if(.not. allocated(grid%wdir)) allocate(grid%wdir(grid%nz)) - if(.not. allocated(grid%wspd)) allocate(grid%wspd(grid%nz)) - if(.not. allocated(grid%wvmxrt)) allocate(grid%wvmxrt(grid%nz)) - if(.not. allocated(grid%z)) allocate(grid%z(grid%nz)) - - ! Define local variables - - grid%dwpt = spval - grid%jdate = spval - grid%lat = spval - grid%lon = spval - grid%p = spval - grid%q = spval - grid%rh = spval - grid%t = spval - grid%thta = spval - grid%thte = spval - grid%thtv = spval - grid%u = spval - grid%v = spval - grid%wdir = spval - grid%wspd = spval - grid%wvmxrt = spval - grid%z = spval - grid%psfc = spval - - !===================================================================== - - end subroutine initialize_meteo_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_sonde_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! sonde_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN sonde_struct variable. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN sonde_struct variable containing allocated and - ! initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_sonde_struct(grid) - - ! Define variables passed to routine - - type(sonde_struct) :: grid - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(grid%filename)) & - & allocate(grid%filename(grid%nsondes)) - - !===================================================================== - - end subroutine initialize_sonde_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_statgrid_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! statgrid_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN statgrid_struct variable. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN statgrid_struct variable containing allocated - ! and initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_statgrid_struct(grid) - - ! Define variables passed to routine - - type(statgrid_struct) :: grid - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(grid%var)) allocate(grid%var(grid%n)) - - !===================================================================== - - end subroutine initialize_statgrid_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_tdr_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! tdr_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN tdr_struct variable. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN tdr_struct variable containing allocated and - ! initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_tdr_struct(grid) - - ! Define variables passed to routine - - type(tdr_struct) :: grid - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(grid%stmid)) & - & allocate(grid%stmid(grid%nstmid)) - if(.not. allocated(grid%time_max)) & - & allocate(grid%time_max(grid%nstmid)) - if(.not. allocated(grid%time_min)) & - & allocate(grid%time_min(grid%nstmid)) - if(.not. allocated(grid%flag)) & - & allocate(grid%flag(grid%nstmid)) - if(.not. allocated(grid%nrecs)) & - & allocate(grid%nrecs(grid%nstmid)) - - !===================================================================== - - end subroutine initialize_tdr_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_topogrid_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! topogrid_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN topogrid_struct variable containing the - ! variables necessary to allocate and initialize the respective - ! variable arrays. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN topogrid_struct variable containing allocated - ! and initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_topogrid_struct(grid) - - ! Define variables passed routine - - type(topogrid_struct) :: grid - - !===================================================================== - - ! Define local variables - - grid%ncoords = (grid%nx*grid%ny) - - ! Allocate memory for local variables - - if(.not. allocated(grid%lat)) allocate(grid%lat(grid%ncoords)) - if(.not. allocated(grid%lon)) allocate(grid%lon(grid%ncoords)) - if(.not. allocated(grid%topo)) allocate(grid%topo(grid%ncoords)) - - !===================================================================== - - end subroutine initialize_topogrid_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_varinfo_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! varinfo_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN varinfo_struct variable. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN varinfo_struct variable containing allocated and - ! initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_varinfo_struct(grid) - - ! Define variables passed to routine - - type(varinfo_struct) :: grid - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(grid%varattrs)) & - & allocate(grid%varattrs(grid%nvars,grid%nattrs,2)) - if(.not. allocated(grid%vardimid)) & - & allocate(grid%vardimid(grid%nvars,grid%ndims)) - if(.not. allocated(grid%varname)) & - & allocate(grid%varname(grid%nvars)) - if(.not. allocated(grid%vartype)) & - & allocate(grid%vartype(grid%nvars)) - if(.not. allocated(grid%varndims)) & - & allocate(grid%varndims(grid%nvars)) - if(.not. allocated(grid%varnattrs)) & - & allocate(grid%varnattrs(grid%nvars)) - if(.not. allocated(grid%varid)) & - & allocate(grid%varid(grid%nvars)) - if(.not. allocated(grid%dimval)) & - & allocate(grid%dimval(grid%ndims)) - if(.not. allocated(grid%dimname)) & - & allocate(grid%dimname(grid%ndims)) - if(.not. allocated(grid%dimid)) & - & allocate(grid%dimid(grid%ndims)) - - !===================================================================== - - end subroutine initialize_varinfo_struct - - !======================================================================= - - ! SUBROUTINE: - - ! initialize_vdm_struct.f90 - - ! DESCRIPTION: - - ! This subroutine allocates memory for all arrays within the - ! vdm_struct FORTRAN structure. - - ! INPUT VARIABLES: - - ! * grid; a FORTRAN vdm_struct variable. - - ! OUTPUT VARIABLES: - - ! * grid; a FORTRAN vdm_struct variable containing allocated and - ! initialized variable arrays. - - !----------------------------------------------------------------------- - - subroutine initialize_vdm_struct(grid) - - ! Define variables passed to routine - - type(vdm_struct) :: grid - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(grid%obs_alt)) & - & allocate(grid%obs_alt(grid%nvdm,grid%nobs)) - if(.not. allocated(grid%obs_dist)) & - & allocate(grid%obs_dist(grid%nvdm,grid%nobs)) - if(.not. allocated(grid%obs_head)) & - & allocate(grid%obs_head(grid%nvdm,grid%nobs)) - if(.not. allocated(grid%obs_lat)) & - & allocate(grid%obs_lat(grid%nvdm,grid%nobs)) - if(.not. allocated(grid%obs_lon)) & - & allocate(grid%obs_lon(grid%nvdm,grid%nobs)) - if(.not. allocated(grid%obs_plev)) & - & allocate(grid%obs_plev(grid%nvdm,grid%nobs)) - if(.not. allocated(grid%obs_time)) & - & allocate(grid%obs_time(grid%nvdm,grid%nobs)) - if(.not. allocated(grid%obs_u)) & - & allocate(grid%obs_u(grid%nvdm,grid%nobs)) - if(.not. allocated(grid%obs_v)) & - & allocate(grid%obs_v(grid%nvdm,grid%nobs)) - if(.not. allocated(grid%obs_wdir)) & - & allocate(grid%obs_wdir(grid%nvdm,grid%nobs)) - if(.not. allocated(grid%obs_wspd)) & - & allocate(grid%obs_wspd(grid%nvdm,grid%nobs)) - if(.not. allocated(grid%filename)) & - & allocate(grid%filename(grid%nvdm)) - if(.not. allocated(grid%fix_lat)) & - & allocate(grid%fix_lat(grid%nvdm)) - if(.not. allocated(grid%fix_lon)) & - & allocate(grid%fix_lon(grid%nvdm)) - if(.not. allocated(grid%fix_time)) & - & allocate(grid%fix_time(grid%nvdm)) - - ! Define local variables - - grid%obs_dist = spval - grid%obs_head = spval - grid%obs_plev = spval - grid%obs_lat = spval - grid%obs_lon = spval - grid%obs_time = '0000-00-00_00:00:00' - grid%obs_u = spval - grid%obs_v = spval - grid%obs_wdir = spval - grid%obs_wspd = spval - - !===================================================================== - - end subroutine initialize_vdm_struct - - !======================================================================= - -end module variable_interface diff --git a/sorc/hafs_utils.fd b/sorc/hafs_utils.fd index 3c3126535..e2a147914 160000 --- a/sorc/hafs_utils.fd +++ b/sorc/hafs_utils.fd @@ -1 +1 @@ -Subproject commit 3c31265354b34ae1b61c09a02225e320c913395f +Subproject commit e2a147914ccf69ac2b2f9e77e2b5ed233cf08580 diff --git a/sorc/install_all.sh b/sorc/install_all.sh index 7d13972e1..0691a0524 100755 --- a/sorc/install_all.sh +++ b/sorc/install_all.sh @@ -54,9 +54,12 @@ $Build_vortextracker && { # install tools #------------------------------------ $Build_tools && { - ${CP} hafs_tools.fd/exec/hafs_analysis_update.x ../exec/hafs_analysis_update.x - ${CP} hafs_tools.fd/exec/hafs_obs_preproc.x ../exec/hafs_obs_preproc.x - ${CP} hafs_tools.fd/exec/mpiserial.x ../exec/hafs_mpiserial.x + ${CP} hafs_tools.fd/exec/hafs_analysis_update.x ../exec/hafs_analysis_update.x + ${CP} hafs_tools.fd/exec/hafs_obs_preproc.x ../exec/hafs_obs_preproc.x + ${CP} hafs_tools.fd/exec/mpiserial.x ../exec/hafs_mpiserial.x + ${CP} hafs_tools.fd/exec/hafs_change_prepbufr_qm_typ.x ../exec/hafs_change_prepbufr_qm_typ.x + ${CP} hafs_tools.fd/exec/hafs_change_prepbufr_qm_in_circle.x ../exec/hafs_change_prepbufr_qm_in_circle.x + ${CP} hafs_tools.fd/exec/hafs_change_prepbufr_rm_typ_in_circle.x ../exec/hafs_change_prepbufr_rm_typ_in_circle.x } #------------------------------------ diff --git a/sorc/link_fix.sh b/sorc/link_fix.sh index 913274944..bbe75f642 100755 --- a/sorc/link_fix.sh +++ b/sorc/link_fix.sh @@ -5,19 +5,20 @@ cwd=`pwd` HOMEhafs=$(pwd)/.. FIXhafs=${HOMEhafs}/fix +FIXversion=20210520 mkdir -p ${FIXhafs} cd ${FIXhafs} mkdir -p fix_fv3 if [ ${target} == "wcoss_cray" ]; then - FIXROOT=/gpfs/hps3/emc/hwrf/noscrub/emc.hurpara/hafs-fix-files/hafs-20200501-fix/fix + FIXROOT=/gpfs/hps3/emc/hwrf/noscrub/emc.hurpara/hafs-fix-files/hafs-${FIXversion}-fix/fix elif [ ${target} == "wcoss_dell_p3" ]; then - FIXROOT=/gpfs/dell2/emc/modeling/noscrub/emc.hurpara/hafs-fix-files/hafs-20200501-fix/fix + FIXROOT=/gpfs/dell2/emc/modeling/noscrub/emc.hurpara/hafs-fix-files/hafs-${FIXversion}-fix/fix elif [ ${target} == "hera" ]; then - FIXROOT=/scratch1/NCEPDEV/hwrf/noscrub/hafs-fix-files/hafs-20200501-fix/fix + FIXROOT=/scratch1/NCEPDEV/hwrf/noscrub/hafs-fix-files/hafs-${FIXversion}-fix/fix elif [ ${target} == "orion" ]; then - FIXROOT=/work/noaa/hwrf/noscrub/hafs-fix-files/hafs-20200501-fix/fix + FIXROOT=/work/noaa/hwrf/noscrub/hafs-fix-files/hafs-${FIXversion}-fix/fix elif [ ${target} == "jet" ]; then - FIXROOT=/lfs4/HFIP/hwrf-data/hafs-fix-files/hafs-20200501-fix/fix + FIXROOT=/lfs4/HFIP/hwrf-data/hafs-fix-files/hafs-${FIXversion}-fix/fix else echo "Unknown site " ${target} exit 1 diff --git a/ush/hafs_completion.py b/ush/hafs_completion.py index 66122063b..3ade535b4 100755 --- a/ush/hafs_completion.py +++ b/ush/hafs_completion.py @@ -8,7 +8,18 @@ # the special Rocoto "completion" job that is used to tell Rocoto to stop # running jobs for the forecast cycle. -import sys +import sys, os, glob + +if 'USHhafs' in os.environ: + sys.path.append(os.environ['USHhafs']) +elif 'HOMEhafs' in os.environ: + sys.path.append(os.path.join(os.environ['HOMEhafs'],'ush')) +else: + guess_HOMEhafs=os.path.dirname(os.path.dirname( + os.path.realpath(__file__))) + guess_USHhafs=os.path.join(guess_HOMEhafs,'ush') + sys.path.append(guess_USHhafs) + import produtil.setup, produtil.log def main(): diff --git a/ush/hafs_donefile.py b/ush/hafs_donefile.py index e3a8cb299..0ce32a908 100755 --- a/ush/hafs_donefile.py +++ b/ush/hafs_donefile.py @@ -5,7 +5,18 @@ # completion of one ensemble member's work, before archiving and # scrubbing. -import sys +import sys, os, glob + +if 'USHhafs' in os.environ: + sys.path.append(os.environ['USHhafs']) +elif 'HOMEhafs' in os.environ: + sys.path.append(os.path.join(os.environ['HOMEhafs'],'ush')) +else: + guess_HOMEhafs=os.path.dirname(os.path.dirname( + os.path.realpath(__file__))) + guess_USHhafs=os.path.join(guess_HOMEhafs,'ush') + sys.path.append(guess_USHhafs) + import produtil.setup, produtil.log def main(): diff --git a/ush/hafs_runcmd.sh.inc b/ush/hafs_runcmd.sh.inc index dce1afa95..465e72329 100644 --- a/ush/hafs_runcmd.sh.inc +++ b/ush/hafs_runcmd.sh.inc @@ -9,7 +9,7 @@ export OMP_NUM_THREADS=${OMP_THREADS:-${OMP_NUM_THREADS:-24}} export PURE_OMP_THREADS=${PURE_OMP_THREADS:-${OMP_NUM_THREADS:-24}} export NCNODE=${NCNODE:-$(($NCTSK * $OMP_NUM_THREADS))} export KMP_AFFINITY=disabled -export KMP_STACKSIZE=${KMP_STACKSIZE:-1024m} +export KMP_STACKSIZE=${KMP_STACKSIZE:-2048m} #export OMP_STACKSIZE=${OMP_STACKSIZE:-2048m} # Set job run commands diff --git a/ush/rocoto_pre_job.sh b/ush/rocoto_pre_job.sh index 47b20ba91..aa5e05fe9 100755 --- a/ush/rocoto_pre_job.sh +++ b/ush/rocoto_pre_job.sh @@ -1,4 +1,4 @@ -#! /bin/sh --login +#! /bin/sh set -x -u -e date . $USHhafs/hafs_pre_job.sh.inc