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