diff --git a/scm/etc/CENTOS_docker_setup.sh b/scm/etc/CENTOS_docker_setup.sh
index 27e821d28..1a519050b 100755
--- a/scm/etc/CENTOS_docker_setup.sh
+++ b/scm/etc/CENTOS_docker_setup.sh
@@ -2,6 +2,8 @@
echo "Setting environment variables for SCM-CCPP on CENTOS with gcc/gfortran"
+export SCM_ROOT=$PWD
+
export CC=/opt/rh/devtoolset-9/root/usr/bin/gcc
export CXX=/opt/rh/devtoolset-9/root/usr/bin/g++
export F77=/opt/rh/devtoolset-9/root/usr/bin/gfortran
diff --git a/scm/etc/Cheyenne_setup_gnu.csh b/scm/etc/Cheyenne_setup_gnu.csh
index e08b58203..013709868 100755
--- a/scm/etc/Cheyenne_setup_gnu.csh
+++ b/scm/etc/Cheyenne_setup_gnu.csh
@@ -2,6 +2,8 @@
echo "Setting environment variables for CCPP-SCM on Cheyenne with gcc/gfortran"
+setenv SCM_ROOT $PWD
+
#start with a "clean" environment; activate and deactivate ncar_pylib in order to successfully deactivate previously activated environment without errors
module load ncarenv/1.3
ncar_pylib
diff --git a/scm/etc/Cheyenne_setup_gnu.sh b/scm/etc/Cheyenne_setup_gnu.sh
index d06c11e33..09fc32c44 100755
--- a/scm/etc/Cheyenne_setup_gnu.sh
+++ b/scm/etc/Cheyenne_setup_gnu.sh
@@ -2,6 +2,8 @@
echo "Setting environment variables for CCPP-SCM on Cheyenne with gcc/gfortran"
+export SCM_ROOT=$PWD
+
#start with a "clean" environment; activate and deactivate ncar_pylib in order to successfully deactivate previously activated environment without errors
module load ncarenv/1.3
ncar_pylib
diff --git a/scm/etc/Cheyenne_setup_intel.csh b/scm/etc/Cheyenne_setup_intel.csh
index a1a015b40..9254e0c4e 100755
--- a/scm/etc/Cheyenne_setup_intel.csh
+++ b/scm/etc/Cheyenne_setup_intel.csh
@@ -2,6 +2,8 @@
echo "Setting environment variables for CCPP-SCM on Cheyenne with icc/ifort"
+setenv SCM_ROOT $PWD
+
#start with a "clean" environment; activate and deactivate ncar_pylib in order to successfully deactivate previously activated environment without errors
module load ncarenv/1.3
ncar_pylib
diff --git a/scm/etc/Cheyenne_setup_intel.sh b/scm/etc/Cheyenne_setup_intel.sh
index b2dbbba04..c29d3e4fc 100755
--- a/scm/etc/Cheyenne_setup_intel.sh
+++ b/scm/etc/Cheyenne_setup_intel.sh
@@ -2,6 +2,8 @@
echo "Setting environment variables for CCPP-SCM on Cheyenne with icc/ifort"
+export SCM_ROOT=$PWD
+
#start with a "clean" environment; activate and deactivate ncar_pylib in order to successfully deactivate previously activated environment without errors
module load ncarenv/1.3
ncar_pylib
@@ -53,4 +55,3 @@ if [ $? -ne 0 ]; then
else
echo "f90nml is installed"
fi
-
diff --git a/scm/etc/Desktop_setup_gfortran.csh b/scm/etc/Desktop_setup_gfortran.csh
index aa6839107..9d39d0d28 100755
--- a/scm/etc/Desktop_setup_gfortran.csh
+++ b/scm/etc/Desktop_setup_gfortran.csh
@@ -2,6 +2,8 @@
echo "Setting environment variables for CCPP-SCM on Desktop (MacOS) with gcc/gfortran"
+setenv SCM_ROOT $PWD
+
echo "Setting CC/CXX/FC environment variables"
setenv CC /opt/local/bin/gcc-mp-10
setenv CXX /opt/local/bin/g++-mp-10
diff --git a/scm/etc/Desktop_setup_gfortran.sh b/scm/etc/Desktop_setup_gfortran.sh
index ccb4db42c..b178772fd 100755
--- a/scm/etc/Desktop_setup_gfortran.sh
+++ b/scm/etc/Desktop_setup_gfortran.sh
@@ -2,6 +2,8 @@
echo "Setting environment variables for CCPP-SCM on Desktop (MacOS) with gcc/gfortran"
+export SCM_ROOT=$PWD
+
echo "Setting CC/CXX/FC environment variables"
export CC=/opt/local/bin/gcc-mp-10
export CXX=/opt/local/bin/g++-mp-10
diff --git a/scm/etc/Hera_setup_intel.csh b/scm/etc/Hera_setup_intel.csh
index 2c32de8ba..fa2276619 100755
--- a/scm/etc/Hera_setup_intel.csh
+++ b/scm/etc/Hera_setup_intel.csh
@@ -2,6 +2,8 @@
echo "Setting environment variables for CCPP-SCM on Hera with icc/ifort"
+setenv SCM_ROOT $PWD
+
#load the modules in order to compile the CCPP SCM
echo "Loading intel and netcdf modules..."
module purge
diff --git a/scm/etc/Hera_setup_intel.sh b/scm/etc/Hera_setup_intel.sh
index 57560b50e..49ac72346 100755
--- a/scm/etc/Hera_setup_intel.sh
+++ b/scm/etc/Hera_setup_intel.sh
@@ -2,6 +2,8 @@
echo "Setting environment variables for CCPP-SCM on Hera with icc/ifort"
+export SCM_ROOT=$PWD
+
#load the modules in order to compile the CCPP SCM
echo "Loading intel and netcdf modules..."
module purge
diff --git a/scm/etc/case_config/AMMA_REF.nml b/scm/etc/case_config/AMMA_REF.nml
index 96c4506bb..5921d4103 100644
--- a/scm/etc/case_config/AMMA_REF.nml
+++ b/scm/etc/case_config/AMMA_REF.nml
@@ -1,20 +1,9 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'AMMA_REF',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/AMMA/REF',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
reference_profile_choice = 2,
-reference_profile_dir = '../data/processed_case_input'
column_area = 1.45E8,
$end
diff --git a/scm/etc/case_config/ARMCU_E3SM.nml b/scm/etc/case_config/ARMCU_E3SM.nml
index e5f525cdc..fceb583d8 100644
--- a/scm/etc/case_config/ARMCU_E3SM.nml
+++ b/scm/etc/case_config/ARMCU_E3SM.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'ARMCU_E3SM',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/ARMCU/E3SM',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/ARMCU_MESONH.nml b/scm/etc/case_config/ARMCU_MESONH.nml
index fd9ce263b..c75452ade 100644
--- a/scm/etc/case_config/ARMCU_MESONH.nml
+++ b/scm/etc/case_config/ARMCU_MESONH.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'ARMCU_MESONH',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/ARMCU/MESONH',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/ARMCU_REF.nml b/scm/etc/case_config/ARMCU_REF.nml
index 3001ce36a..ec84d1e2b 100644
--- a/scm/etc/case_config/ARMCU_REF.nml
+++ b/scm/etc/case_config/ARMCU_REF.nml
@@ -1,20 +1,9 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'ARMCU_REF',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/ARMCU/REF',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
reference_profile_choice = 2,
-reference_profile_dir = '../data/processed_case_input'
column_area = 1.45E8,
$end
diff --git a/scm/etc/case_config/AYOTTE_00SC.nml b/scm/etc/case_config/AYOTTE_00SC.nml
index 49c1d008c..de24578b7 100644
--- a/scm/etc/case_config/AYOTTE_00SC.nml
+++ b/scm/etc/case_config/AYOTTE_00SC.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'AYOTTE_00SC',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/AYOTTE/00SC',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/BOMEX_REF.nml b/scm/etc/case_config/BOMEX_REF.nml
index ac5b59846..a684bc380 100644
--- a/scm/etc/case_config/BOMEX_REF.nml
+++ b/scm/etc/case_config/BOMEX_REF.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'BOMEX_REF',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/BOMEX/REF',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/DYNAMO_NSA3a.nml b/scm/etc/case_config/DYNAMO_NSA3a.nml
index a81845868..c10cc953a 100644
--- a/scm/etc/case_config/DYNAMO_NSA3a.nml
+++ b/scm/etc/case_config/DYNAMO_NSA3a.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'DYNAMO_NSA3a',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/DYNAMO/NSA3a',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/DYNAMO_NSA3a_D1.nml b/scm/etc/case_config/DYNAMO_NSA3a_D1.nml
index 4b2cbc9ee..c9ea73f29 100644
--- a/scm/etc/case_config/DYNAMO_NSA3a_D1.nml
+++ b/scm/etc/case_config/DYNAMO_NSA3a_D1.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'DYNAMO_NSA3a_D1',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/DYNAMO/NSA3a_D1',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/GABLS1_REF.nml b/scm/etc/case_config/GABLS1_REF.nml
index 6acf4b4b6..ab50b2a44 100644
--- a/scm/etc/case_config/GABLS1_REF.nml
+++ b/scm/etc/case_config/GABLS1_REF.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'GABLS1_REF',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/GABLS1/REF',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/IHOP_REF.nml b/scm/etc/case_config/IHOP_REF.nml
index 92fbf0af9..9ae918161 100644
--- a/scm/etc/case_config/IHOP_REF.nml
+++ b/scm/etc/case_config/IHOP_REF.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'IHOP_REF',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/IHOP/REF',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/LASSO_2016051812.nml b/scm/etc/case_config/LASSO_2016051812.nml
index bba6da995..75eff16b8 100644
--- a/scm/etc/case_config/LASSO_2016051812.nml
+++ b/scm/etc/case_config/LASSO_2016051812.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_2016051812',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_2016051812_MSDA.nml b/scm/etc/case_config/LASSO_2016051812_MSDA.nml
index 3388311d0..900c70b9e 100644
--- a/scm/etc/case_config/LASSO_2016051812_MSDA.nml
+++ b/scm/etc/case_config/LASSO_2016051812_MSDA.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_2016051812_MSDA',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_2016051812_VARA.nml b/scm/etc/case_config/LASSO_2016051812_VARA.nml
index 197f049fc..2f0374372 100644
--- a/scm/etc/case_config/LASSO_2016051812_VARA.nml
+++ b/scm/etc/case_config/LASSO_2016051812_VARA.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_2016051812_VARA',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180514_s02.nml b/scm/etc/case_config/LASSO_20180514_s02.nml
index 96187ebc6..432c77ed1 100644
--- a/scm/etc/case_config/LASSO_20180514_s02.nml
+++ b/scm/etc/case_config/LASSO_20180514_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180514_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180522_s02.nml b/scm/etc/case_config/LASSO_20180522_s02.nml
index 3853bdd9f..4f69ef9b1 100644
--- a/scm/etc/case_config/LASSO_20180522_s02.nml
+++ b/scm/etc/case_config/LASSO_20180522_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180522_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180606_s02.nml b/scm/etc/case_config/LASSO_20180606_s02.nml
index 7e9746ccf..feeadc334 100644
--- a/scm/etc/case_config/LASSO_20180606_s02.nml
+++ b/scm/etc/case_config/LASSO_20180606_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180606_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180618_s02.nml b/scm/etc/case_config/LASSO_20180618_s02.nml
index 76f99c2dc..a5b261a3c 100644
--- a/scm/etc/case_config/LASSO_20180618_s02.nml
+++ b/scm/etc/case_config/LASSO_20180618_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180618_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180619_s02.nml b/scm/etc/case_config/LASSO_20180619_s02.nml
index 1ffce01f6..e32bc294d 100644
--- a/scm/etc/case_config/LASSO_20180619_s02.nml
+++ b/scm/etc/case_config/LASSO_20180619_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180619_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180705_s02.nml b/scm/etc/case_config/LASSO_20180705_s02.nml
index e1f95d61c..5648360e8 100644
--- a/scm/etc/case_config/LASSO_20180705_s02.nml
+++ b/scm/etc/case_config/LASSO_20180705_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180705_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180707_s02.nml b/scm/etc/case_config/LASSO_20180707_s02.nml
index 4b930b7a2..af73e1d62 100644
--- a/scm/etc/case_config/LASSO_20180707_s02.nml
+++ b/scm/etc/case_config/LASSO_20180707_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180707_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180709_s02.nml b/scm/etc/case_config/LASSO_20180709_s02.nml
index 6ae76cb6f..ac68594cd 100644
--- a/scm/etc/case_config/LASSO_20180709_s02.nml
+++ b/scm/etc/case_config/LASSO_20180709_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180709_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180712_s02.nml b/scm/etc/case_config/LASSO_20180712_s02.nml
index c8591cc42..6917a1851 100644
--- a/scm/etc/case_config/LASSO_20180712_s02.nml
+++ b/scm/etc/case_config/LASSO_20180712_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180712_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180731_s02.nml b/scm/etc/case_config/LASSO_20180731_s02.nml
index 05029c5b5..6ac93bbad 100644
--- a/scm/etc/case_config/LASSO_20180731_s02.nml
+++ b/scm/etc/case_config/LASSO_20180731_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180731_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180911_s02.nml b/scm/etc/case_config/LASSO_20180911_s02.nml
index 4138e027e..e4fc92955 100644
--- a/scm/etc/case_config/LASSO_20180911_s02.nml
+++ b/scm/etc/case_config/LASSO_20180911_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180911_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180914_s02.nml b/scm/etc/case_config/LASSO_20180914_s02.nml
index fdaf44952..66d28362d 100644
--- a/scm/etc/case_config/LASSO_20180914_s02.nml
+++ b/scm/etc/case_config/LASSO_20180914_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180914_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180916_s02.nml b/scm/etc/case_config/LASSO_20180916_s02.nml
index d8461ecf3..6197652b8 100644
--- a/scm/etc/case_config/LASSO_20180916_s02.nml
+++ b/scm/etc/case_config/LASSO_20180916_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180916_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180917_s02.nml b/scm/etc/case_config/LASSO_20180917_s02.nml
index b1d7103fc..896a32225 100644
--- a/scm/etc/case_config/LASSO_20180917_s02.nml
+++ b/scm/etc/case_config/LASSO_20180917_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180917_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20180918_s02.nml b/scm/etc/case_config/LASSO_20180918_s02.nml
index 1dad0c91e..09deb06aa 100644
--- a/scm/etc/case_config/LASSO_20180918_s02.nml
+++ b/scm/etc/case_config/LASSO_20180918_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20180918_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/LASSO_20181002_s02.nml b/scm/etc/case_config/LASSO_20181002_s02.nml
index 8114ae804..b63d206de 100644
--- a/scm/etc/case_config/LASSO_20181002_s02.nml
+++ b/scm/etc/case_config/LASSO_20181002_s02.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'LASSO_20181002_s02',
-dt = 600.0,
-time_scheme = 1,
runtime = 54000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/MPACE_REF.nml b/scm/etc/case_config/MPACE_REF.nml
index d00da2ded..a67fad9f9 100644
--- a/scm/etc/case_config/MPACE_REF.nml
+++ b/scm/etc/case_config/MPACE_REF.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'MPACE_REF',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/MPACE/REF',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/RICO_MESONH.nml b/scm/etc/case_config/RICO_MESONH.nml
index 1defff18b..4e8ca78ba 100644
--- a/scm/etc/case_config/RICO_MESONH.nml
+++ b/scm/etc/case_config/RICO_MESONH.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'RICO_MESONH',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/RICO/MESONH',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/SANDU_FAST.nml b/scm/etc/case_config/SANDU_FAST.nml
index 4afa44328..51aae1115 100644
--- a/scm/etc/case_config/SANDU_FAST.nml
+++ b/scm/etc/case_config/SANDU_FAST.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'SANDU_FAST',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/SANDU/FAST',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/SANDU_REF.nml b/scm/etc/case_config/SANDU_REF.nml
index 2a6221859..61c1a5e06 100644
--- a/scm/etc/case_config/SANDU_REF.nml
+++ b/scm/etc/case_config/SANDU_REF.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'SANDU_REF',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/SANDU/REF',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/SANDU_SLOW.nml b/scm/etc/case_config/SANDU_SLOW.nml
index 2ce008174..14de37c9b 100644
--- a/scm/etc/case_config/SANDU_SLOW.nml
+++ b/scm/etc/case_config/SANDU_SLOW.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'SANDU_SLOW',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/SANDU/SLOW',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/SCMS_REF.nml b/scm/etc/case_config/SCMS_REF.nml
index 5c3a3a99d..14ec8926d 100644
--- a/scm/etc/case_config/SCMS_REF.nml
+++ b/scm/etc/case_config/SCMS_REF.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'SCMS_REF',
input_type = 1
-dt = 600.0,
-time_scheme = 1,
-n_itt_out = 1,
-n_itt_diag = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/DEPHY-SCM/SCMS/REF',
-vert_coord_data_dir = '../data/vert_coord_data',
lsm_ics = .false.,
do_spinup = .false.,
spinup_timesteps = 0,
diff --git a/scm/etc/case_config/arm_sgp_summer_1997_A.nml b/scm/etc/case_config/arm_sgp_summer_1997_A.nml
index d1efaabbb..375d0c4cb 100644
--- a/scm/etc/case_config/arm_sgp_summer_1997_A.nml
+++ b/scm/etc/case_config/arm_sgp_summer_1997_A.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'arm_sgp_summer_1997_A',
-dt = 600.0,
-time_scheme = 1,
runtime = 345600,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 1,
mom_forcing_type = 3,
relax_time = 7200.0,
@@ -22,4 +13,4 @@ month = 6,
day = 26,
hour = 23,
column_area = 2.0E9,
-$end
\ No newline at end of file
+$end
diff --git a/scm/etc/case_config/arm_sgp_summer_1997_B.nml b/scm/etc/case_config/arm_sgp_summer_1997_B.nml
index 348baa573..0ac151cc4 100644
--- a/scm/etc/case_config/arm_sgp_summer_1997_B.nml
+++ b/scm/etc/case_config/arm_sgp_summer_1997_B.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'arm_sgp_summer_1997_B',
-dt = 600.0,
-time_scheme = 1,
runtime = 432000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 1,
mom_forcing_type = 3,
relax_time = 7200.0,
@@ -22,4 +13,4 @@ month = 7,
day = 7,
hour = 23,
column_area = 2.0E9,
-$end
\ No newline at end of file
+$end
diff --git a/scm/etc/case_config/arm_sgp_summer_1997_C.nml b/scm/etc/case_config/arm_sgp_summer_1997_C.nml
index 79b4e49ed..ace0b4dd2 100644
--- a/scm/etc/case_config/arm_sgp_summer_1997_C.nml
+++ b/scm/etc/case_config/arm_sgp_summer_1997_C.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'arm_sgp_summer_1997_C',
-dt = 600.0,
-time_scheme = 1,
runtime = 432000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 1,
mom_forcing_type = 3,
relax_time = 7200.0,
@@ -22,4 +13,4 @@ month = 7,
day = 12,
hour = 23,
column_area = 2.0E9,
-$end
\ No newline at end of file
+$end
diff --git a/scm/etc/case_config/arm_sgp_summer_1997_R.nml b/scm/etc/case_config/arm_sgp_summer_1997_R.nml
index 9948335ad..c3da579ce 100644
--- a/scm/etc/case_config/arm_sgp_summer_1997_R.nml
+++ b/scm/etc/case_config/arm_sgp_summer_1997_R.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'arm_sgp_summer_1997_R',
-dt = 600.0,
-time_scheme = 1,
runtime = 345600,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 1,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/arm_sgp_summer_1997_S.nml b/scm/etc/case_config/arm_sgp_summer_1997_S.nml
index f62b1ea24..ba26818be 100644
--- a/scm/etc/case_config/arm_sgp_summer_1997_S.nml
+++ b/scm/etc/case_config/arm_sgp_summer_1997_S.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'arm_sgp_summer_1997_S',
-dt = 600.0,
-time_scheme = 1,
runtime = 345600,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 1,
mom_forcing_type = 3,
relax_time = 7200.0,
@@ -22,4 +13,4 @@ month = 6,
day = 22,
hour = 23,
column_area = 2.0E9,
-$end
\ No newline at end of file
+$end
diff --git a/scm/etc/case_config/arm_sgp_summer_1997_T.nml b/scm/etc/case_config/arm_sgp_summer_1997_T.nml
index 203047539..d68aaa82a 100644
--- a/scm/etc/case_config/arm_sgp_summer_1997_T.nml
+++ b/scm/etc/case_config/arm_sgp_summer_1997_T.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'arm_sgp_summer_1997_T',
-dt = 600.0,
-time_scheme = 1,
runtime = 259200,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 1,
mom_forcing_type = 3,
relax_time = 7200.0,
@@ -22,4 +13,4 @@ month = 6,
day = 30,
hour = 23,
column_area = 2.0E9,
-$end
\ No newline at end of file
+$end
diff --git a/scm/etc/case_config/arm_sgp_summer_1997_U.nml b/scm/etc/case_config/arm_sgp_summer_1997_U.nml
index aabed0b2e..2d599f4f8 100644
--- a/scm/etc/case_config/arm_sgp_summer_1997_U.nml
+++ b/scm/etc/case_config/arm_sgp_summer_1997_U.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'arm_sgp_summer_1997_U',
-dt = 600.0,
-time_scheme = 1,
runtime = 345600,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 1,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/arm_sgp_summer_1997_X.nml b/scm/etc/case_config/arm_sgp_summer_1997_X.nml
index 205f1a0e8..cc90d4b91 100644
--- a/scm/etc/case_config/arm_sgp_summer_1997_X.nml
+++ b/scm/etc/case_config/arm_sgp_summer_1997_X.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'arm_sgp_summer_1997_X',
-dt = 600.0,
-time_scheme = 1,
runtime = 2505600,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 1,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/astex.nml b/scm/etc/case_config/astex.nml
index 028297625..3a9e99a3b 100644
--- a/scm/etc/case_config/astex.nml
+++ b/scm/etc/case_config/astex.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'astex',
-dt = 600.0,
-time_scheme = 1,
runtime = 144000,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 2,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/bomex.nml b/scm/etc/case_config/bomex.nml
index c486ad6e6..093c31353 100644
--- a/scm/etc/case_config/bomex.nml
+++ b/scm/etc/case_config/bomex.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'bomex',
-dt = 600.0,
-time_scheme = 1,
runtime = 21600,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/default.nml b/scm/etc/case_config/default.nml
index 27b5cfe49..49f433f56 100644
--- a/scm/etc/case_config/default.nml
+++ b/scm/etc/case_config/default.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'twpice',
-dt = 600.0,
-time_scheme = 1,
runtime = 2138400,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/fv3_model_point_noah.nml b/scm/etc/case_config/fv3_model_point_noah.nml
index ca393f79f..b4761cc2f 100644
--- a/scm/etc/case_config/fv3_model_point_noah.nml
+++ b/scm/etc/case_config/fv3_model_point_noah.nml
@@ -1,15 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'fv3_model_point_noah',
-dt = 900.0,
-time_scheme = 1,
runtime = 86400,
-n_itt_out = 1,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 0,
model_ics=.true.,
mom_forcing_type = 0,
@@ -23,4 +14,3 @@ month = 10,
day = 3,
hour = 0,
$end
-
diff --git a/scm/etc/case_config/gabls3.nml b/scm/etc/case_config/gabls3.nml
index c57c7b59d..727b9eced 100644
--- a/scm/etc/case_config/gabls3.nml
+++ b/scm/etc/case_config/gabls3.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'gabls3',
-dt = 600.0,
-time_scheme = 1,
runtime = 86400,
-n_itt_out = 1,
-n_itt_diag = 6,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 2,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/gabls3_noahmp.nml b/scm/etc/case_config/gabls3_noahmp.nml
index 86efa2efd..5775d65f5 100644
--- a/scm/etc/case_config/gabls3_noahmp.nml
+++ b/scm/etc/case_config/gabls3_noahmp.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'gabls3_noahmp',
-dt = 600.0,
-time_scheme = 1,
runtime = 86400,
-n_itt_out = 1
-n_itt_diag = 6
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 2,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/gabls3_ruc.nml b/scm/etc/case_config/gabls3_ruc.nml
index b3c0c1835..a13a4dcf0 100644
--- a/scm/etc/case_config/gabls3_ruc.nml
+++ b/scm/etc/case_config/gabls3_ruc.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'gabls3_ruc',
-dt = 600.0,
-time_scheme = 1,
runtime = 86400,
-n_itt_out = 1,
-n_itt_diag = 6,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 2,
relax_time = 7200.0,
diff --git a/scm/etc/case_config/twpice.nml b/scm/etc/case_config/twpice.nml
index 35bf17559..23a5ceea0 100644
--- a/scm/etc/case_config/twpice.nml
+++ b/scm/etc/case_config/twpice.nml
@@ -1,16 +1,6 @@
$case_config
-model_name = 'FV3',
-n_columns = 1,
case_name = 'twpice',
-dt = 600.0,
-time_scheme = 1,
runtime = 2138400,
-n_itt_out = 1,
-n_itt_diag = 6,
-n_levels = 64,
-output_file = 'output',
-case_data_dir = '../data/processed_case_input',
-vert_coord_data_dir = '../data/vert_coord_data',
thermo_forcing_type = 2,
mom_forcing_type = 3,
relax_time = 7200.0,
@@ -23,4 +13,4 @@ month = 1,
day = 19,
hour = 3,
column_area = 2.0E9,
-$end
\ No newline at end of file
+$end
diff --git a/scm/src/CMakeLists.txt b/scm/src/CMakeLists.txt
index 3847ec798..45188fb32 100644
--- a/scm/src/CMakeLists.txt
+++ b/scm/src/CMakeLists.txt
@@ -155,8 +155,7 @@ ADD_DEFINITIONS(-DSCM)
#------------------------------------------------------------------------------
# Add model-specific flags for C/C++/Fortran preprocessor
-#ADD_DEFINITIONS(-DMOIST_CAPPA -DUSE_COND -DNEMS_GSM)
-ADD_DEFINITIONS(-DMOIST_CAPPA -DUSE_COND -DNEMS_GSM -DGFSL64) # add GFSL64 to use correct GFS ak and bks
+ADD_DEFINITIONS(-DMOIST_CAPPA -DUSE_COND -DNEMS_GSM)
#ADD_DEFINITIONS(-DINTERNAL_FILE_NML)
#------------------------------------------------------------------------------
diff --git a/scm/src/default_namelists.py b/scm/src/default_namelists.py
deleted file mode 100644
index d380a3835..000000000
--- a/scm/src/default_namelists.py
+++ /dev/null
@@ -1,20 +0,0 @@
-default_physics_namelists = {"SCM_csawmg":"input_csawmg.nml",
- "SCM_GSD_v1":"input_GSD_v1.nml",
- "SCM_GSD_v1nssl":"input_GSD_v1nssl.nml",
- "SCM_GFS_v15p2":"input_GFS_v15p2.nml",
- "SCM_GFS_v16":"input_GFS_v16.nml",
- "SCM_GFS_v15p2_no_nsst":"input_GFS_v15p2.nml",
- "SCM_GFS_v16_no_nsst":"input_GFS_v16.nml",
- "SCM_GFS_v15p2_RRTMGP":"input_GFS_v15p2_RRTMGP.nml",
- "SCM_GFS_v16_RRTMGP":"input_GFS_v16_RRTMGP.nml",
- "SCM_GFS_v15p2_noahmp":"input_GFS_v15p2_noahmp.nml",
- "SCM_GFS_v15p2_MYJ":"input_GFS_v15p2_MYJ.nml",
- "SCM_GFS_v15p2_FA":"input_GFS_v15p2_FA.nml",
- "SCM_GFS_v15p2_YSU":"input_GFS_v15p2_YSU.nml",
- "SCM_GFS_v15p2_saYSU":"input_GFS_v15p2_saYSU.nml",
- "SCM_GFS_v15p2_ACM":"input_GFS_v15p2_ACM.nml",
- "HAFS_v0_hwrf":"input_HAFS_v0_hwrf.nml",
- "HAFS_v0_hwrf_thompson":"input_HAFS_v0_hwrf_thompson.nml",
- "SCM_RRFS_v1alpha":"input_RRFS_v1alpha.nml",
- "SCM_RRFS_v1nssl":"input_RRFS_v1nssl_nohailnoccn.nml"
- }
diff --git a/scm/src/default_tracers.py b/scm/src/default_tracers.py
deleted file mode 100644
index 147e254b0..000000000
--- a/scm/src/default_tracers.py
+++ /dev/null
@@ -1,19 +0,0 @@
-default_tracers = {"SCM_GFS_v15p2":"tracers_GFS_v15p2.txt",
- "SCM_GFS_v16":"tracers_GFS_v16.txt",
- "SCM_GFS_v15p2_RRTMGP":"tracers_GFS_v15p2.txt",
- "SCM_GFS_v16_RRTMGP":"tracers_GFS_v16.txt",
- "SCM_csawmg":"tracers_csawmg.txt",
- "SCM_GFS_v15p2_no_nsst":"tracers_GFS_v15p2.txt",
- "SCM_GFS_v16_no_nsst":"tracers_GFS_v16.txt",
- "SCM_GFS_v15p2_noahmp":"tracers_GFS_v15p2.txt",
- "SCM_GFS_v15p2_MYJ":"tracers_GFS_v15p2.txt",
- "SCM_GSD_v1":"tracers_gsd.txt",
- "SCM_GSD_v1nssl":"tracers_gsd_nssl.txt",
- "SCM_GFS_v15p2_YSU":"tracers_GFS_v15p2.txt",
- "SCM_GFS_v15p2_saYSU":"tracers_GFS_v15p2.txt",
- "SCM_GFS_v15p2_ACM":"tracers_GFS_v15p2.txt",
- "HAFS_v0_hwrf":"tracers_HAFS_v0_hwrf.txt",
- "HAFS_v0_hwrf_thompson":"tracers_HAFS_v0_hwrf_thompson.txt",
- "SCM_RRFS_v1alpha":"tracers_RRFS_v1alpha.txt",
- "SCM_RRFS_v1nssl":"tracers_RRFS_v1nssl_nohail_noccn.txt"
- }
diff --git a/scm/src/fv_eta.h b/scm/src/fv_eta.h
new file mode 100644
index 000000000..7df22b11b
--- /dev/null
+++ b/scm/src/fv_eta.h
@@ -0,0 +1,984 @@
+!***********************************************************************
+!* GNU Lesser General Public License
+!*
+!* This file is part of the FV3 dynamical core.
+!*
+!* The FV3 dynamical core is free software: you can redistribute it
+!* and/or modify it under the terms of the
+!* GNU Lesser General Public License as published by the
+!* Free Software Foundation, either version 3 of the License, or
+!* (at your option) any later version.
+!*
+!* The FV3 dynamical core is distributed in the hope that it will be
+!* useful, but WITHOUT ANYWARRANTY; 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 Lesser General Public
+!* License along with the FV3 dynamical core.
+!* If not, see .
+!***********************************************************************
+#ifndef _FV_ETA_
+#define _FV_ETA__
+
+! -*-f90-*-*
+
+! local
+ real a24(25),b24(25) ! GFDL AM2L24
+ real a26(27),b26(27) ! Jablonowski & Williamson 26-level
+ real a32old(33),b32old(33)
+ real a32(33),b32(33)
+ real a32w(33),b32w(33)
+ real a33(34),b33(34) ! miz: grid with enhanced surface-layer resolution
+ real a47(48),b47(48)
+ real a48(49),b48(49)
+ real a50(51),b50(51) ! kyc: HRRRv3 grid
+ real a52(53),b52(53)
+ real a54(55),b54(55)
+ real a56(57),b56(57)
+ real a60(61),b60(61)
+ real a60gfs(61),b60gfs(61)
+ real a63(64),b63(64)
+ real a63meso(64),b63meso(64)
+ real a64(65),b64(65)
+ real a64gfs(65),b64gfs(65)
+ real a68(69),b68(69) ! cjg: grid with enhanced PBL resolution
+ real a96(97),b96(97) ! cjg: grid with enhanced PBL resolution
+ real a100(101),b100(101)
+ real a104(105),b104(105)
+ real a125(126),b125(126)
+
+!-----------------------------------------------
+! GFDL AM2-L24: modified by SJL at the model top
+!-----------------------------------------------
+! data a24 / 100.0000, 1050.0000, 3474.7942, 7505.5556, 12787.2428, &
+ data a24 / 100.0000, 903.4465, 3474.7942, 7505.5556, 12787.2428, &
+ 19111.3683, 21854.9274, 22884.1866, 22776.3058, 21716.1604, &
+ 20073.2963, 18110.5123, 16004.7832, 13877.6253, 11812.5452, &
+ 9865.8840, 8073.9726, 6458.0834, 5027.9899, 3784.6085, &
+ 2722.0086, 1828.9752, 1090.2396, 487.4595, 0.0000 /
+
+ data b24 / 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, &
+ 0.0000000, 0.0435679, 0.1102275, 0.1922249, 0.2817656, &
+ 0.3694997, 0.4532348, 0.5316253, 0.6038733, 0.6695556, &
+ 0.7285176, 0.7808017, 0.8265992, 0.8662148, 0.9000406, &
+ 0.9285364, 0.9522140, 0.9716252, 0.9873523, 1.0000000 /
+
+! Jablonowski & Williamson 26-level setup
+ data a26 / 219.4067, 489.5209, 988.2418, 1805.2010, 2983.7240, 4462.3340, &
+ 6160.5870, 7851.2430, 7731.2710, 7590.1310, 7424.0860, &
+ 7228.7440, 6998.9330, 6728.5740, 6410.5090, 6036.3220, &
+ 5596.1110, 5078.2250, 4468.9600, 3752.1910, 2908.9490, &
+ 2084.739, 1334.443, 708.499, 252.1360, 0.0, 0.0 /
+
+ data b26 / 0.0, 0.0, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000,&
+ 0.0000000, 0.01505309, 0.03276228, 0.05359622, 0.07810627, &
+ 0.1069411, 0.1408637, 0.1807720, 0.2277220, 0.2829562, &
+ 0.3479364, 0.4243822, 0.5143168, 0.6201202, 0.7235355, &
+ 0.8176768, 0.8962153, 0.9534761, 0.9851122, 1.0000000 /
+
+
+! High-resolution troposphere setup
+! Revised Apr 14, 2004: PINT = 245.027 mb
+ data a32old/100.00000, 400.00000, 818.60211, &
+ 1378.88653, 2091.79519, 2983.64084, &
+ 4121.78960, 5579.22148, 7419.79300, &
+ 9704.82578, 12496.33710, 15855.26306, &
+ 19839.62499, 24502.73262, 28177.10152, &
+ 29525.28447, 29016.34358, 27131.32792, &
+ 24406.11225, 21326.04907, 18221.18357, &
+ 15275.14642, 12581.67796, 10181.42843, &
+ 8081.89816, 6270.86956, 4725.35001, &
+ 3417.39199, 2317.75459, 1398.09473, &
+ 632.49506, 0.00000, 0.00000 /
+
+ data b32old/0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.01711, &
+ 0.06479, 0.13730, 0.22693, &
+ 0.32416, 0.42058, 0.51105, &
+ 0.59325, 0.66628, 0.73011, &
+ 0.78516, 0.83217, 0.87197, &
+ 0.90546, 0.93349, 0.95685, &
+ 0.97624, 0.99223, 1.00000 /
+
+! SJL June 26, 2012
+! pint= 55.7922
+ data a32/100.00000, 400.00000, 818.60211, &
+ 1378.88653, 2091.79519, 2983.64084, &
+ 4121.78960, 5579.22148, 6907.19063, &
+ 7735.78639, 8197.66476, 8377.95525, &
+ 8331.69594, 8094.72213, 7690.85756, &
+ 7139.01788, 6464.80251, 5712.35727, &
+ 4940.05347, 4198.60465, 3516.63294, &
+ 2905.19863, 2366.73733, 1899.19455, &
+ 1497.78137, 1156.25252, 867.79199, &
+ 625.59324, 423.21322, 254.76613, &
+ 115.06646, 0.00000, 0.00000 /
+
+ data b32/0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00513, &
+ 0.01969, 0.04299, 0.07477, &
+ 0.11508, 0.16408, 0.22198, &
+ 0.28865, 0.36281, 0.44112, &
+ 0.51882, 0.59185, 0.65810, &
+ 0.71694, 0.76843, 0.81293, &
+ 0.85100, 0.88331, 0.91055, &
+ 0.93338, 0.95244, 0.96828, &
+ 0.98142, 0.99223, 1.00000 /
+
+!---------------------
+! Wilson's 32L settings:
+!---------------------
+! Top changed to 0.01 mb
+ data a32w/ 1.00, 26.6378, 84.5529, 228.8592, &
+ 539.9597, 1131.7087, 2141.8082, 3712.0454, &
+ 5963.5317, 8974.1873, 12764.5388, 17294.5911, &
+ 20857.7007, 22221.8651, 22892.7202, 22891.1641, &
+ 22286.0724, 21176.0846, 19673.0671, 17889.0989, &
+ 15927.5060, 13877.6239, 11812.5474, 9865.8830, &
+ 8073.9717, 6458.0824, 5027.9893, 3784.6104, &
+ 2722.0093, 1828.9741, 1090.2397, 487.4575, &
+ 0.0000 /
+
+ data b32w/ 0.0000, 0.0000, 0.0000, 0.0000, &
+ 0.0000, 0.0000, 0.0000, 0.0000, &
+ 0.0000, 0.0000, 0.0000, 0.0000, &
+ 0.0159, 0.0586, 0.1117, 0.1734, &
+ 0.2415, 0.3137, 0.3878, 0.4619, &
+ 0.5344, 0.6039, 0.6696, 0.7285, &
+ 0.7808, 0.8266, 0.8662, 0.9000, &
+ 0.9285, 0.9522, 0.9716, 0.9874, &
+ 1.0000 /
+
+!miz
+ data a33/100.00000, 400.00000, 818.60211, &
+ 1378.88653, 2091.79519, 2983.64084, &
+ 4121.78960, 5579.22148, 6907.19063, &
+ 7735.78639, 8197.66476, 8377.95525, &
+ 8331.69594, 8094.72213, 7690.85756, &
+ 7139.01788, 6464.80251, 5712.35727, &
+ 4940.05347, 4198.60465, 3516.63294, &
+ 2905.19863, 2366.73733, 1899.19455, &
+ 1497.78137, 1156.25252, 867.79199, &
+ 625.59324, 426.21322, 264.76613, &
+ 145.06646, 60.00000, 15.00000, &
+ 0.00000 /
+
+ data b33/0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00513, &
+ 0.01969, 0.04299, 0.07477, &
+ 0.11508, 0.16408, 0.22198, &
+ 0.28865, 0.36281, 0.44112, &
+ 0.51882, 0.59185, 0.65810, &
+ 0.71694, 0.76843, 0.81293, &
+ 0.85100, 0.88331, 0.91055, &
+ 0.93331, 0.95214, 0.96750, &
+ 0.97968, 0.98908, 0.99575, &
+ 1.00000 /
+!miz
+#ifdef OLD_L47
+! QBO setting with ptop = 0.1 mb and p_full=0.17 mb; pint ~ 100 mb
+ data a47/ 10.00000, 24.45365, 48.76776, &
+ 85.39458, 133.41983, 191.01402, &
+ 257.94919, 336.63306, 431.52741, &
+ 548.18995, 692.78825, 872.16512, &
+ 1094.18467, 1368.11917, 1704.99489, &
+ 2117.91945, 2622.42986, 3236.88281, &
+ 3982.89623, 4885.84733, 5975.43260, &
+ 7286.29500, 8858.72424, 10739.43477, &
+ 12982.41110, 15649.68745, 18811.37629, &
+ 22542.71275, 25724.93857, 27314.36781, &
+ 27498.59474, 26501.79312, 24605.92991, &
+ 22130.51655, 19381.30274, 16601.56419, &
+ 13952.53231, 11522.93244, 9350.82303, &
+ 7443.47723, 5790.77434, 4373.32696, &
+ 3167.47008, 2148.51663, 1293.15510, &
+ 581.62429, 0.00000, 0.00000 /
+
+ data b47/ 0.0000, 0.0000, 0.0000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.01188, 0.04650, &
+ 0.10170, 0.17401, 0.25832, &
+ 0.34850, 0.43872, 0.52448, &
+ 0.60307, 0.67328, 0.73492, &
+ 0.78834, 0.83418, 0.87320, &
+ 0.90622, 0.93399, 0.95723, &
+ 0.97650, 0.99223, 1.00000 /
+#else
+! Oct 23, 2012
+! QBO setting with ptop = 0.1 mb, pint ~ 60 mb
+ data a47/ 10.00000, 24.45365, 48.76776, &
+ 85.39458, 133.41983, 191.01402, &
+ 257.94919, 336.63306, 431.52741, &
+ 548.18995, 692.78825, 872.16512, &
+ 1094.18467, 1368.11917, 1704.99489, &
+ 2117.91945, 2622.42986, 3236.88281, &
+ 3982.89623, 4885.84733, 5975.43260, &
+ 7019.26669, 7796.15848, 8346.60209, &
+ 8700.31838, 8878.27554, 8894.27179, &
+ 8756.46404, 8469.60171, 8038.92687, &
+ 7475.89006, 6803.68067, 6058.68992, &
+ 5285.28859, 4526.01565, 3813.00206, &
+ 3164.95553, 2589.26318, 2085.96929, &
+ 1651.11596, 1278.81205, 962.38875, &
+ 695.07046, 470.40784, 282.61654, &
+ 126.92745, 0.00000, 0.00000 /
+ data b47/ 0.0000, 0.0000, 0.0000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00267, 0.01063, 0.02393, &
+ 0.04282, 0.06771, 0.09917, &
+ 0.13786, 0.18444, 0.23925, &
+ 0.30193, 0.37100, 0.44379, &
+ 0.51695, 0.58727, 0.65236, &
+ 0.71094, 0.76262, 0.80757, &
+ 0.84626, 0.87930, 0.90731, &
+ 0.93094, 0.95077, 0.96733, &
+ 0.98105, 0.99223, 1.00000 /
+#endif
+
+ data a48/ &
+ 1.00000, 2.69722, 5.17136, &
+ 8.89455, 14.24790, 22.07157, &
+ 33.61283, 50.48096, 74.79993, &
+ 109.40055, 158.00460, 225.44108, &
+ 317.89560, 443.19350, 611.11558, &
+ 833.74392, 1125.83405, 1505.20759, &
+ 1993.15829, 2614.86254, 3399.78420, &
+ 4382.06240, 5600.87014, 7100.73115, &
+ 8931.78242, 11149.97021, 13817.16841, &
+ 17001.20930, 20775.81856, 23967.33875, &
+ 25527.64563, 25671.22552, 24609.29622, &
+ 22640.51220, 20147.13482, 17477.63530, &
+ 14859.86462, 12414.92533, 10201.44191, &
+ 8241.50255, 6534.43202, 5066.17865, &
+ 3815.60705, 2758.60264, 1870.64631, &
+ 1128.33931, 510.47983, 0.00000, &
+ 0.00000 /
+
+ data b48/ &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.01253, &
+ 0.04887, 0.10724, 0.18455, &
+ 0.27461, 0.36914, 0.46103, &
+ 0.54623, 0.62305, 0.69099, &
+ 0.75016, 0.80110, 0.84453, &
+ 0.88127, 0.91217, 0.93803, &
+ 0.95958, 0.97747, 0.99223, &
+ 1.00000 /
+
+! KYC: HRRRv3 vertical coordinate
+
+ data a50/ 2.00000000e+03, 2.46060000e+03, 2.95060000e+03, &
+ 3.47980000e+03, 4.04820000e+03, 4.65580000e+03, &
+ 5.30260000e+03, 6.00820000e+03, 6.76280000e+03, &
+ 7.56640000e+03, 8.43860000e+03, 9.62440000e+03, &
+ 1.10062000e+04, 1.23880000e+04, 1.37698000e+04, &
+ 1.51516000e+04, 1.65334000e+04, 1.79152000e+04, &
+ 1.92970000e+04, 2.06788000e+04, 2.20530309e+04, &
+ 2.33224623e+04, 2.44604680e+04, 2.56437194e+04, &
+ 2.66933976e+04, 2.76478977e+04, 2.84633440e+04, &
+ 2.90796820e+04, 2.94284494e+04, 2.94337456e+04, &
+ 2.90084684e+04, 2.80761591e+04, 2.65243296e+04, &
+ 2.42850206e+04, 2.13118800e+04, 1.81350000e+04, &
+ 1.50098730e+04, 1.20805273e+04, 9.44285062e+03, &
+ 7.15256437e+03, 5.23262695e+03, 3.68006836e+03, &
+ 2.47225500e+03, 1.57258500e+03, 8.82770078e+02, &
+ 4.33565391e+02, 1.83056641e+02, 6.24538281e+01, &
+ 1.98243750e+01, 4.87312500e+00, 0.00000000e+00 /
+
+ data b50/ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, &
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, &
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, &
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, &
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, &
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, &
+ 0.00000000e+00, 0.00000000e+00, 7.56910398e-05, &
+ 1.19937655e-03, 3.63732042e-03, 8.17080640e-03, &
+ 1.47260242e-02, 2.40950227e-02, 3.70105596e-02, &
+ 5.42691797e-02, 7.67515062e-02, 1.05608544e-01, &
+ 1.42005316e-01, 1.86608409e-01, 2.41816704e-01, &
+ 3.08309794e-01, 3.87041200e-01, 4.65850000e-01, &
+ 5.41201270e-01, 6.11654727e-01, 6.76251494e-01, &
+ 7.34434356e-01, 7.85973730e-01, 8.30899316e-01, &
+ 8.69437450e-01, 9.01954150e-01, 9.31392299e-01, &
+ 9.55484346e-01, 9.73669434e-01, 9.86635462e-01, &
+ 9.93921756e-01, 9.97991269e-01, 1.00000000e+00 /
+
+! High PBL resolution with top at 1 mb
+! SJL modified May 7, 2013 to ptop ~ 100 mb
+ data a54/100.00000, 254.83931, 729.54278, &
+ 1602.41121, 2797.50667, 4100.18977, &
+ 5334.87140, 6455.24153, 7511.80944, &
+ 8580.26355, 9714.44293, 10938.62253, &
+ 12080.36051, 12987.13921, 13692.75084, &
+ 14224.92180, 14606.55444, 14856.69953, &
+ 14991.32121, 15023.90075, 14965.91493, &
+ 14827.21612, 14616.33505, 14340.72252, &
+ 14006.94280, 13620.82849, 13187.60470, &
+ 12711.98873, 12198.27003, 11650.37451, &
+ 11071.91608, 10466.23819, 9836.44706, &
+ 9185.43852, 8515.96231, 7831.01080, &
+ 7135.14301, 6436.71659, 5749.00215, &
+ 5087.67188, 4465.67510, 3889.86419, &
+ 3361.63433, 2879.51065, 2441.02496, &
+ 2043.41345, 1683.80513, 1359.31122, &
+ 1067.09135, 804.40101, 568.62625, &
+ 357.32525, 168.33263, 0.00000, &
+ 0.00000 /
+
+ data b54/0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00180, 0.00694, 0.01510, &
+ 0.02601, 0.03942, 0.05515, &
+ 0.07302, 0.09288, 0.11459, &
+ 0.13803, 0.16307, 0.18960, &
+ 0.21753, 0.24675, 0.27716, &
+ 0.30866, 0.34115, 0.37456, &
+ 0.40879, 0.44375, 0.47935, &
+ 0.51551, 0.55215, 0.58916, &
+ 0.62636, 0.66334, 0.69946, &
+ 0.73395, 0.76622, 0.79594, &
+ 0.82309, 0.84780, 0.87020, &
+ 0.89047, 0.90876, 0.92524, &
+ 0.94006, 0.95336, 0.96529, &
+ 0.97596, 0.98551, 0.99400, &
+ 1.00000 /
+
+
+! The 56-L setup
+ data a56/ 10.00000, 24.97818, 58.01160, &
+ 115.21466, 199.29210, 309.39897, &
+ 445.31785, 610.54747, 812.28518, &
+ 1059.80882, 1363.07092, 1732.09335, &
+ 2176.91502, 2707.68972, 3334.70962, &
+ 4068.31964, 4918.76594, 5896.01890, &
+ 7009.59166, 8268.36324, 9680.41211, &
+ 11252.86491, 12991.76409, 14901.95764, &
+ 16987.01313, 19249.15733, 21689.24182, &
+ 23845.11055, 25330.63353, 26243.52467, &
+ 26663.84998, 26657.94696, 26281.61371, &
+ 25583.05256, 24606.03265, 23393.39510, &
+ 21990.28845, 20445.82122, 18811.93894, &
+ 17139.59660, 15473.90350, 13850.50167, &
+ 12294.49060, 10821.62655, 9440.57746, &
+ 8155.11214, 6965.72496, 5870.70511, &
+ 4866.83822, 3949.90019, 3115.03562, &
+ 2357.07879, 1670.87329, 1051.65120, &
+ 495.51399, 0.00000, 0.00000 /
+
+ data b56 /0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00462, 0.01769, 0.03821, &
+ 0.06534, 0.09834, 0.13659, &
+ 0.17947, 0.22637, 0.27660, &
+ 0.32929, 0.38343, 0.43791, &
+ 0.49162, 0.54361, 0.59319, &
+ 0.63989, 0.68348, 0.72391, &
+ 0.76121, 0.79545, 0.82679, &
+ 0.85537, 0.88135, 0.90493, &
+ 0.92626, 0.94552, 0.96286, &
+ 0.97840, 0.99223, 1.00000 /
+
+ data a60gfs/300.0000, 430.00000, 558.00000, &
+ 700.00000, 863.05803, 1051.07995, &
+ 1265.75194, 1510.71101, 1790.05098, &
+ 2108.36604, 2470.78817, 2883.03811, &
+ 3351.46002, 3883.05187, 4485.49315, &
+ 5167.14603, 5937.04991, 6804.87379, &
+ 7780.84698, 8875.64338, 10100.20534, &
+ 11264.35673, 12190.64366, 12905.42546, &
+ 13430.87867, 13785.88765, 13986.77987, &
+ 14047.96335, 13982.46770, 13802.40331, &
+ 13519.33841, 13144.59486, 12689.45608, &
+ 12165.28766, 11583.57006, 10955.84778, &
+ 10293.60402, 9608.08306, 8910.07678, &
+ 8209.70131, 7516.18560, 6837.69250, &
+ 6181.19473, 5552.39653, 4955.72632, &
+ 4394.37629, 3870.38682, 3384.76586, &
+ 2937.63489, 2528.37666, 2155.78385, &
+ 1818.20722, 1513.68173, 1240.03585, &
+ 994.99144, 776.23591, 581.48797, &
+ 408.53400, 255.26520, 119.70243, 0. /
+
+ data b60gfs/0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00201, 0.00792, 0.01755, &
+ 0.03079, 0.04751, 0.06761, &
+ 0.09097, 0.11746, 0.14690, &
+ 0.17911, 0.21382, 0.25076, &
+ 0.28960, 0.32994, 0.37140, &
+ 0.41353, 0.45589, 0.49806, &
+ 0.53961, 0.58015, 0.61935, &
+ 0.65692, 0.69261, 0.72625, &
+ 0.75773, 0.78698, 0.81398, &
+ 0.83876, 0.86138, 0.88192, &
+ 0.90050, 0.91722, 0.93223, &
+ 0.94565, 0.95762, 0.96827, &
+ 0.97771, 0.98608, 0.99347, 1./
+
+! NAM levels
+ data a60/200., 1311.4934, 2424.6044, 3541.7594,&
+ 4662.9584, 5790.2234, 6932.6534, 8095.3034,&
+ 9278.1734, 10501.4834, 11755.1234, 13049.2034,&
+ 14403.9434, 15809.2334, 17315.6234, 18953.4434,&
+ 20783.3534, 22815.4634, 25059.8834, 27567.1634,&
+ 30148.42896047, 32193.91776039, 33237.35176644, 33332.15200668,&
+ 32747.34688095, 31710.06232008, 30381.0344269, 28858.71577772,&
+ 27218.00439794, 25500.31691133, 23734.52294749, 21947.3406187,&
+ 20167.06984021, 18396.08144096, 16688.20978135, 15067.73749198,&
+ 13564.49530178, 12183.34512952, 10928.24869364, 9815.02787644,&
+ 8821.38325756, 7943.05793658, 7181.90985128, 6500.94645341,&
+ 5932.84856135, 5420.87683616, 4959.15585353, 4522.15047657,&
+ 4103.63596619, 3703.72540955, 3322.52525084, 2953.65688391,&
+ 2597.18532669, 2253.10764634, 1915.10585833, 1583.14516612,&
+ 1257.18953818, 937.3977544 , 623.60136981, 311.11085215,&
+ 0. /
+ data b60/0., 0., 0., 0., 0.,&
+ 0. , 0. , 0. , 0. , 0. ,&
+ 0. , 0. , 0. , 0. , 0. ,&
+ 0. , 0. , 0. , 0. , 0. ,&
+ 0.0014653 , 0.01021565, 0.0301554 , 0.06025816, 0.09756877,&
+ 0.13994493, 0.18550048, 0.23318371, 0.2819159 , 0.33120838,&
+ 0.38067633, 0.42985641, 0.47816985, 0.52569303, 0.57109611,&
+ 0.61383996, 0.6532309 , 0.68922093, 0.72177094, 0.75052515,&
+ 0.77610288, 0.79864598, 0.81813309, 0.83553022, 0.85001773,&
+ 0.86305395, 0.8747947 , 0.88589325, 0.89650986, 0.9066434 ,&
+ 0.91629284, 0.92562094, 0.93462705, 0.94331221, 0.95183659,&
+ 0.96020153, 0.96840839, 0.97645359, 0.98434181, 0.99219119, 1. /
+
+
+! This is activated by USE_GFSL63
+! Thfollowing L63 setting is the same as NCEP GFS's L64 except the top
+! 3 layers
+ data a63/64.247, 137.790, 221.958, &
+ 318.266, 428.434, 554.424, &
+ 698.457, 863.05803, 1051.07995, &
+ 1265.75194, 1510.71101, 1790.05098, &
+ 2108.36604, 2470.78817, 2883.03811, &
+ 3351.46002, 3883.05187, 4485.49315, &
+ 5167.14603, 5937.04991, 6804.87379, &
+ 7780.84698, 8875.64338, 10100.20534, &
+ 11264.35673, 12190.64366, 12905.42546, &
+ 13430.87867, 13785.88765, 13986.77987, &
+ 14047.96335, 13982.46770, 13802.40331, &
+ 13519.33841, 13144.59486, 12689.45608, &
+ 12165.28766, 11583.57006, 10955.84778, &
+ 10293.60402, 9608.08306, 8910.07678, &
+ 8209.70131, 7516.18560, 6837.69250, &
+ 6181.19473, 5552.39653, 4955.72632, &
+ 4394.37629, 3870.38682, 3384.76586, &
+ 2937.63489, 2528.37666, 2155.78385, &
+ 1818.20722, 1513.68173, 1240.03585, &
+ 994.99144, 776.23591, 581.48797, &
+ 408.53400, 255.26520, 119.70243, 0. /
+
+ data b63/0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00201, 0.00792, 0.01755, &
+ 0.03079, 0.04751, 0.06761, &
+ 0.09097, 0.11746, 0.14690, &
+ 0.17911, 0.21382, 0.25076, &
+ 0.28960, 0.32994, 0.37140, &
+ 0.41353, 0.45589, 0.49806, &
+ 0.53961, 0.58015, 0.61935, &
+ 0.65692, 0.69261, 0.72625, &
+ 0.75773, 0.78698, 0.81398, &
+ 0.83876, 0.86138, 0.88192, &
+ 0.90050, 0.91722, 0.93223, &
+ 0.94565, 0.95762, 0.96827, &
+ 0.97771, 0.98608, 0.99347, 1./
+
+ data a63meso/ 64.247, 234.14925, 444.32075, &
+ 719.10698, 1077.83197, 1545.21700, &
+ 2152.6203, 2939.37353, 3954.07197, &
+ 5255.55443, 6913.13424, 8955.12932, &
+ 10898.75012, 12137.76737, 12858.09331, &
+ 13388.26761, 13747.35846, 13951.85268, &
+ 14016.29356, 13953.82551, 13776.65318, &
+ 13496.41874, 13124.49605, 12672.19867, &
+ 12150.90036, 11572.06889, 10947.21741, &
+ 10287.78472, 9604.96173, 8909.48448, &
+ 8211.41625, 7519.94125, 6843.19133, &
+ 6188.11962, 5560.42852, 4964.55636, &
+ 4403.71643, 3879.97894, 3394.38835, &
+ 2996.77033, 2730.02573, 2530.11329, &
+ 2339.36720, 2157.57530, 1984.53745, &
+ 1820.00086, 1663.72705, 1515.43668, &
+ 1374.86622, 1241.72259, 1115.72934, &
+ 996.58895, 884.02079, 777.73138, &
+ 677.44387, 582.87349, 493.75161, &
+ 409.80694, 330.78356, 256.42688, &
+ 186.49670, 120.75560, 58.97959, 0. /
+
+ data b63meso/ 0. , 0. , 0. , &
+ 0. , 0. , 0. , &
+ 0. , 0. , 0. , &
+ 0. , 0. , 0.0005 , &
+ 0.00298, 0.00885, 0.01845, &
+ 0.03166, 0.04836, 0.06842, &
+ 0.09175, 0.1182 , 0.14759, &
+ 0.17974, 0.21438, 0.25123, &
+ 0.28997, 0.33022, 0.37157, &
+ 0.41359, 0.45584, 0.49791, &
+ 0.53936, 0.57981, 0.61894, &
+ 0.65645, 0.6921 , 0.72571, &
+ 0.75717, 0.78642, 0.81343, &
+ 0.83547, 0.85023, 0.86128, &
+ 0.8718 , 0.88182, 0.89135, &
+ 0.9004 , 0.90898, 0.91712, &
+ 0.92483, 0.93213, 0.93904, &
+ 0.94556, 0.95172, 0.95754, &
+ 0.96302, 0.96819, 0.97306, &
+ 0.97764, 0.98196, 0.98601, &
+ 0.98983, 0.99341, 0.99678, 1. /
+
+ data a64gfs/20.00000, 68.00000, 137.79000, &
+ 221.95800, 318.26600, 428.43400, &
+ 554.42400, 698.45700, 863.05803, &
+ 1051.07995, 1265.75194, 1510.71101, &
+ 1790.05098, 2108.36604, 2470.78817, &
+ 2883.03811, 3351.46002, 3883.05187, &
+ 4485.49315, 5167.14603, 5937.04991, &
+ 6804.87379, 7780.84698, 8875.64338, &
+ 9921.40745, 10760.99844, 11417.88354, &
+ 11911.61193, 12258.61668, 12472.89642, &
+ 12566.58298, 12550.43517, 12434.26075, &
+ 12227.27484, 11938.39468, 11576.46910, &
+ 11150.43640, 10669.41063, 10142.69482, &
+ 9579.72458, 8989.94947, 8382.67090, &
+ 7766.85063, 7150.91171, 6542.55077, &
+ 5948.57894, 5374.81094, 4825.99383, &
+ 4305.79754, 3816.84622, 3360.78848, &
+ 2938.39801, 2549.69756, 2194.08449, &
+ 1870.45732, 1577.34218, 1313.00028, &
+ 1075.52114, 862.90778, 673.13815, &
+ 504.22118, 354.22752, 221.32110, &
+ 103.78014, 0./
+ data b64gfs/0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00179, 0.00705, 0.01564, &
+ 0.02749, 0.04251, 0.06064, &
+ 0.08182, 0.10595, 0.13294, &
+ 0.16266, 0.19492, 0.22950, &
+ 0.26615, 0.30455, 0.34435, &
+ 0.38516, 0.42656, 0.46815, &
+ 0.50949, 0.55020, 0.58989, &
+ 0.62825, 0.66498, 0.69987, &
+ 0.73275, 0.76351, 0.79208, &
+ 0.81845, 0.84264, 0.86472, &
+ 0.88478, 0.90290, 0.91923, &
+ 0.93388, 0.94697, 0.95865, &
+ 0.96904, 0.97826, 0.98642, &
+ 0.99363, 1./
+
+ data a64/1.00000, 3.90000, 8.70000, &
+ 15.42000, 24.00000, 34.50000, &
+ 47.00000, 61.50000, 78.60000, &
+ 99.13500, 124.12789, 154.63770, &
+ 191.69700, 236.49300, 290.38000, &
+ 354.91000, 431.82303, 523.09300, &
+ 630.92800, 757.79000, 906.45000, &
+ 1079.85000, 1281.00000, 1515.00000, &
+ 1788.00000, 2105.00000, 2470.00000, &
+ 2889.00000, 3362.00000, 3890.00000, &
+ 4475.00000, 5120.00000, 5830.00000, &
+ 6608.00000, 7461.00000, 8395.00000, &
+ 9424.46289, 10574.46880, 11864.80270, &
+ 13312.58890, 14937.03710, 16759.70700, &
+ 18804.78710, 21099.41210, 23674.03710, &
+ 26562.82810, 29804.11720, 32627.31640, &
+ 34245.89840, 34722.28910, 34155.19920, &
+ 32636.50390, 30241.08200, 27101.44920, &
+ 23362.20700, 19317.05270, 15446.17090, &
+ 12197.45210, 9496.39941, 7205.66992, &
+ 5144.64307, 3240.79346, 1518.62134, &
+ 0.00000, 0.00000 /
+
+ data b64/0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00813, &
+ 0.03224, 0.07128, 0.12445, &
+ 0.19063, 0.26929, 0.35799, &
+ 0.45438, 0.55263, 0.64304, &
+ 0.71703, 0.77754, 0.82827, &
+ 0.87352, 0.91502, 0.95235, &
+ 0.98511, 1.00000 /
+
+!-->cjg
+ data a68/1.00000, 2.68881, 5.15524, &
+ 8.86683, 14.20349, 22.00278, &
+ 33.50807, 50.32362, 74.56680, &
+ 109.05958, 157.51214, 224.73844, &
+ 316.90481, 441.81219, 609.21090, &
+ 831.14537, 1122.32514, 1500.51628, &
+ 1986.94617, 2606.71274, 3389.18802, &
+ 4368.40473, 5583.41379, 7078.60015, &
+ 8903.94455, 11115.21886, 13774.60566, &
+ 16936.82070, 20340.47045, 23193.71492, &
+ 24870.36141, 25444.59363, 25252.57081, &
+ 24544.26211, 23474.29096, 22230.65331, &
+ 20918.50731, 19589.96280, 18296.26682, &
+ 17038.02866, 15866.85655, 14763.18943, &
+ 13736.83624, 12794.11850, 11930.72442, &
+ 11137.17217, 10404.78946, 9720.03954, &
+ 9075.54055, 8466.72650, 7887.12346, &
+ 7333.90490, 6805.43028, 6297.33773, &
+ 5805.78227, 5327.94995, 4859.88765, &
+ 4398.63854, 3942.81761, 3491.08449, &
+ 3043.04531, 2598.71608, 2157.94527, &
+ 1720.87444, 1287.52805, 858.02944, &
+ 432.71276, 8.10905, 0.00000 /
+
+ data b68/0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00283, 0.01590, &
+ 0.04412, 0.08487, 0.13284, &
+ 0.18470, 0.23828, 0.29120, &
+ 0.34211, 0.39029, 0.43518, &
+ 0.47677, 0.51536, 0.55091, &
+ 0.58331, 0.61263, 0.63917, &
+ 0.66333, 0.68552, 0.70617, &
+ 0.72555, 0.74383, 0.76117, &
+ 0.77765, 0.79335, 0.80838, &
+ 0.82287, 0.83693, 0.85069, &
+ 0.86423, 0.87760, 0.89082, &
+ 0.90392, 0.91689, 0.92973, &
+ 0.94244, 0.95502, 0.96747, &
+ 0.97979, 0.99200, 1.00000 /
+
+ data a96/1.00000, 2.35408, 4.51347, &
+ 7.76300, 12.43530, 19.26365, &
+ 29.33665, 44.05883, 65.28397, &
+ 95.48274, 137.90344, 196.76073, &
+ 277.45330, 386.81095, 533.37018, &
+ 727.67600, 982.60677, 1313.71685, &
+ 1739.59104, 2282.20281, 2967.26766, &
+ 3824.58158, 4888.33404, 6197.38450, &
+ 7795.49158, 9731.48414, 11969.71024, &
+ 14502.88894, 17304.52434, 20134.76139, &
+ 22536.63814, 24252.54459, 25230.65591, &
+ 25585.72044, 25539.91412, 25178.87141, &
+ 24644.84493, 23978.98781, 23245.49366, &
+ 22492.11600, 21709.93990, 20949.64473, &
+ 20225.94258, 19513.31158, 18829.32485, &
+ 18192.62250, 17589.39396, 17003.45386, &
+ 16439.01774, 15903.91204, 15396.39758, &
+ 14908.02140, 14430.65897, 13967.88643, &
+ 13524.16667, 13098.30227, 12687.56457, &
+ 12287.08757, 11894.41553, 11511.54106, &
+ 11139.22483, 10776.01912, 10419.75711, &
+ 10067.11881, 9716.63489, 9369.61967, &
+ 9026.69066, 8687.29884, 8350.04978, &
+ 8013.20925, 7677.12187, 7343.12994, &
+ 7011.62844, 6681.98102, 6353.09764, &
+ 6025.10535, 5699.10089, 5375.54503, &
+ 5053.63074, 4732.62740, 4413.38037, &
+ 4096.62775, 3781.79777, 3468.45371, &
+ 3157.19882, 2848.25306, 2541.19150, &
+ 2236.21942, 1933.50628, 1632.83741, &
+ 1334.35954, 1038.16655, 744.22318, &
+ 452.71094, 194.91899, 0.00000, &
+ 0.00000 /
+
+ data b96/0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00193, &
+ 0.00974, 0.02538, 0.04876, &
+ 0.07817, 0.11081, 0.14514, &
+ 0.18007, 0.21486, 0.24866, &
+ 0.28088, 0.31158, 0.34030, &
+ 0.36701, 0.39210, 0.41554, &
+ 0.43733, 0.45774, 0.47707, &
+ 0.49540, 0.51275, 0.52922, &
+ 0.54495, 0.56007, 0.57459, &
+ 0.58850, 0.60186, 0.61471, &
+ 0.62715, 0.63922, 0.65095, &
+ 0.66235, 0.67348, 0.68438, &
+ 0.69510, 0.70570, 0.71616, &
+ 0.72651, 0.73675, 0.74691, &
+ 0.75700, 0.76704, 0.77701, &
+ 0.78690, 0.79672, 0.80649, &
+ 0.81620, 0.82585, 0.83542, &
+ 0.84492, 0.85437, 0.86375, &
+ 0.87305, 0.88229, 0.89146, &
+ 0.90056, 0.90958, 0.91854, &
+ 0.92742, 0.93623, 0.94497, &
+ 0.95364, 0.96223, 0.97074, &
+ 0.97918, 0.98723, 0.99460, &
+ 1.00000 /
+!<--cjg
+!
+! Ultra high troposphere resolution
+ data a100/100.00000, 300.00000, 800.00000, &
+ 1762.35235, 3106.43596, 4225.71874, &
+ 4946.40525, 5388.77387, 5708.35540, &
+ 5993.33124, 6277.73673, 6571.49996, &
+ 6877.05339, 7195.14327, 7526.24920, &
+ 7870.82981, 8229.35361, 8602.30193, &
+ 8990.16936, 9393.46399, 9812.70768, &
+ 10248.43625, 10701.19980, 11171.56286, &
+ 11660.10476, 12167.41975, 12694.11735, &
+ 13240.82253, 13808.17600, 14396.83442, &
+ 15007.47066, 15640.77407, 16297.45067, &
+ 16978.22343, 17683.83253, 18415.03554, &
+ 19172.60771, 19957.34218, 20770.05022, &
+ 21559.14829, 22274.03147, 22916.87519, &
+ 23489.70456, 23994.40187, 24432.71365, &
+ 24806.25734, 25116.52754, 25364.90190, &
+ 25552.64670, 25680.92203, 25750.78675, &
+ 25763.20311, 25719.04113, 25619.08274, &
+ 25464.02630, 25254.49482, 24991.06137, &
+ 24674.32737, 24305.11235, 23884.79781, &
+ 23415.77059, 22901.76510, 22347.84738, &
+ 21759.93950, 21144.07284, 20505.73136, &
+ 19849.54271, 19179.31412, 18498.23400, &
+ 17809.06809, 17114.28232, 16416.10343, &
+ 15716.54833, 15017.44246, 14320.43478, &
+ 13627.01116, 12938.50682, 12256.11762, &
+ 11580.91062, 10913.83385, 10255.72526, &
+ 9607.32122, 8969.26427, 8342.11044, &
+ 7726.33606, 7122.34405, 6530.46991, &
+ 5950.98721, 5384.11279, 4830.01153, &
+ 4288.80090, 3760.55514, 3245.30920, &
+ 2743.06250, 2253.78294, 1777.41285, &
+ 1313.88054, 863.12371, 425.13088, &
+ 0.00000, 0.00000 /
+
+
+ data b100/0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00000, 0.00000, 0.00000, &
+ 0.00052, 0.00209, 0.00468, &
+ 0.00828, 0.01288, 0.01849, &
+ 0.02508, 0.03266, 0.04121, &
+ 0.05075, 0.06126, 0.07275, &
+ 0.08521, 0.09866, 0.11308, &
+ 0.12850, 0.14490, 0.16230, &
+ 0.18070, 0.20009, 0.22042, &
+ 0.24164, 0.26362, 0.28622, &
+ 0.30926, 0.33258, 0.35605, &
+ 0.37958, 0.40308, 0.42651, &
+ 0.44981, 0.47296, 0.49591, &
+ 0.51862, 0.54109, 0.56327, &
+ 0.58514, 0.60668, 0.62789, &
+ 0.64872, 0.66919, 0.68927, &
+ 0.70895, 0.72822, 0.74709, &
+ 0.76554, 0.78357, 0.80117, &
+ 0.81835, 0.83511, 0.85145, &
+ 0.86736, 0.88286, 0.89794, &
+ 0.91261, 0.92687, 0.94073, &
+ 0.95419, 0.96726, 0.97994, &
+ 0.99223, 1.00000 /
+
+ data a104/ &
+ 1.8827062944e-01, 7.7977549145e-01, 2.1950593583e+00, &
+ 4.9874566624e+00, 9.8041418997e+00, 1.7019717163e+01, &
+ 2.7216579591e+01, 4.0518628401e+01, 5.6749646818e+01, &
+ 7.5513868331e+01, 9.6315093333e+01, 1.1866706195e+02, &
+ 1.4216835396e+02, 1.6653733709e+02, 1.9161605772e+02, &
+ 2.1735580129e+02, 2.4379516604e+02, 2.7103771847e+02, &
+ 2.9923284173e+02, 3.2856100952e+02, 3.5922338766e+02, &
+ 3.9143507908e+02, 4.2542117983e+02, 4.6141487902e+02, &
+ 4.9965698106e+02, 5.4039638379e+02, 5.8389118154e+02, &
+ 6.3041016829e+02, 6.8023459505e+02, 7.3366009144e+02, &
+ 7.9099869949e+02, 8.5258099392e+02, 9.1875827946e+02, &
+ 9.8990486716e+02, 1.0664204381e+03, 1.1487325074e+03, &
+ 1.2372990044e+03, 1.3326109855e+03, 1.4351954993e+03, &
+ 1.5456186222e+03, 1.6644886848e+03, 1.7924597105e+03, &
+ 1.9302350870e+03, 2.0785714934e+03, 2.2382831070e+03, &
+ 2.4102461133e+03, 2.5954035462e+03, 2.7947704856e+03, &
+ 3.0094396408e+03, 3.2405873512e+03, 3.4894800360e+03, &
+ 3.7574811281e+03, 4.0460585279e+03, 4.3567926151e+03, &
+ 4.6913848588e+03, 5.0516670674e+03, 5.4396113207e+03, &
+ 5.8573406270e+03, 6.3071403487e+03, 6.7914704368e+03, &
+ 7.3129785102e+03, 7.8745138115e+03, 8.4791420557e+03, &
+ 9.1301611750e+03, 9.8311179338e+03, 1.0585825354e+04, &
+ 1.1398380836e+04, 1.2273184781e+04, 1.3214959424e+04, &
+ 1.4228767429e+04, 1.5320029596e+04, 1.6494540743e+04, &
+ 1.7758482452e+04, 1.9118430825e+04, 2.0422798801e+04, &
+ 2.1520147587e+04, 2.2416813461e+04, 2.3118184510e+04, &
+ 2.3628790785e+04, 2.3952411814e+04, 2.4092209011e+04, &
+ 2.4050892106e+04, 2.3830930156e+04, 2.3434818358e+04, &
+ 2.2865410898e+04, 2.2126326004e+04, 2.1222420323e+04, &
+ 2.0160313690e+04, 1.8948920926e+04, 1.7599915822e+04, &
+ 1.6128019809e+04, 1.4550987232e+04, 1.2889169132e+04, &
+ 1.1164595563e+04, 9.4227665517e+03, 7.7259097899e+03, &
+ 6.1538244381e+03, 4.7808126007e+03, 3.5967415552e+03, &
+ 2.5886394104e+03, 1.7415964865e+03, 1.0393721271e+03, &
+ 4.6478852032e+02, 7.0308342481e-13, 0.0000000000e+00 /
+
+
+ data b104/ &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
+ 0.0000000000e+00, 0.0000000000e+00, 1.5648447298e-03, &
+ 6.2617046389e-03, 1.4104157933e-02, 2.5118187415e-02, &
+ 3.9340510972e-02, 5.6816335609e-02, 7.7596328431e-02, &
+ 1.0173255472e-01, 1.2927309709e-01, 1.6025505622e-01, &
+ 1.9469566981e-01, 2.3258141217e-01, 2.7385520518e-01, &
+ 3.1840233814e-01, 3.6603639170e-01, 4.1648734767e-01, &
+ 4.6939496013e-01, 5.2431098738e-01, 5.8071350676e-01, &
+ 6.3803478105e-01, 6.9495048840e-01, 7.4963750338e-01, &
+ 7.9975208897e-01, 8.4315257576e-01, 8.8034012292e-01, &
+ 9.1184389721e-01, 9.3821231526e-01, 9.6000677644e-01, &
+ 9.7779792223e-01, 9.9216315122e-01, 1.0000000000e+00 /
+
+! IFS-like L125(top 12 levels removed from IFSL137)
+ data a125/ 64., &
+ 86.895882, 107.415741, 131.425507, 159.279404, 191.338562, &
+ 227.968948, 269.539581, 316.420746, 368.982361, 427.592499, 492.616028, &
+ 564.413452, 643.339905, 729.744141, 823.967834, 926.344910, 1037.201172, &
+ 1156.853638, 1285.610352, 1423.770142, 1571.622925, 1729.448975, 1897.519287, &
+ 2076.095947, 2265.431641, 2465.770508, 2677.348145, 2900.391357, 3135.119385, &
+ 3381.743652, 3640.468262, 3911.490479, 4194.930664, 4490.817383, 4799.149414, &
+ 5119.895020, 5452.990723, 5798.344727, 6156.074219, 6526.946777, 6911.870605, &
+ 7311.869141, 7727.412109, 8159.354004, 8608.525391, 9076.400391, 9562.682617, &
+ 10065.978516, 10584.631836, 11116.662109, 11660.067383, 12211.547852, 12766.873047, &
+ 13324.668945, 13881.331055, 14432.139648, 14975.615234, 15508.256836, 16026.115234, &
+ 16527.322266, 17008.789063, 17467.613281, 17901.621094, 18308.433594, 18685.718750, &
+ 19031.289063, 19343.511719, 19620.042969, 19859.390625, 20059.931641, 20219.664063, &
+ 20337.863281, 20412.308594, 20442.078125, 20425.718750, 20361.816406, 20249.511719, &
+ 20087.085938, 19874.025391, 19608.572266, 19290.226563, 18917.460938, 18489.707031, &
+ 18006.925781, 17471.839844, 16888.687500, 16262.046875, 15596.695313, 14898.453125, &
+ 14173.324219, 13427.769531, 12668.257813, 11901.339844, 11133.304688, 10370.175781, &
+ 9617.515625, 8880.453125, 8163.375000, 7470.343750, 6804.421875, 6168.531250, &
+ 5564.382813, 4993.796875, 4457.375000, 3955.960938, 3489.234375, 3057.265625, &
+ 2659.140625, 2294.242188, 1961.500000, 1659.476563, 1387.546875, 1143.250000, &
+ 926.507813, 734.992188, 568.062500, 424.414063, 302.476563, 202.484375, &
+ 122.101563, 62.781250, 22.835938, 3.757813, 0.000000, 0.000000 /
+
+ data b125/ 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
+ 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
+ 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
+ 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
+ 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
+ 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
+ 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
+ 0.000000, 0.000007, 0.000024, 0.000059, 0.000112, 0.000199, &
+ 0.000340, 0.000562, 0.000890, 0.001353, 0.001992, 0.002857, &
+ 0.003971, 0.005378, 0.007133, 0.009261, 0.011806, 0.014816, &
+ 0.018318, 0.022355, 0.026964, 0.032176, 0.038026, 0.044548, &
+ 0.051773, 0.059728, 0.068448, 0.077958, 0.088286, 0.099462, &
+ 0.111505, 0.124448, 0.138313, 0.153125, 0.168910, 0.185689, &
+ 0.203491, 0.222333, 0.242244, 0.263242, 0.285354, 0.308598, &
+ 0.332939, 0.358254, 0.384363, 0.411125, 0.438391, 0.466003, &
+ 0.493800, 0.521619, 0.549301, 0.576692, 0.603648, 0.630036, &
+ 0.655736, 0.680643, 0.704669, 0.727739, 0.749797, 0.770798, &
+ 0.790717, 0.809536, 0.827256, 0.843881, 0.859432, 0.873929, &
+ 0.887408, 0.899900, 0.911448, 0.922096, 0.931881, 0.940860, &
+ 0.949064, 0.956550, 0.963352, 0.969513, 0.975078, 0.980072, &
+ 0.984542, 0.988500, 0.991984, 0.995003, 0.997630, 1.000000 /
+
+
+
+#endif _FV_ETA_
diff --git a/scm/src/multi_run_scm.py b/scm/src/multi_run_scm.py
index ee7ab7528..59df6921d 100755
--- a/scm/src/multi_run_scm.py
+++ b/scm/src/multi_run_scm.py
@@ -6,13 +6,17 @@
import os
import logging
import subprocess
-from supported_suites import suites
+from suite_info import suite, suite_list
from supported_cases import cases
import timeit, functools
# Name of the python runscript executable to run, including path (relative to run dir)
RUN_SCRIPT = './run_scm.py'
+# which suites in suite_info to use when running through suites
+SUITE_CHOICE = 'supported'
+#SUITE_CHOIE = 'all'
+
# number of realizations to time if timer is used
timer_iterations = 1
@@ -29,6 +33,15 @@
parser.add_argument('-t', '--timer', help='set to time each subprocess', action='store_true', default=False)
parser.add_argument('-d', '--docker', help='include if scm is being run in a docker container to mount volumes', action='store_true', default=False)
parser.add_argument('--runtime', help='set the runtime in the namelists', action='store', required=False)
+parser.add_argument('--runtime_mult', help='multiply the existing runtime in the namelist by some factor', action='store', required=False)
+parser.add_argument('-l', '--levels', help='number of vertical levels', required=False)
+parser.add_argument('--npz_type', help='type of FV3 vertical grid to produce (see scm_vgrid.F90 for valid values)', required=False)
+parser.add_argument('--run_dir', help='path for the run directory', required=False)
+parser.add_argument('--vert_coord_file', help='filename with coefficients to produce a vertical grid', required=False)
+parser.add_argument('--case_data_dir', help='directory containing the case input data netCDF file', required=False)
+parser.add_argument('--n_itt_out', help='period of instantaneous output (number of timesteps)', required=False, type=int)
+parser.add_argument('--n_itt_diag', help='period of diagnostic output (number of timesteps)', required=False, type=int)
+parser.add_argument('-dt', '--timestep', help='timestep (s)', required=False, type=float)
# Results are recorded in this global list (to avoid complications with getting return values from the partial functions used below)
RESULTS = []
@@ -87,32 +100,67 @@ def main():
args = parser.parse_args()
setup_logging(args.verbose)
-
+
+ passthrough_args = ''
+ if args.levels:
+ passthrough_args += ' -l ' + args.levels
+ if args.npz_type:
+ if args.npz_type == 'input':
+ if args.vert_coord_file:
+ passthrough_args += ' --npz_type ' + args.npz_type + ' --vert_coord_file ' + args.vert_coord_file
+ else:
+ message = 'The npz_type was set to \'input\' but no file was specified via --vert_coord_file. Please specify the name of the file via --vert_coord_file name_of_file'
+ logging.critical(message)
+ raise Exception(message)
+ else:
+ passthrough_args += ' --npz_type ' + args.npz_type
+ if args.case_data_dir:
+ passthrough_args += ' --case_data_dir ' + args.case_data_dir
+ if args.docker:
+ passthrough_args += ' -d'
+ if args.runtime:
+ passthrough_args += ' --runtime ' + args.runtime
+ if args.runtime_mult:
+ passthrough_args += ' --runtime_mult ' + args.runtime_mult
+ if args.run_dir:
+ passthrough_args += ' --run_dir ' + args.run_dir
+ if args.n_itt_out:
+ passthrough_args += ' --n_itt_out ' + args.n_itt_out
+ if args.n_itt_diag:
+ passthrough_args += ' --n_itt_diag ' + args.n_itt_diag
+ if args.timestep:
+ passthrough_args += ' -dt ' + args.timestep
+
# if the case argument is specified, run through all supported suites with the specified case
- if args.case:
- logging.info('Running all supported suites with case {0}'.format(args.case))
- for i, suite in enumerate(suites,1):
- command = RUN_SCRIPT + ' -c ' + args.case + ' -s ' + suite
- if args.docker:
- command = command + ' -d'
- # If modifying the runtime, pass the -runtime argument to the RUN_SCRIPT
- if args.runtime:
- command = command + ' --runtime ' + args.runtime
- logging.info('Executing process {0} of {1} ({2})'.format(i, len(suites), command))
- elapsed_time = spawn_subprocess(command, args.timer)
- if args.timer:
- logging.info('elapsed time: {0} s for case: {1} suite: {2}'\
- .format(elapsed_time/timer_iterations, args.case, suite))
+ if args.case:
+ n_suites = 0
+ if SUITE_CHOICE == 'supported':
+ logging.info('Running all supported suites in suite_info list with case {0}'.format(args.case))
+ for s in suite_list:
+ if s._supported:
+ n_suites += 1
+ else:
+ logging.info('Running all suites in suite_info list with case {0}'.format(args.case))
+ n_suites = len(suite_list)
+
+ if passthrough_args != '':
+ logging.info('Using passthrough args: {}'.format(passthrough_args))
+ for i, s in enumerate(suite_list,1):
+ if SUITE_CHOICE == 'all' or (SUITE_CHOICE == 'supported' and s._supported):
+ command = RUN_SCRIPT + ' -c ' + args.case + ' -s ' + s._name + passthrough_args
+ logging.info('Executing process {0} of {1} ({2})'.format(i, n_suites, command))
+ elapsed_time = spawn_subprocess(command, args.timer)
+ if args.timer:
+ logging.info('elapsed time: {0} s for case: {1} suite: {2}'\
+ .format(elapsed_time/timer_iterations, args.case, s._name))
# if the suite argument is specified, run through all supported cases with the specified suite
if args.suite:
logging.info('Running all supported cases with suite {0}'.format(args.suite))
+ if passthrough_args != '':
+ logging.info('Using passthrough args: {}'.format(passthrough_args))
for i, case in enumerate(cases,1):
- command = RUN_SCRIPT + ' -c ' + case + ' -s ' + args.suite
- if args.docker:
- command = command + ' -d'
- if args.runtime:
- command = command + ' --runtime ' + args.runtime
+ command = RUN_SCRIPT + ' -c ' + case + ' -s ' + args.suite + passthrough_args
logging.info('Executing process {0} of {1} ({2})'.format(i, len(cases), command))
elapsed_time = spawn_subprocess(command, args.timer)
if args.timer:
@@ -155,12 +203,10 @@ def main():
if scm_runs.cases and not scm_runs.suites and not scm_runs.namelists:
logging.info(
'Only cases were specified in {0}, so running all cases with the default suite'.format(args.file))
+ if passthrough_args != '':
+ logging.info('Using passthrough args: {}'.format(passthrough_args))
for i, case in enumerate(scm_runs.cases,1):
- command = RUN_SCRIPT + ' -c ' + case
- if args.docker:
- command = command + ' -d'
- if args.runtime:
- command = command + ' --runtime ' + args.runtime
+ command = RUN_SCRIPT + ' -c ' + case + passthrough_args
logging.info('Executing process {0} of {1} ({2})'.format(i, len(scm_runs.cases), command))
elapsed_time = spawn_subprocess(command, args.timer)
if args.timer:
@@ -172,13 +218,11 @@ def main():
if len(scm_runs.suites) == 1:
logging.info('Cases and namelists were specified with 1 suite in {0}, so running all cases with '\
'the suite {1} for all specified namelists'.format(args.file, scm_runs.suites[0]))
+ if passthrough_args != '':
+ logging.info('Using passthrough args: {}'.format(passthrough_args))
for i, case in enumerate(scm_runs.cases):
for j, namelist in enumerate(scm_runs.namelists,1):
- command = RUN_SCRIPT + ' -c ' + case + ' -s ' + scm_runs.suites[0] + ' -n ' + namelist
- if args.docker:
- command = command + ' -d'
- if args.runtime:
- command = command + ' --runtime ' + args.runtime
+ command = RUN_SCRIPT + ' -c ' + case + ' -s ' + scm_runs.suites[0] + ' -n ' + namelist + passthrough_args
logging.info('Executing process {0} of {1} ({2})'.format(
len(scm_runs.namelists)*i+j, len(scm_runs.cases)*len(scm_runs.namelists), command))
elapsed_time = spawn_subprocess(command, args.timer)
@@ -188,13 +232,11 @@ def main():
elif len(scm_runs.suites) == len(scm_runs.namelists):
logging.info('Cases, suites, and namelists were specified in {0}, so running all cases with all '\
'suites, matched with namelists by order'.format(args.file))
+ if passthrough_args != '':
+ logging.info('Using passthrough args: {}'.format(passthrough_args))
for i, case in enumerate(scm_runs.cases):
for j, suite in enumerate(scm_runs.suites,1):
- command = RUN_SCRIPT + ' -c ' + case + ' -s ' + suite + ' -n ' + scm_runs.namelists[j-1]
- if args.docker:
- command = command + ' -d'
- if args.runtime:
- command = command + ' --runtime ' + args.runtime
+ command = RUN_SCRIPT + ' -c ' + case + ' -s ' + suite + ' -n ' + scm_runs.namelists[j-1] + passthrough_args
logging.info('Executing process {0} of {1} ({2})'.format(
len(scm_runs.suites)*i+j, len(scm_runs.cases)*len(scm_runs.suites), command))
elapsed_time = spawn_subprocess(command, args.timer)
@@ -210,13 +252,11 @@ def main():
else:
logging.info('Cases and suites specified in {0}, so running all cases with all suites using default '\
'namelists for each suite'.format(args.file))
+ if passthrough_args != '':
+ logging.info('Using passthrough args: {}'.format(passthrough_args))
for i, case in enumerate(scm_runs.cases):
for j, suite in enumerate(scm_runs.suites,1):
- command = RUN_SCRIPT + ' -c ' + case + ' -s ' + suite
- if args.docker:
- command = command + ' -d'
- if args.runtime:
- command = command + ' --runtime ' + args.runtime
+ command = RUN_SCRIPT + ' -c ' + case + ' -s ' + suite + passthrough_args
logging.info('Executing process {0} of {1} ({2})'.format(
len(scm_runs.suites)*i+j, len(scm_runs.cases)*len(scm_runs.suites), command))
elapsed_time = spawn_subprocess(command, args.timer)
@@ -227,13 +267,11 @@ def main():
if scm_runs.cases and not scm_runs.suites and scm_runs.namelists:
logging.info('Cases and namelists were specified in {0}, so running all cases with the default suite '\
'using the list of namelists'.format(args.file))
+ if passthrough_args != '':
+ logging.info('Using passthrough args: {}'.format(passthrough_args))
for i, case in enumerate(scm_runs.cases):
for j, namelist in enumerate(scm_runs.namelists,1):
- command = RUN_SCRIPT + ' -c ' + case + ' -n ' + namelist
- if args.docker:
- command = command + ' -d'
- if args.runtime:
- command = command + ' --runtime ' + args.runtime
+ command = RUN_SCRIPT + ' -c ' + case + ' -n ' + namelist + passthrough_args
logging.info('Executing process {0} of {1} ({2})'.format(
len(scm_runs.namelists)*i+j, len(scm_runs.cases)*len(scm_runs.namelists), command))
elapsed_time = spawn_subprocess(command, args.timer)
@@ -243,21 +281,30 @@ def main():
# If running the script with no arguments, run all supported (case,suite) permutations.
if not args.case and not args.suite and not args.file:
- logging.info('Since no arguments were specified, running through all permuatations of supported cases and '\
- 'suites')
+ n_suites = 0
+ if SUITE_CHOICE == 'supported':
+ logging.info('Since no arguments were specified, running through all permuatations of supported cases and '\
+ 'supported suites in suite_info.')
+ if passthrough_args != '':
+ logging.info('Using passthrough args: {}'.format(passthrough_args))
+ for s in suite_list:
+ if s._supported:
+ n_suites += 1
+ else:
+ logging.info('Since no arguments were specified, running through all permuatations of supported cases and '\
+ 'all suites in suite_info')
+ n_suites = len(suite_list)
+
for i, case in enumerate(cases):
- for j, suite in enumerate(suites,1):
- command = RUN_SCRIPT + ' -c ' + case + ' -s ' + suite
- if args.docker:
- command = command + ' -d'
- if args.runtime:
- command = command + ' --runtime ' + args.runtime
- logging.info('Executing process {0} of {1} ({2})'.format(
- len(suites)*i+j, len(cases)*len(suites), command))
- elapsed_time = spawn_subprocess(command, args.timer)
- if args.timer:
- logging.info('elapsed time: {0} s for case: {1} suite: {2}'\
- .format(elapsed_time/timer_iterations, case, suite))
+ for j, s in enumerate(suite_list,1):
+ if SUITE_CHOICE == 'all' or (SUITE_CHOICE == 'supported' and s._supported):
+ command = RUN_SCRIPT + ' -c ' + case + ' -s ' + s._name + passthrough_args
+ logging.info('Executing process {0} of {1} ({2})'.format(
+ n_suites*i+j, len(cases)*n_suites, command))
+ elapsed_time = spawn_subprocess(command, args.timer)
+ if args.timer:
+ logging.info('elapsed time: {0} s for case: {1} suite: {2}'\
+ .format(elapsed_time/timer_iterations, case, s._name))
# Generate report at the end of the log file when verbose flag is set
if args.verbose > 0:
diff --git a/scm/src/run_scm.py b/scm/src/run_scm.py
index b3ed25354..6e67ca056 100755
--- a/scm/src/run_scm.py
+++ b/scm/src/run_scm.py
@@ -9,44 +9,73 @@
import subprocess
import sys
import time
-from default_namelists import default_physics_namelists
-from default_tracers import default_tracers
+from suite_info import suite, suite_list
from netCDF4 import Dataset
###############################################################################
# Global settings #
###############################################################################
-# Name of the Fortran executable to run, including path (relative to run dir)
-EXECUTABLE = './scm'
+SCM_ROOT = ''
+SCM_RUN = ''
+SCM_BIN = ''
+EXECUTABLE = ''
-# Path to the directory containing experiment namelists (relative to run dir)
-CASE_NAMELIST_DIR = '../etc/case_config'
+# Name of the Fortran executable to run, including path
+EXECUTABLE_NAME = 'scm'
-# Path to the directory containing tracer configurations (relative to run dir)
-TRACERS_DIR = '../etc/tracer_config'
+# Path to default run directory (relative to scm_root)
+DEFAULT_RUN_DIR = 'scm/run'
+
+# Path to default bin directory (relative to scm_root)
+DEFAULT_BIN_DIR = 'scm/bin'
+
+# Copy executable to run directory if true (otherwise it will be linked)
+COPY_EXECUTABLE = False
+
+# Default output periods
+DEFAULT_OUTPUT_PERIOD = 1
+DEFAULT_DIAG_PERIOD = 6
+
+# Path to the directory containing experiment namelists (relative to scm_root)
+CASE_NAMELIST_DIR = 'scm/etc/case_config'
+
+# Path to the directory containing case input data files (relative to scm_root)
+DEFAULT_CASE_DATA_DIR = 'scm/data/processed_case_input'
+
+# Path to the directory containing vertical coordinate files (relative to scm_root)
+VERT_COORD_DATA_DIR = 'scm/data/vert_coord_data'
+
+# Path to reference profiles
+REFERENCE_PROFILE_DIR = DEFAULT_CASE_DATA_DIR
+
+# Reference profile file list
+REFERENCE_PROFILE_FILE_LIST = ['McCProfiles.dat','mid_lat_summer_std.nc']
+
+# Path to the directory containing tracer configurations (relative to scm_root)
+TRACERS_DIR = 'scm/etc/tracer_config'
TRACERS_LINK = 'tracers.txt'
# Standard name of experiment namelist in run directory, must match value in scm_input.f90
STANDARD_EXPERIMENT_NAMELIST = 'input_experiment.nml'
-# Path to the directory containing physics namelists (relative to run dir)
-PHYSICS_NAMELIST_DIR = '../../ccpp/physics_namelists'
+# Path to the directory containing physics namelists (relative to scm_root)
+PHYSICS_NAMELIST_DIR = 'ccpp/physics_namelists'
-# Path to the directory containing physics namelists (relative to run dir)
-PHYSICS_SUITE_DIR = '../../ccpp/suites'
+# Path to the directory containing physics namelists (relative to scm_root)
+PHYSICS_SUITE_DIR = 'ccpp/suites'
# Default suite to use if none is specified
DEFAULT_SUITE = 'SCM_GFS_v15p2'
-# Path to physics data files
-PHYSICS_DATA_DIR = '../data/physics_input_data'
+# Path to physics data files (relative to scm_root)
+PHYSICS_DATA_DIR = 'scm/data/physics_input_data'
-# Path to analysis script
-SCM_ANALYSIS_SCRIPT_DIR = '../etc/scripts'
+# Path to analysis script (relative to scm_root)
+SCM_ANALYSIS_SCRIPT_DIR = 'scm/etc/scripts'
-# Path to analysis script configuration files
-SCM_ANALYSIS_CONFIG_DIR = '../etc/scripts/plot_configs'
+# Path to analysis script configuration files (relative to scm_root)
+SCM_ANALYSIS_CONFIG_DIR = 'scm/etc/scripts/plot_configs'
# Default settings and filenames of input data for ozone physics;
# these must match the default settings in GFS_typedefs.F90.
@@ -76,7 +105,16 @@
parser.add_argument('-n', '--namelist', help='physics namelist to use')
parser.add_argument('-t', '--tracers', help='tracer configuration to use')
parser.add_argument('--runtime', help='set the runtime in the namelists', action='store', type=int, required=False)
+parser.add_argument('--runtime_mult', help='multiply the existing runtime in the namelist by some factor', action='store', type=float, required=False)
parser.add_argument('-d', '--docker', help='include if scm is being run in a docker container to mount volumes', action='store_true', default=False)
+parser.add_argument('-l', '--levels', help='number of vertical levels', required=False, type=int)
+parser.add_argument('--npz_type', help='type of FV3 vertical grid to produce (see scm_vgrid.F90 for valid values)', required=False)
+parser.add_argument('--vert_coord_file', help='filename with coefficients to produce a vertical grid', required=False)
+parser.add_argument('--run_dir', help='path for the run directory', required=False)
+parser.add_argument('--case_data_dir', help='directory containing the case input data netCDF file', required=False)
+parser.add_argument('--n_itt_out', help='period of instantaneous output (number of timesteps)', required=False, type=int)
+parser.add_argument('--n_itt_diag', help='period of diagnostic output (number of timesteps)', required=False, type=int)
+parser.add_argument('-dt', '--timestep', help='timestep (s)', required=False, type=float)
###############################################################################
# Functions and subroutines #
@@ -116,7 +154,17 @@ def parse_arguments():
docker = args.docker
tracers = args.tracers
runtime = args.runtime
- return (case, gdb, suite, namelist, docker, tracers, runtime)
+ runtime_mult = args.runtime_mult
+ levels = args.levels
+ npz_type = args.npz_type
+ vert_coord_file = args.vert_coord_file
+ case_data_dir = args.case_data_dir
+ n_itt_out = args.n_itt_out
+ n_itt_diag = args.n_itt_diag
+ run_dir = args.run_dir
+ timestep = args.timestep
+
+ return (case, gdb, suite, namelist, docker, tracers, runtime, runtime_mult, levels, npz_type, vert_coord_file, case_data_dir, n_itt_out, n_itt_diag, run_dir, timestep)
def find_gdb():
"""Detect gdb, abort if not found"""
@@ -133,53 +181,34 @@ def find_gdb():
class Experiment(object):
- def __init__(self, case, suite, physics_namelist, tracers, runtime):
+ def __init__(self, case, suite, runtime, runtime_mult, levels, npz_type, vert_coord_file, case_data_dir, n_itt_out, n_itt_diag):
"""Initialize experiment. This routine does most of the work,
including setting and checking the experiment configuration
(namelist)."""
self._case = case
- self._suite = suite
- self._name = case + '_' + suite
-
- #if a physics namelist is specified (entire filename), it will be used;
- #otherwise, a default physics namelist for the given suite is used from default_namelists.py
- if physics_namelist:
- self._physics_namelist = physics_namelist
- else:
- if self._suite in default_physics_namelists:
- self._physics_namelist = default_physics_namelists.get(self._suite)
- else:
- message = 'A default physics namelist for suite {0} is not found in default_namelists.py'.format(self._suite)
- logging.critical(message)
- raise Exception(message)
+ self._suite_obj = suite
+ self._suite = suite._name
+ self._name = case + '_' + suite._name
+ self._physics_namelist = suite.namelist
+
#check to see that the physics namelists exists in the right dir
- if not os.path.isfile(os.path.join(PHYSICS_NAMELIST_DIR, self._physics_namelist)):
- message = 'The physics namelist {0} was not found'.format(os.path.join(PHYSICS_NAMELIST_DIR, self._physics_namelist))
+ if not os.path.isfile(os.path.join(SCM_ROOT, PHYSICS_NAMELIST_DIR, self._physics_namelist)):
+ message = 'The physics namelist {0} was not found'.format(os.path.join(SCM_ROOT, PHYSICS_NAMELIST_DIR, self._physics_namelist))
logging.critical(message)
raise Exception(message)
- #if a tracer configuration is specified (entire filename), it will be used;
- #otherwise, a default tracer configuration for the given suite is used from default_tracers.py
- if tracers:
- self._tracers = tracers
- else:
- if self._suite in default_tracers:
- self._tracers = default_tracers.get(self._suite)
- else:
- message = 'A default tracer configuration for suite {0} is not found in default_tracers.py'.format(self._suite)
- logging.critical(message)
- raise Exception(message)
+ self._tracers = suite.tracers
- #check to see that the physics namelists exists in the right dir
- if not os.path.isfile(os.path.join(TRACERS_DIR, self._tracers)):
+ #check to see that the tracers exists in the right dir
+ if not os.path.isfile(os.path.join(SCM_ROOT, TRACERS_DIR, self._tracers)):
message = 'The tracer configuration {0} was not found'.format(os.path.join(TRACERS_DIR, self._tracers))
logging.critical(message)
raise Exception(message)
#check to see if the case namelists exists in the right dir
- self._namelist = os.path.join(CASE_NAMELIST_DIR, self._case + '.nml')
+ self._namelist = os.path.join(SCM_ROOT, CASE_NAMELIST_DIR, self._case + '.nml')
if not os.path.isfile(self._namelist):
message = 'Experiment {0} with namelist {1} not found'.format(self._name, self._namelist)
logging.critical(message)
@@ -193,7 +222,72 @@ def __init__(self, case, suite, physics_namelist, tracers, runtime):
self._runtime = None
message = 'Namelist runtime adjustment {0} IS NOT applied'.format(self._runtime)
logging.info(message)
-
+
+ if runtime_mult:
+ self._runtime_mult = runtime_mult
+ message = 'Existing case namelist runtime multiplied by {0}'.format(self._runtime_mult)
+ logging.info(message)
+ else:
+ self._runtime_mult = None
+
+ if levels:
+ self._levels = levels
+ message = 'The number of vertical levels is set to {0}'.format(self._levels)
+ logging.info(message)
+ else:
+ self._levels = None
+ message = 'The number of vertical levels contained in the case configuration file is used if present, otherwise the default value in scm_input.F90 is used.'
+ logging.info(message)
+
+ if npz_type:
+ self._npz_type = npz_type
+ message = 'The npz_type of vertical levels is set to {0}'.format(self._npz_type)
+ logging.info(message)
+ if npz_type == 'input':
+ if vert_coord_file:
+ self._vert_coord_file = vert_coord_file
+ #check to see that the vert coords file exists in the right dir
+ if not os.path.isfile(os.path.join(SCM_ROOT, VERT_COORD_DATA_DIR, self._vert_coord_file)):
+ message = 'The vertical coordinate file {0} was not found'.format(os.path.join(SCM_ROOT, VERT_COORD_DATA_DIR, self._vert_coord_file))
+ logging.critical(message)
+ raise Exception(message)
+ else:
+ message = 'The npz_type was set to \'input\' but no file was specified via --vert_coord_file. Please specify the name of the file via --vert_coord_file name_of_file'
+ logging.critical(message)
+ raise Exception(message)
+ else:
+ self._vert_coord_file = None
+ else:
+ self._npz_type = None
+ self._vert_coord_file = None
+ message = 'The npz_type contained in the case configuration file is used if present, otherwise the default value in scm_input.F90 is used.'
+ logging.info(message)
+
+ if case_data_dir:
+ self._case_data_dir = case_data_dir
+ else:
+ self._case_data_dir = DEFAULT_CASE_DATA_DIR
+ #check to see that the provided case data directory exists
+ if not os.path.isdir(os.path.join(SCM_ROOT, self._case_data_dir)):
+ message = 'The case data directory {0} was not found'.format(self._case_data_dir)
+ logging.critical(message)
+ raise Exception(message)
+
+ if n_itt_out:
+ self._n_itt_out = n_itt_out
+ else:
+ self._n_itt_out = DEFAULT_OUTPUT_PERIOD
+
+ if n_itt_diag:
+ self._n_itt_diag = n_itt_diag
+ else:
+ self._n_itt_diag = DEFAULT_DIAG_PERIOD
+
+ if suite.timestep is not None:
+ self._timestep = suite.timestep
+ else:
+ self._timestep = None
+
@property
def name(self):
"""Get the name of the experiment."""
@@ -243,7 +337,77 @@ def physics_namelist(self):
def physics_namelist(self, value):
"""Set the physics namelist of the experiment."""
self._physics_namelist = value
-
+
+ @property
+ def tracers(self):
+ """Get the tracer file for the experiment."""
+ return self._tracers
+
+ @tracers.setter
+ def tracers(self, value):
+ """Set the tracer file for the experiment."""
+ self._tracers = value
+
+ @property
+ def levels(self):
+ """Get the number of vertical levels for the experiment."""
+ return self._levels
+
+ @levels.setter
+ def levels(self, value):
+ """Set the number of vertical levels for the experiment."""
+ self._levels = value
+
+ @property
+ def npz_type(self):
+ """Get the vertical level type for the experiment."""
+ return self._npz_type
+
+ @npz_type.setter
+ def npz_type(self, value):
+ """Set the vertical level type for the experiment."""
+ self._npz_type = value
+
+ @property
+ def vert_coord_file(self):
+ """Get the file containing vertical levels for the experiment."""
+ return self._vert_coord_file
+
+ @vert_coord_file.setter
+ def vert_coord_file(self, value):
+ """Set the file containing vertical levels for the experiment."""
+ self._vert_coord_file = value
+
+ @property
+ def case_data_dir(self):
+ """Get the case data directory for the experiment."""
+ return self._case_data_dir
+
+ @case_data_dir.setter
+ def case_data_dir(self, value):
+ """Set the case data directory for the experiment."""
+ self._case_data_dir = value
+
+ @property
+ def n_itt_out(self):
+ """Get the output period (in timesteps) for the experiment."""
+ return self._n_itt_out
+
+ @n_itt_out.setter
+ def n_itt_out(self, value):
+ """Set the output period (in timesteps) for the experiment."""
+ self._n_itt_out = value
+
+ @property
+ def n_itt_diag(self):
+ """Get the diagnostic period (in timesteps) for the experiment."""
+ return self._n_itt_diag
+
+ @n_itt_diag.setter
+ def n_itt_diag(self, value):
+ """Set the diagnostic period (in timesteps) for the experiment."""
+ self._n_itt_diag = value
+
def setup_rundir(self):
"""Set up run directory for this experiment."""
@@ -254,7 +418,31 @@ def setup_rundir(self):
case_nml = f90nml.read(self._namelist)
# If running the regression test, reduce the runtime
if self._runtime:
- case_nml['case_config']['runtime'] = self._runtime
+ case_nml['case_config']['runtime'] = self._runtime
+ if self._runtime_mult:
+ if self._runtime_mult < 0.0:
+ message = 'The --runtime_mult argument must be greater than 0 ({0} was entered)'.format(self._runtime_mult)
+ logging.critical(message)
+ raise Exception(message)
+ try:
+ old_runtime = case_nml['case_config']['runtime']
+ case_nml['case_config']['runtime'] = old_runtime*self._runtime_mult
+ except KeyError:
+ logging.info('The runtime multiplier argument was set, but the runtime is not set in {0} '.format(self._namelist))
+ # If the number of levels is specified, set the namelist value
+ if self._levels:
+ case_nml['case_config']['n_levels'] = self._levels
+ # If the npz_type is specified, set the namelist value
+ if self._npz_type:
+ case_nml['case_config']['npz_type'] = self._npz_type
+ if self._vert_coord_file:
+ case_nml['case_config']['vert_coord_file'] = self._vert_coord_file
+ if self._n_itt_out:
+ case_nml['case_config']['n_itt_out'] = self._n_itt_out
+ if self._n_itt_diag:
+ case_nml['case_config']['n_itt_diag'] = self._n_itt_diag
+ if self._timestep:
+ case_nml['case_config']['dt'] = self._timestep
# look for the output_dir variable in the case configuration namelist and use it if it does;
# if it doesn't exist, create a default output directory name (from the case and suite names) and create a namelist patch
try:
@@ -262,7 +450,7 @@ def setup_rundir(self):
custom_output_dir = True
except KeyError:
# If using the default namelist, no need to include it in the output directory name; if not, need to use write custom namelist in output dir name in case running multiple experiments with the same case and suite but different namelists
- if self._physics_namelist == default_physics_namelists.get(self._suite):
+ if self._physics_namelist == self._suite_obj._default_namelist:
output_dir = 'output_' + self._case + '_' + self._suite
else:
output_dir = 'output_' + self._case + '_' + self._suite + '_' + os.path.splitext(self._physics_namelist)[0]
@@ -275,7 +463,7 @@ def setup_rundir(self):
if input_type == 1:
#open the case data file and read the surfaceForcing global attribute
case_data_dir = case_nml['case_config']['case_data_dir']
- nc_fid = Dataset(case_data_dir + '/' + self._case + '_SCM_driver.nc' , 'r')
+ nc_fid = Dataset(os.path.join(SCM_ROOT, case_data_dir) + '/' + self._case + '_SCM_driver.nc' , 'r')
surfaceForcing = nc_fid.getncattr('surfaceForcing')
nc_fid.close()
if (surfaceForcing.lower() == 'flux' or surfaceForcing.lower() == 'surfaceflux'):
@@ -301,73 +489,113 @@ def setup_rundir(self):
# Create STANDARD_EXPERIMENT_NAMELIST in the run directory with the case configuration and physics configuration namelists
logging.info('Creating experiment configuration namelist {0} in the run directory from {1} using {2} and {3} '.format(STANDARD_EXPERIMENT_NAMELIST,self._namelist,self._suite,self._physics_namelist))
- with open(STANDARD_EXPERIMENT_NAMELIST, "w+") as nml_file:
+ with open(os.path.join(SCM_RUN, STANDARD_EXPERIMENT_NAMELIST), "w+") as nml_file:
case_nml.write(nml_file)
- with open(STANDARD_EXPERIMENT_NAMELIST, "a") as nml_file:
+ with open(os.path.join(SCM_RUN, STANDARD_EXPERIMENT_NAMELIST), "a") as nml_file:
physics_config_nml.write(nml_file)
# if using the default output dir name created in this script, patch the experiment namelist with the new output_dir variable
if(not custom_output_dir):
# GJF TODO: this implementation is clunky; newer versions of f90nml can handle this better, but this works with v0.19 so no need to require newer version
- f90nml.patch(STANDARD_EXPERIMENT_NAMELIST, output_dir_patch_nml, 'temp.nml')
- cmd = "mv {0} {1}".format('temp.nml', STANDARD_EXPERIMENT_NAMELIST)
+ f90nml.patch(os.path.join(SCM_RUN, STANDARD_EXPERIMENT_NAMELIST), output_dir_patch_nml, 'temp.nml')
+ cmd = "mv {0} {1}".format('temp.nml', os.path.join(SCM_RUN, STANDARD_EXPERIMENT_NAMELIST))
execute(cmd)
# Link physics namelist to run directory with its original name
logging.info('Linking physics namelist {0} to run directory'.format(self._physics_namelist))
- if os.path.isfile(self._physics_namelist):
- os.remove(self._physics_namelist)
- if not os.path.isfile(os.path.join(PHYSICS_NAMELIST_DIR, self._physics_namelist)):
- message = 'Physics namelist {0} not found in directory {1}'.format(self._physics_namelist, PHYSICS_NAMELIST_DIR)
+ if os.path.isfile(os.path.join(SCM_RUN, self._physics_namelist)):
+ os.remove(os.path.join(SCM_RUN,self._physics_namelist))
+ if not os.path.isfile(os.path.join(SCM_ROOT, PHYSICS_NAMELIST_DIR, self._physics_namelist)):
+ message = 'Physics namelist {0} not found in directory {1}'.format(os.path.join(SCM_ROOT, self._physics_namelist), PHYSICS_NAMELIST_DIR)
logging.critical(message)
raise Exception(message)
- cmd = "ln -sf {0} {1}".format(os.path.join(PHYSICS_NAMELIST_DIR, self._physics_namelist), self._physics_namelist)
+ cmd = "ln -sf {0} {1}".format(os.path.join(SCM_ROOT, PHYSICS_NAMELIST_DIR, self._physics_namelist), os.path.join(SCM_RUN, self._physics_namelist))
if surface_flux_spec:
#check for optional prescribed-surface-specific physics namelist and link it instead (if present)
- opt_ps_nml_filename = os.path.splitext(os.path.join(PHYSICS_NAMELIST_DIR,self._physics_namelist))[0] + '_ps.nml'
+ opt_ps_nml_filename = os.path.splitext(os.path.join(SCM_ROOT, PHYSICS_NAMELIST_DIR,self._physics_namelist))[0] + '_ps.nml'
if os.path.isfile(opt_ps_nml_filename):
logging.info('Found optional prescribed surface physics namelist {0}; linking it to run directory'.format(opt_ps_nml_filename))
- cmd = "ln -sf {0} {1}".format(opt_ps_nml_filename, self._physics_namelist)
+ cmd = "ln -sf {0} {1}".format(opt_ps_nml_filename, os.path.join(SCM_RUN, self._physics_namelist))
execute(cmd)
- # Link tracer configuration to run directory with its original name
+ # Link tracer configuration to run directory with standard name
logging.info('Linking tracer configuration {0} to run directory'.format(self._tracers))
- if os.path.isfile(self._tracers):
- os.remove(self._tracers)
- if not os.path.isfile(os.path.join(TRACERS_DIR, self._tracers)):
- message = 'Tracer configuration {0} not found in directory {1}'.format(self._tracers, TRACERS_DIR)
+ if os.path.isfile(os.path.join(SCM_RUN, self._tracers)):
+ os.remove(os.path.join(SCM_RUN, self._tracers))
+ if not os.path.isfile(os.path.join(SCM_ROOT, TRACERS_DIR, self._tracers)):
+ message = 'Tracer configuration {0} not found in directory {1}'.format(self._tracers, os.path.join(SCM_ROOT, TRACERS_DIR))
logging.critical(message)
raise Exception(message)
- cmd = "ln -sf {0} {1}".format(os.path.join(TRACERS_DIR, self._tracers), TRACERS_LINK)
+ cmd = "ln -sf {0} {1}".format(os.path.join(SCM_ROOT, TRACERS_DIR, self._tracers), os.path.join(SCM_RUN, TRACERS_LINK))
execute(cmd)
+ # Link case data file to run directory with original name
+ try:
+ input_type = case_nml['case_config']['input_type']
+ if input_type == 1:
+ case_data_netcdf_file = self._case + '_SCM_driver.nc'
+ else:
+ case_data_netcdf_file = self._case + '.nc'
+ except KeyError:
+ case_data_netcdf_file = self._case + '.nc'
+ logging.info('Linking case input data file {0} to run directory'.format(case_data_netcdf_file))
+ if os.path.isfile(os.path.join(SCM_RUN, case_data_netcdf_file)):
+ os.remove(os.path.join(SCM_RUN, case_data_netcdf_file))
+ if not os.path.isfile(os.path.join(SCM_ROOT, self._case_data_dir, case_data_netcdf_file)):
+ message = 'Case input data file {0} not found in directory {1}'.format(case_data_netcdf_file, os.path.join(SCM_ROOT, self._case_data_dir))
+ logging.critical(message)
+ raise Exception(message)
+ cmd = "ln -sf {0} {1}".format(os.path.join(SCM_ROOT, self._case_data_dir, case_data_netcdf_file), os.path.join(SCM_RUN, case_data_netcdf_file))
+ execute(cmd)
+
+ # Link vertical coordinate file to run directory with its original name
+ if (self._npz_type == 'input'):
+ logging.info('Linking vertical coordinate file {0} to run directory'.format(self._vert_coord_file))
+ if os.path.isfile(os.path.join(SCM_RUN, self._vert_coord_file)):
+ os.remove(os.path.join(SCM_RUN, self._vert_coord_file))
+ if not os.path.isfile(os.path.join(SCM_ROOT, VERT_COORD_DATA_DIR, self._vert_coord_file)):
+ message = 'Vertical coordinate file {0} not found in directory {1}'.format(self._vert_coord_file, os.path.join(SCM_ROOT, VERT_COORD_DATA_DIR))
+ logging.critical(message)
+ raise Exception(message)
+ cmd = "ln -sf {0} {1}".format(os.path.join(SCM_ROOT, VERT_COORD_DATA_DIR, self._vert_coord_file), os.path.join(SCM_RUN, self._vert_coord_file))
+ execute(cmd)
+
# Link physics SDF to run directory
physics_suite = 'suite_' + self._suite + '.xml'
logging.info('Linking physics suite {0} to run directory'.format(physics_suite))
- if os.path.isfile(physics_suite):
- os.remove(physics_suite)
- if not os.path.isfile(os.path.join(PHYSICS_SUITE_DIR, physics_suite)):
- message = 'Physics suite {0} not found in directory {1}'.format(physics_suite, PHYSICS_SUITE_DIR)
+ if os.path.isfile(os.path.join(SCM_RUN, physics_suite)):
+ os.remove(os.path.join(SCM_RUN, physics_suite))
+ if not os.path.isfile(os.path.join(SCM_ROOT, PHYSICS_SUITE_DIR, physics_suite)):
+ message = 'Physics suite {0} not found in directory {1}'.format(physics_suite, os.path.join(SCM_ROOT, PHYSICS_SUITE_DIR))
logging.critical(message)
raise Exception(message)
- cmd = "ln -sf {0} {1}".format(os.path.join(PHYSICS_SUITE_DIR, physics_suite), physics_suite)
+ cmd = "ln -sf {0} {1}".format(os.path.join(SCM_ROOT, PHYSICS_SUITE_DIR, physics_suite), os.path.join(SCM_RUN, physics_suite))
execute(cmd)
# Link physics data needed for schemes to run directory
- logging.info('Linking physics input data from {0} into run directory'.format(PHYSICS_DATA_DIR))
- for entry in os.listdir(PHYSICS_DATA_DIR):
- if os.path.isfile(os.path.join(PHYSICS_DATA_DIR, entry)):
+ logging.info('Linking physics input data from {0} into run directory'.format(os.path.join(SCM_ROOT, PHYSICS_DATA_DIR)))
+ for entry in os.listdir(os.path.join(SCM_ROOT, PHYSICS_DATA_DIR)):
+ if os.path.isfile(os.path.join(SCM_ROOT, PHYSICS_DATA_DIR, entry)):
if not os.path.exists(entry):
logging.debug('Linking file {0}'.format(entry))
- cmd = 'ln -sf {0} {1}'.format(os.path.join(PHYSICS_DATA_DIR, entry), entry)
+ cmd = 'ln -sf {0} {1}'.format(os.path.join(SCM_ROOT, PHYSICS_DATA_DIR, entry), os.path.join(SCM_RUN, entry))
+ execute(cmd)
+
+ # Link reference profile data to run directory
+ logging.info('Linking reference profile data from {0} into run directory'.format(os.path.join(SCM_ROOT, REFERENCE_PROFILE_DIR)))
+ for entry in REFERENCE_PROFILE_FILE_LIST:
+ if os.path.isfile(os.path.join(SCM_ROOT, REFERENCE_PROFILE_DIR, entry)):
+ if not os.path.exists(entry):
+ logging.debug('Linking file {0}'.format(entry))
+ cmd = 'ln -sf {0} {1}'.format(os.path.join(SCM_ROOT, REFERENCE_PROFILE_DIR, entry), os.path.join(SCM_RUN, entry))
execute(cmd)
# Parse physics namelist and extract
# - oz_phys
# - oz_phys_2015
- logging.info('Parsing physics namelist {0}'.format(self._physics_namelist))
- nml = f90nml.read(self._physics_namelist)
+ logging.info('Parsing physics namelist {0}'.format(os.path.join(SCM_RUN, self._physics_namelist)))
+ nml = f90nml.read(os.path.join(SCM_RUN, self._physics_namelist))
# oz_phys
try:
oz_phys = nml['gfs_physics_nml']['oz_phys']
@@ -385,15 +613,15 @@ def setup_rundir(self):
raise Exception(message)
# Link input data for oz_phys or oz_phys_2015
- if os.path.exists(OZ_PHYS_LINK):
- os.remove(OZ_PHYS_LINK)
+ if os.path.exists(os.path.join(SCM_RUN, OZ_PHYS_LINK)):
+ os.remove(os.path.join(SCM_RUN, OZ_PHYS_LINK))
if oz_phys:
logging.info('Linking input data for oz_phys')
- cmd = 'ln -sf {0} {1}'.format(OZ_PHYS_TARGET, OZ_PHYS_LINK)
+ cmd = 'ln -sf {0} {1}'.format(os.path.join(SCM_RUN, OZ_PHYS_TARGET), os.path.join(SCM_RUN, OZ_PHYS_LINK))
execute(cmd)
elif oz_phys_2015:
logging.info('Linking input data for oz_phys_2015')
- cmd = 'ln -sf {0} {1}'.format(OZ_PHYS_2015_TARGET, OZ_PHYS_LINK)
+ cmd = 'ln -sf {0} {1}'.format(os.path.join(SCM_RUN, OZ_PHYS_2015_TARGET), os.path.join(SCM_RUN, OZ_PHYS_LINK))
execute(cmd)
# Look for do_ugwp_v1
@@ -404,50 +632,60 @@ def setup_rundir(self):
# Link the tau file if do_ugwp_v1
if do_ugwp_v1:
- if os.path.exists(TAU_LINK):
- os.remove(TAU_LINK)
+ if os.path.exists(os.path.join(SCM_RUN, TAU_LINK)):
+ os.remove(os.path.join(SCM_RUN, TAU_LINK))
logging.info('Linking input data for UGWP_v1')
- cmd = 'ln -sf {0} {1}'.format(TAU_TARGET, TAU_LINK)
+ cmd = 'ln -sf {0} {1}'.format(os.path.join(SCM_RUN, TAU_TARGET), os.path.join(SCM_RUN, TAU_LINK))
execute(cmd)
# Link scripts needed to run SCM analysis
- logging.info('Linking analysis scripts from {0} into run directory'.format(SCM_ANALYSIS_SCRIPT_DIR))
+ logging.info('Linking analysis scripts from {0} into run directory'.format(os.path.join(SCM_ROOT, SCM_ANALYSIS_SCRIPT_DIR)))
analysis_script_files = ['scm_analysis.py','configspec.ini']
for entry in analysis_script_files:
- if os.path.isfile(os.path.join(SCM_ANALYSIS_SCRIPT_DIR, entry)):
+ if os.path.isfile(os.path.join(SCM_ROOT, SCM_ANALYSIS_SCRIPT_DIR, entry)):
if not os.path.exists(entry):
logging.debug('Linking file {0}'.format(entry))
- cmd = 'ln -sf {0} {1}'.format(os.path.join(SCM_ANALYSIS_SCRIPT_DIR, entry), entry)
+ cmd = 'ln -sf {0} {1}'.format(os.path.join(SCM_ROOT, SCM_ANALYSIS_SCRIPT_DIR, entry), os.path.join(SCM_RUN, entry))
execute(cmd)
# Link plot configuration files needed to run SCM analysis
- logging.info('Linking plot configuration files from {0} into run directory'.format(SCM_ANALYSIS_CONFIG_DIR))
- for entry in os.listdir(SCM_ANALYSIS_CONFIG_DIR):
- if os.path.isfile(os.path.join(SCM_ANALYSIS_CONFIG_DIR, entry)):
+ logging.info('Linking plot configuration files from {0} into run directory'.format(os.path.join(SCM_ROOT, SCM_ANALYSIS_CONFIG_DIR)))
+ for entry in os.listdir(os.path.join(SCM_ROOT, SCM_ANALYSIS_CONFIG_DIR)):
+ if os.path.isfile(os.path.join(SCM_ROOT, SCM_ANALYSIS_CONFIG_DIR, entry)):
if not os.path.exists(entry):
logging.debug('Linking file {0}'.format(entry))
- cmd = 'ln -sf {0} {1}'.format(os.path.join(SCM_ANALYSIS_CONFIG_DIR, entry), entry)
+ cmd = 'ln -sf {0} {1}'.format(os.path.join(SCM_ROOT, SCM_ANALYSIS_CONFIG_DIR, entry), os.path.join(SCM_RUN, entry))
execute(cmd)
# Create output directory (delete existing directory)
logging.info('Creating output directory {0} in run directory'.format(output_dir))
- if os.path.isdir(output_dir):
- shutil.rmtree(output_dir)
- os.makedirs(output_dir)
+ if os.path.isdir(os.path.join(SCM_RUN, output_dir)):
+ shutil.rmtree(os.path.join(SCM_RUN, output_dir))
+ os.makedirs(os.path.join(SCM_RUN, output_dir))
# Write experiment configuration file to output directory
logging.info('Writing experiment configuration {0}.nml to output directory'.format(self._name))
- cmd = 'cp {0} {1}'.format(STANDARD_EXPERIMENT_NAMELIST, os.path.join(output_dir,self._name + '.nml'))
+ cmd = 'cp {0} {1}'.format(os.path.join(SCM_RUN, STANDARD_EXPERIMENT_NAMELIST), os.path.join(SCM_RUN, output_dir,self._name + '.nml'))
execute(cmd)
+ # Move executable to run dir
+ if COPY_EXECUTABLE:
+ logging.info('Copying executable to run directory')
+ cmd = 'cp {0} {1}'.format(os.path.join(SCM_ROOT, SCM_BIN, EXECUTABLE_NAME), os.path.join(SCM_RUN, EXECUTABLE_NAME))
+ execute(cmd)
+ else:
+ logging.info('Linking executable to run directory')
+ cmd = 'ln -s {0} {1}'.format(os.path.join(SCM_ROOT, SCM_BIN, EXECUTABLE_NAME), os.path.join(SCM_RUN, EXECUTABLE_NAME))
+ execute(cmd)
+
return output_dir
def launch_executable(use_gdb, gdb):
"""Configure model run command and pass control to shell/gdb"""
if use_gdb:
- cmd = '{gdb} {executable}'.format(gdb=gdb, executable=EXECUTABLE)
+ cmd = '(cd {scm_run} && exec {gdb} {executable})'.format(scm_run=SCM_RUN, gdb=gdb, executable=EXECUTABLE)
else:
- cmd = '{executable}'.format(executable=EXECUTABLE)
+ cmd = '(cd {scm_run} && exec {executable})'.format(scm_run=SCM_RUN, executable=EXECUTABLE)
logging.info('Passing control to "{0}"'.format(cmd))
time.sleep(2)
failure = os.system(cmd)
@@ -463,22 +701,68 @@ def copy_outdir(exp_dir):
shutil.copytree(exp_dir, home_output_dir)
def main():
- (case, use_gdb, suite, namelist, docker, tracers, runtime) = parse_arguments()
+ (case, use_gdb, suite_name, namelist, docker, tracers, runtime, runtime_mult, levels, npz_type, vert_coord_file, case_data_dir, n_itt_out, n_itt_diag, run_dir, timestep) = parse_arguments()
+
+ global SCM_ROOT
+ SCM_ROOT = os.getenv('SCM_ROOT')
+ if SCM_ROOT is None:
+ message = 'The SCM_ROOT environment variable is not set. Please set the SCM_ROOT environment variable to the top-level path where the model was cloned.'
+ logging.critical(message)
+ raise Exception(message)
+
+ global SCM_BIN
+ SCM_BIN = os.path.join(SCM_ROOT, DEFAULT_BIN_DIR)
+
+ global SCM_RUN
+ if run_dir:
+ SCM_RUN = run_dir
+ else:
+ SCM_RUN = os.path.join(SCM_ROOT, DEFAULT_RUN_DIR)
+ if not os.path.isdir(SCM_RUN):
+ os.makedirs(SCM_RUN)
+
+ global EXECUTABLE
+ EXECUTABLE = os.path.join(SCM_RUN, EXECUTABLE_NAME)
setup_logging()
#Experiment
if namelist:
if tracers:
- logging.info('Setting up experiment {0} with suite {1} using namelist {2} and tracers {3}'.format(case,suite,namelist,tracers))
+ logging.info('Setting up experiment {0} with suite {1} using namelist {2} and tracers {3}'.format(case,suite_name,namelist,tracers))
else:
- logging.info('Setting up experiment {0} with suite {1} using namelist {2} using default tracers for the suite'.format(case,suite,namelist))
+ logging.info('Setting up experiment {0} with suite {1} using namelist {2} using default tracers for the suite'.format(case,suite_name,namelist))
else:
if tracers:
- logging.info('Setting up experiment {0} with suite {1} using the default namelist for the suite and tracers {2}'.format(case,suite,tracers))
+ logging.info('Setting up experiment {0} with suite {1} using the default namelist for the suite and tracers {2}'.format(case,suite_name,tracers))
+ else:
+ logging.info('Setting up experiment {0} with suite {1} using the default namelist and tracers for the suite'.format(case,suite_name))
+
+ active_suite = None
+ for s in suite_list:
+ if suite_name == s._name:
+ active_suite = s
+ break
+
+ if (active_suite is None):
+ if (namelist and tracers):
+ if timestep:
+ active_suite = suite(suite_name, tracers, namelist, timestep, -1, False)
+ else:
+ active_sutie = suite(suite_name, tracers, namelist, -1, -1, False)
else:
- logging.info('Setting up experiment {0} with suite {1} using the default namelist and tracers for the suite'.format(case,suite))
- exp = Experiment(case, suite, namelist, tracers, runtime)
+ message = 'The given suite ({0}), does not have defaults set in suite_info.py and either the tracers file or physics namelist file (or both) were not provided.'.format(suite_name)
+ logging.critical(message)
+ raise Exception(message)
+ else:
+ if namelist:
+ active_suite.namelist = namelist
+ if tracers:
+ active_suite.tracers = tracers
+ if timestep:
+ active_suite.timestep = timestep
+
+ exp = Experiment(case, active_suite, runtime, runtime_mult, levels, npz_type, vert_coord_file, case_data_dir, n_itt_out, n_itt_diag)
exp_dir = exp.setup_rundir()
# Debugger
if use_gdb:
diff --git a/scm/src/scm.F90 b/scm/src/scm.F90
index dbd7c4eba..ba152f1c1 100644
--- a/scm/src/scm.F90
+++ b/scm/src/scm.F90
@@ -30,7 +30,7 @@ subroutine scm_main_sub()
type(scm_input_type), target :: scm_input_instance
type(scm_reference_type), target :: scm_reference
- integer :: i, j, grid_error, kdt_rad, idtend, itrac
+ integer :: i, j, kdt_rad, idtend, itrac
real(kind=8) :: rinc(5) !(DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS)
integer :: jdat(1:8)
@@ -53,25 +53,7 @@ subroutine scm_main_sub()
call get_reference_profile(scm_state, scm_reference)
- select case(trim(adjustl(scm_state%model_name)))
- case("GFS")
- !> - Call get_GFS_grid in \ref vgrid to read in the necessary coefficients and calculate the pressure-related variables on the grid.
- call get_GFS_vgrid(scm_input_instance, scm_state, grid_error)
- !> - Exit if an unsupported number of levels is specified or the file with grid coefficients cannot be opened.
- if (grid_error == 1) then
- write(*,*) 'When using the GFS host model, only 28, 42, 60, 64, and 91 levels are currently supported. Exiting...'
- stop
- end if
- if (grid_error == 2) then
- write(*,*) 'The grid coefficient file could not be opened. Exiting...'
- stop
- end if
- case("FV3")
- call get_FV3_vgrid(scm_input_instance, scm_state)
- case default
- write(*,*) 'Only the GFS (GSM) and FV3 vertical coordinates are currently supported. Exiting...'
- stop
- end select
+ call get_FV3_vgrid(scm_input_instance, scm_state)
!allocate(cdata_cols(scm_state%n_cols))
diff --git a/scm/src/scm_input.F90 b/scm/src/scm_input.F90
index 648ba0243..2c089b64b 100644
--- a/scm/src/scm_input.F90
+++ b/scm/src/scm_input.F90
@@ -34,7 +34,8 @@ subroutine get_config_nml(scm_state)
type(scm_state_type), target, intent(inout) :: scm_state
character(len=character_length) :: experiment_name !< name of the experiment configuration file (usually case name)
- character(len=character_length) :: model_name !< name of the host model (currently only GFS supported)
+ character(len=character_length) :: npz_type !< used for generating different FV3 vertical grids
+ character(len=character_length) :: vert_coord_file !< file containing FV3 vertical grid coefficients
character(len=character_length) :: case_name !< name of case initialization and forcing dataset
real(kind=dp) :: dt !< time step in seconds
real(kind=dp) :: runtime !< total runtime in seconds
@@ -48,9 +49,6 @@ subroutine get_config_nml(scm_state)
integer :: time_scheme !< 1 => forward Euler, 2 => filtered leapfrog
character(len=character_length) :: output_dir !< name of the output directory
character(len=character_length) :: output_file !< name of the output file (without the file extension)
- character(len=character_length) :: case_data_dir !< path to the directory containing case initialization and forcing data
- character(len=character_length) :: vert_coord_data_dir !< path to the directory containing vertical coordinate data
- character(len=character_length) :: reference_profile_dir !< path to the directory containing the reference profile
integer :: thermo_forcing_type !< 1: "revealed forcing", 2: "horizontal advective forcing", 3: "relaxation forcing"
integer :: mom_forcing_type !< 1: "revealed forcing", 2: "horizontal advective forcing", 3: "relaxation forcing"
integer :: C_RES !< reference "C" resoltiion of FV3 grid (needed for GWD and mountain blocking)
@@ -77,10 +75,10 @@ subroutine get_config_nml(scm_state)
CHARACTER(LEN=*), parameter :: experiment_namelist = 'input_experiment.nml'
- NAMELIST /case_config/ model_name, n_columns, case_name, dt, time_scheme, runtime, n_itt_out, n_itt_diag, &
- n_levels, output_dir, output_file, case_data_dir, vert_coord_data_dir, thermo_forcing_type, model_ics, &
+ NAMELIST /case_config/ npz_type, vert_coord_file, case_name, dt, runtime, n_itt_out, n_itt_diag, &
+ n_levels, output_dir, thermo_forcing_type, model_ics, &
lsm_ics, do_spinup, C_RES, spinup_timesteps, mom_forcing_type, relax_time, sfc_type, sfc_flux_spec, &
- sfc_roughness_length_cm, reference_profile_choice, reference_profile_dir, year, month, day, hour, min, &
+ sfc_roughness_length_cm, reference_profile_choice, year, month, day, hour, min, &
column_area, input_type
NAMELIST /physics_config/ physics_suite, physics_nml
@@ -89,21 +87,20 @@ subroutine get_config_nml(scm_state)
!! @{
!> Define default values for experiment configuration (to be overridden by external namelist file or command line arguments)
- model_name = 'GFS'
+ npz_type = ''
+ vert_coord_file = ''
n_columns = 1
case_name = 'twpice'
dt = 600.0
- time_scheme = 2
+ time_scheme = 1
runtime = 2138400.0
n_itt_out = 1
n_itt_diag = -999
- n_levels = 64
+ n_levels = 127
n_soil = 4
n_snow = 3
output_dir = 'output'
output_file = 'output'
- case_data_dir = '../data/processed_case_input'
- vert_coord_data_dir = '../data/vert_coord_data'
thermo_forcing_type = 2
mom_forcing_type = 3
C_RES = 384
@@ -116,7 +113,6 @@ subroutine get_config_nml(scm_state)
lsm_ics = .false.
do_spinup = .false.
reference_profile_choice = 1
- reference_profile_dir = case_data_dir
year = 2006
month = 1
day = 19
@@ -166,11 +162,9 @@ subroutine get_config_nml(scm_state)
call scm_state%create(n_columns, n_levels, n_soil, n_snow, n_time_levels, tracer_names, tracer_types)
scm_state%experiment_name = experiment_name
- scm_state%model_name = model_name
+ scm_state%npz_type = npz_type
+ scm_state%vert_coord_file = vert_coord_file
scm_state%output_dir = output_dir
- scm_state%case_data_dir = case_data_dir
- scm_state%vert_coord_data_dir = vert_coord_data_dir
- scm_state%reference_profile_dir = reference_profile_dir
scm_state%output_file = output_file
scm_state%case_name = case_name
scm_state%physics_suite_name = physics_suite
@@ -429,7 +423,7 @@ subroutine get_case_init(scm_state, scm_input)
!! @{
!> - Open the case input file found in the processed_case_input dir corresponding to the experiment name.
- call check(NF90_OPEN(trim(adjustl(scm_state%case_data_dir))//'/'//trim(adjustl(scm_state%case_name))//'.nc',nf90_nowrite,ncid))
+ call check(NF90_OPEN(trim(adjustl(scm_state%case_name))//'.nc',nf90_nowrite,ncid))
!> - Read in missing value from file (replace module variable if present)
ierr = NF90_GET_ATT(ncid, NF90_GLOBAL, 'missing_value', nc_missing_value)
@@ -1018,7 +1012,7 @@ subroutine get_case_init_DEPHY(scm_state, scm_input)
missing_value_eps = missing_value + 0.01
!> - Open the case input file found in the processed_case_input dir corresponding to the experiment name.
- call check(NF90_OPEN(trim(adjustl(scm_state%case_data_dir))//'/'//trim(adjustl(scm_state%case_name))//'_SCM_driver.nc',nf90_nowrite,ncid))
+ call check(NF90_OPEN(trim(adjustl(scm_state%case_name))//'_SCM_driver.nc',nf90_nowrite,ncid))
!> - Get the dimensions.
@@ -2050,7 +2044,7 @@ subroutine get_reference_profile(scm_state, scm_reference)
select case (scm_state%reference_profile_choice)
case (1)
- open(unit=1, file=trim(adjustl(scm_state%reference_profile_dir))//'/'//'McCProfiles.dat', status='old', action='read', iostat=ioerror)
+ open(unit=1, file='McCProfiles.dat', status='old', action='read', iostat=ioerror)
if(ioerror /= 0) then
write(*,*) 'There was an error opening the file McCprofiles.dat in the processed_case_input directory. &
Error code = ',ioerror
@@ -2075,7 +2069,7 @@ subroutine get_reference_profile(scm_state, scm_reference)
END DO
close(1)
case (2)
- call check(NF90_OPEN(trim(adjustl(scm_state%reference_profile_dir))//'/'//'mid_lat_summer_std.nc',nf90_nowrite,ncid))
+ call check(NF90_OPEN('mid_lat_summer_std.nc',nf90_nowrite,ncid))
call check(NF90_INQ_DIMID(ncid,"height",varID))
call check(NF90_INQUIRE_DIMENSION(ncid, varID, tmpName, nlev))
diff --git a/scm/src/scm_type_defs.F90 b/scm/src/scm_type_defs.F90
index 5e16038fa..2e9ece523 100644
--- a/scm/src/scm_type_defs.F90
+++ b/scm/src/scm_type_defs.F90
@@ -38,18 +38,16 @@ module scm_type_defs
type scm_state_type
character(len=character_length) :: experiment_name !> name of model configuration file
- character(len=character_length) :: model_name !< name of "host" model (must be "GFS" for prototype)
+ character(len=character_length) :: npz_type !< used to define different FV3 vertical grids
+ character(len=character_length) :: vert_coord_file !< name of vertical coordinate file
character(len=character_length) :: output_dir !< name of output directory to place netCDF file
- character(len=character_length) :: case_data_dir !< location of the case initialization and forcing data files (relative to the executable path)
- character(len=character_length) :: vert_coord_data_dir !< location of the vertical coordinate data files (relative to the executable path)
- character(len=character_length) :: reference_profile_dir !< location of the reference profile data files (relative to the executable path)
character(len=character_length) :: output_file !< name of output file (without the file extension)
character(len=character_length) :: case_name !< name of case initialization and forcing to use (different than experiment name, which names the model run (as a control, experiment_1, etc.))
character(len=character_length) :: physics_suite_name !< name of physics suite (must be "GFS_operational" for prototype)
character(len=character_length) :: physics_nml
- integer :: n_levels !< number of model levels (must be 64 for prototype)
- integer :: n_soil !< number of model levels (must be 4 for prototype)
+ integer :: n_levels !< number of model levels
+ integer :: n_soil !< number of model levels
integer :: itt !< current model iteration
integer :: itt_out !< output iteration counter
integer :: itt_swrad !< sw radiation iteration counter
@@ -443,11 +441,9 @@ subroutine scm_state_create(scm_state, n_columns, n_levels, n_soil, n_snow, n_ti
integer :: i
scm_state%experiment_name = clear_char
- scm_state%model_name = clear_char
+ scm_state%npz_type = clear_char
+ scm_state%vert_coord_file = clear_char
scm_state%output_dir = clear_char
- scm_state%case_data_dir = clear_char
- scm_state%vert_coord_data_dir = clear_char
- scm_state%reference_profile_dir = clear_char
scm_state%output_file = clear_char
scm_state%case_name = clear_char
diff --git a/scm/src/scm_vgrid.F90 b/scm/src/scm_vgrid.F90
index 30a22b194..bde37775d 100644
--- a/scm/src/scm_vgrid.F90
+++ b/scm/src/scm_vgrid.F90
@@ -9,7 +9,7 @@ module scm_vgrid
implicit none
private
-public get_GFS_vgrid, get_FV3_vgrid, calc_pres_exner_geopotential, calc_geopotential
+public get_FV3_vgrid, calc_pres_exner_geopotential, calc_geopotential
logical :: verbose = .true.
@@ -21,1195 +21,397 @@ module scm_vgrid
!! @{
!! Contains the vertical grid setup routines.
-!> Subroutine for setting up the GFS hybrid coordinate vertical grid. Files with precalculated coefficients (A_k and B_k) from the
-!! "fix" directory in Patrick Tripp's V2 code are used; their filenames start with "global_hyblev". There are only files for 28, 42,
-!! 60, 64, and 91 levels. If a different number of levels are specified, an error is returned. Using the A_k and B_k coefficients, the
-!! model level pressures, sigma values, and exner function (at interfaces and layer centers) are calculated and returned to the calling
-!! procedure.
-subroutine get_GFS_vgrid(scm_input, scm_state, error)
- use scm_type_defs, only: scm_input_type, scm_state_type
-
- type(scm_input_type), intent(in) :: scm_input
- type(scm_state_type), intent(inout) :: scm_state
-
- !create GFS hybrid coordinate vertical grid
- integer, intent(out) :: error !< error code
-
- integer :: i, ierr
-
- real(kind=dp) :: pres_sfc_inv, p0
- character(len=37) :: filename
- character(len=80) :: line
- character(len=16) :: file_format
-
- !> \section get_GFS_vgrid_alg Algorithm
- !! @{
-
- error = 0
-
- !file format for all but the 91 level file is the same
- file_format = '(1F12.3, 1F12.8)'
-
-
- !> - Check to see if the desired number of grid levels is available. If not, return an error code.
- select case (scm_state%n_levels)
- case(28)
- filename = trim(adjustl(scm_state%vert_coord_data_dir))//"/global_hyblev.l28.txt"
- case(42)
- filename = trim(adjustl(scm_state%vert_coord_data_dir))//"/global_hyblev.l42.txt"
- case(60)
- filename = trim(adjustl(scm_state%vert_coord_data_dir))//"/global_hyblev.l60.txt"
- case(64)
- filename = trim(adjustl(scm_state%vert_coord_data_dir))//"/global_hyblev.l64.txt"
- case(91)
- filename = trim(adjustl(scm_state%vert_coord_data_dir))//"/global_hyblev.l91.txt"
- !file format for the 91-level file is different
- file_format = '(1F14.6, 1F10.6)'
- case default
- error = 1
- return
- end select
-
- !> - Open the appropriate file.
- open(unit=1, file=filename, status='old', action='read', iostat=ierr)
- if(ierr /= 0) then
- write(*,*) 'There was an error opening the file ', filename, ' in the model_config directory. &
- Error code = ',ierr
- error = 2
- endif
-
- !> - The first line contains the number of coefficients and number of levels (these should already by known; discard this info)
- read(1,'(a)',iostat=ierr) line
- !> - Read in the coefficient data.
- do i=1, scm_state%n_levels+1
- read(1,file_format) scm_state%a_k(i), scm_state%b_k(i)
- end do
- close(1)
-
- !> - Calculate interface pressures, sigma, and exner function.
-
- p0 = scm_input%input_pres_surf(1)
- pres_sfc_inv = 1.0/p0
- do i=1, scm_state%n_levels+1
- scm_state%pres_i(:,i) = scm_state%a_k(i) + scm_state%b_k(i)*p0
- scm_state%si(:,i) = scm_state%a_k(i)*pres_sfc_inv + scm_state%b_k(i)
- scm_state%exner_i(:,i) = (scm_state%pres_i(:,i)/1.0E5)**con_rocp
- end do
-
- !> - Calculate layer center pressures, sigma, and exner function.
- do i=1, scm_state%n_levels
- scm_state%pres_l(:,i) = ((1.0/(con_rocp+1.0))*&
- (scm_state%pres_i(:,i)**(con_rocp+1.0) - scm_state%pres_i(:,i+1)**(con_rocp+1.0))/ &
- (scm_state%pres_i(:,i) - scm_state%pres_i(:,i+1)))**(1.0/con_rocp)
- scm_state%sl(:,i) = 0.5*(scm_state%si(:,i) + scm_state%si(:,i+1))
-
- scm_state%exner_l(:,i) = (scm_state%pres_l(:,i)/1.0E5)**con_rocp
-
- end do
- !> @}
-end subroutine get_GFS_vgrid
-
-!most of this was obtained from FV3/atmos_cubed_sphere/tools/fv_eta.F90 from FV3 v0 release
+!GJF: most of this was obtained from FV3/atmos_cubed_sphere/tools/fv_eta.F90 from FV3
+!GJF: current as of March 2022
+!GJF: assuming proprocessor variable USE_VAR_ETA is NOT set
subroutine get_FV3_vgrid(scm_input, scm_state)
use scm_type_defs, only: scm_input_type, scm_state_type
type(scm_input_type), intent(in) :: scm_input
type(scm_state_type), intent(inout) :: scm_state
- integer :: km ! vertical dimension
+ integer :: km ! vertical dimension
integer :: ks ! number of pure p layers
real(kind=dp) :: ptop ! model top (Pa)
-
! local
real(kind=dp) :: pres_sfc_inv, p_ref, ak_tmp, bk_tmp
-
- real a24(25),b24(25) ! GFDL AM2L24
- real a26(27),b26(27) ! Jablonowski & Williamson 26-level
- real a32(33),b32(33)
- !real a32w(33),b32w(33)
- real a47(48),b47(48)
- real a48(49),b48(49)
- real a52(53),b52(53)
- real a54(55),b54(55)
- real a56(57),b56(57)
- real a60(61),b60(61)
- !real a63(64),b63(64)
- real a64(65),b64(65)
- real a68(69),b68(69) ! cjg: grid with enhanced PBL resolution
- real a96(97),b96(97) ! cjg: grid with enhanced PBL resolution
- real a100(101),b100(101)
- real a104(105),b104(105)
- real a125(126),b125(126)
-
+
real:: p0=1000.E2
real:: pc=200.E2
-
- real pt, pint, lnpe, dlnp
- real press(scm_state%n_levels+1)
- integer k, last_index, mid_index
-
+
+ real :: pint = 100.E2
+ real :: stretch_fac = 1.03
+ integer :: auto_routine = 0
+
+ integer k, last_index, mid_index, ierr, dummy, n_levels_file
+
+ character(len=80) :: line
+ character(len=16) :: file_format
+
+#include "fv_eta.h"
+
km = scm_state%n_levels
-
+ ptop = 1.
! Definition: press(i,j,k) = ak(k) + bk(k) * ps(i,j)
-
-!-----------------------------------------------
-! GFDL AM2-L24: modified by SJL at the model top
-!-----------------------------------------------
-! data a24 / 100.0000, 1050.0000, 3474.7942, 7505.5556, 12787.2428, &
- data a24 / 100.0000, 903.4465, 3474.7942, 7505.5556, 12787.2428, &
- 19111.3683, 21854.9274, 22884.1866, 22776.3058, 21716.1604, &
- 20073.2963, 18110.5123, 16004.7832, 13877.6253, 11812.5452, &
- 9865.8840, 8073.9726, 6458.0834, 5027.9899, 3784.6085, &
- 2722.0086, 1828.9752, 1090.2396, 487.4595, 0.0000 /
-
- data b24 / 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, &
- 0.0000000, 0.0435679, 0.1102275, 0.1922249, 0.2817656, &
- 0.3694997, 0.4532348, 0.5316253, 0.6038733, 0.6695556, &
- 0.7285176, 0.7808017, 0.8265992, 0.8662148, 0.9000406, &
- 0.9285364, 0.9522140, 0.9716252, 0.9873523, 1.0000000 /
-
-! Jablonowski & Williamson 26-level setup
- data a26 / 219.4067, 489.5209, 988.2418, 1805.2010, 2983.7240, 4462.3340, &
- 6160.5870, 7851.2430, 7731.2710, 7590.1310, 7424.0860, &
- 7228.7440, 6998.9330, 6728.5740, 6410.5090, 6036.3220, &
- 5596.1110, 5078.2250, 4468.9600, 3752.1910, 2908.9490, &
- 2084.739, 1334.443, 708.499, 252.1360, 0.0, 0.0 /
-
- data b26 / 0.0, 0.0, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000,&
- 0.0000000, 0.01505309, 0.03276228, 0.05359622, 0.07810627, &
- 0.1069411, 0.1408637, 0.1807720, 0.2277220, 0.2829562, &
- 0.3479364, 0.4243822, 0.5143168, 0.6201202, 0.7235355, &
- 0.8176768, 0.8962153, 0.9534761, 0.9851122, 1.0000000 /
-
-
-! High-resolution troposphere setup
-#ifdef OLD_32
-! Revised Apr 14, 2004: PINT = 245.027 mb
- data a32/100.00000, 400.00000, 818.60211, &
- 1378.88653, 2091.79519, 2983.64084, &
- 4121.78960, 5579.22148, 7419.79300, &
- 9704.82578, 12496.33710, 15855.26306, &
- 19839.62499, 24502.73262, 28177.10152, &
- 29525.28447, 29016.34358, 27131.32792, &
- 24406.11225, 21326.04907, 18221.18357, &
- 15275.14642, 12581.67796, 10181.42843, &
- 8081.89816, 6270.86956, 4725.35001, &
- 3417.39199, 2317.75459, 1398.09473, &
- 632.49506, 0.00000, 0.00000 /
-
- data b32/0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.01711, &
- 0.06479, 0.13730, 0.22693, &
- 0.32416, 0.42058, 0.51105, &
- 0.59325, 0.66628, 0.73011, &
- 0.78516, 0.83217, 0.87197, &
- 0.90546, 0.93349, 0.95685, &
- 0.97624, 0.99223, 1.00000 /
-#else
-! SJL June 26, 2012
-! pint= 55.7922
- data a32/100.00000, 400.00000, 818.60211, &
- 1378.88653, 2091.79519, 2983.64084, &
- 4121.78960, 5579.22148, 6907.19063, &
- 7735.78639, 8197.66476, 8377.95525, &
- 8331.69594, 8094.72213, 7690.85756, &
- 7139.01788, 6464.80251, 5712.35727, &
- 4940.05347, 4198.60465, 3516.63294, &
- 2905.19863, 2366.73733, 1899.19455, &
- 1497.78137, 1156.25252, 867.79199, &
- 625.59324, 423.21322, 254.76613, &
- 115.06646, 0.00000, 0.00000 /
-
- data b32/0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00513, &
- 0.01969, 0.04299, 0.07477, &
- 0.11508, 0.16408, 0.22198, &
- 0.28865, 0.36281, 0.44112, &
- 0.51882, 0.59185, 0.65810, &
- 0.71694, 0.76843, 0.81293, &
- 0.85100, 0.88331, 0.91055, &
- 0.93338, 0.95244, 0.96828, &
- 0.98142, 0.99223, 1.00000 /
-#endif
-
-!!---------------------
-!! Wilson's 32L settings:
-!!---------------------
-!! Top changed to 0.01 mb
-! data a32w/ 1.00, 26.6378, 84.5529, 228.8592, &
-! 539.9597, 1131.7087, 2141.8082, 3712.0454, &
-! 5963.5317, 8974.1873, 12764.5388, 17294.5911, &
-! 20857.7007, 22221.8651, 22892.7202, 22891.1641, &
-! 22286.0724, 21176.0846, 19673.0671, 17889.0989, &
-! 15927.5060, 13877.6239, 11812.5474, 9865.8830, &
-! 8073.9717, 6458.0824, 5027.9893, 3784.6104, &
-! 2722.0093, 1828.9741, 1090.2397, 487.4575, &
-! 0.0000 /
-!
-! data b32w/ 0.0000, 0.0000, 0.0000, 0.0000, &
-! 0.0000, 0.0000, 0.0000, 0.0000, &
-! 0.0000, 0.0000, 0.0000, 0.0000, &
-! 0.0159, 0.0586, 0.1117, 0.1734, &
-! 0.2415, 0.3137, 0.3878, 0.4619, &
-! 0.5344, 0.6039, 0.6696, 0.7285, &
-! 0.7808, 0.8266, 0.8662, 0.9000, &
-! 0.9285, 0.9522, 0.9716, 0.9874, &
-! 1.0000 /
-
-
-#ifdef OLD_L47
-! QBO setting with ptop = 0.1 mb and p_full=0.17 mb; pint ~ 100 mb
- data a47/ 10.00000, 24.45365, 48.76776, &
- 85.39458, 133.41983, 191.01402, &
- 257.94919, 336.63306, 431.52741, &
- 548.18995, 692.78825, 872.16512, &
- 1094.18467, 1368.11917, 1704.99489, &
- 2117.91945, 2622.42986, 3236.88281, &
- 3982.89623, 4885.84733, 5975.43260, &
- 7286.29500, 8858.72424, 10739.43477, &
- 12982.41110, 15649.68745, 18811.37629, &
- 22542.71275, 25724.93857, 27314.36781, &
- 27498.59474, 26501.79312, 24605.92991, &
- 22130.51655, 19381.30274, 16601.56419, &
- 13952.53231, 11522.93244, 9350.82303, &
- 7443.47723, 5790.77434, 4373.32696, &
- 3167.47008, 2148.51663, 1293.15510, &
- 581.62429, 0.00000, 0.00000 /
-
- data b47/ 0.0000, 0.0000, 0.0000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.01188, 0.04650, &
- 0.10170, 0.17401, 0.25832, &
- 0.34850, 0.43872, 0.52448, &
- 0.60307, 0.67328, 0.73492, &
- 0.78834, 0.83418, 0.87320, &
- 0.90622, 0.93399, 0.95723, &
- 0.97650, 0.99223, 1.00000 /
-#else
-! Oct 23, 2012
-! QBO setting with ptop = 0.1 mb, pint ~ 60 mb
- data a47/ 10.00000, 24.45365, 48.76776, &
- 85.39458, 133.41983, 191.01402, &
- 257.94919, 336.63306, 431.52741, &
- 548.18995, 692.78825, 872.16512, &
- 1094.18467, 1368.11917, 1704.99489, &
- 2117.91945, 2622.42986, 3236.88281, &
- 3982.89623, 4885.84733, 5975.43260, &
- 7019.26669, 7796.15848, 8346.60209, &
- 8700.31838, 8878.27554, 8894.27179, &
- 8756.46404, 8469.60171, 8038.92687, &
- 7475.89006, 6803.68067, 6058.68992, &
- 5285.28859, 4526.01565, 3813.00206, &
- 3164.95553, 2589.26318, 2085.96929, &
- 1651.11596, 1278.81205, 962.38875, &
- 695.07046, 470.40784, 282.61654, &
- 126.92745, 0.00000, 0.00000 /
- data b47/ 0.0000, 0.0000, 0.0000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00267, 0.01063, 0.02393, &
- 0.04282, 0.06771, 0.09917, &
- 0.13786, 0.18444, 0.23925, &
- 0.30193, 0.37100, 0.44379, &
- 0.51695, 0.58727, 0.65236, &
- 0.71094, 0.76262, 0.80757, &
- 0.84626, 0.87930, 0.90731, &
- 0.93094, 0.95077, 0.96733, &
- 0.98105, 0.99223, 1.00000 /
-#endif
-
- data a48/ &
- 1.00000, 2.69722, 5.17136, &
- 8.89455, 14.24790, 22.07157, &
- 33.61283, 50.48096, 74.79993, &
- 109.40055, 158.00460, 225.44108, &
- 317.89560, 443.19350, 611.11558, &
- 833.74392, 1125.83405, 1505.20759, &
- 1993.15829, 2614.86254, 3399.78420, &
- 4382.06240, 5600.87014, 7100.73115, &
- 8931.78242, 11149.97021, 13817.16841, &
- 17001.20930, 20775.81856, 23967.33875, &
- 25527.64563, 25671.22552, 24609.29622, &
- 22640.51220, 20147.13482, 17477.63530, &
- 14859.86462, 12414.92533, 10201.44191, &
- 8241.50255, 6534.43202, 5066.17865, &
- 3815.60705, 2758.60264, 1870.64631, &
- 1128.33931, 510.47983, 0.00000, &
- 0.00000 /
-
- data b48/ &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.01253, &
- 0.04887, 0.10724, 0.18455, &
- 0.27461, 0.36914, 0.46103, &
- 0.54623, 0.62305, 0.69099, &
- 0.75016, 0.80110, 0.84453, &
- 0.88127, 0.91217, 0.93803, &
- 0.95958, 0.97747, 0.99223, &
- 1.00000 /
-
-! High PBL resolution with top at 1 mb
-! SJL modified May 7, 2013 to ptop ~ 100 mb
- data a54/100.00000, 254.83931, 729.54278, &
- 1602.41121, 2797.50667, 4100.18977, &
- 5334.87140, 6455.24153, 7511.80944, &
- 8580.26355, 9714.44293, 10938.62253, &
- 12080.36051, 12987.13921, 13692.75084, &
- 14224.92180, 14606.55444, 14856.69953, &
- 14991.32121, 15023.90075, 14965.91493, &
- 14827.21612, 14616.33505, 14340.72252, &
- 14006.94280, 13620.82849, 13187.60470, &
- 12711.98873, 12198.27003, 11650.37451, &
- 11071.91608, 10466.23819, 9836.44706, &
- 9185.43852, 8515.96231, 7831.01080, &
- 7135.14301, 6436.71659, 5749.00215, &
- 5087.67188, 4465.67510, 3889.86419, &
- 3361.63433, 2879.51065, 2441.02496, &
- 2043.41345, 1683.80513, 1359.31122, &
- 1067.09135, 804.40101, 568.62625, &
- 357.32525, 168.33263, 0.00000, &
- 0.00000 /
-
- data b54/0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00180, 0.00694, 0.01510, &
- 0.02601, 0.03942, 0.05515, &
- 0.07302, 0.09288, 0.11459, &
- 0.13803, 0.16307, 0.18960, &
- 0.21753, 0.24675, 0.27716, &
- 0.30866, 0.34115, 0.37456, &
- 0.40879, 0.44375, 0.47935, &
- 0.51551, 0.55215, 0.58916, &
- 0.62636, 0.66334, 0.69946, &
- 0.73395, 0.76622, 0.79594, &
- 0.82309, 0.84780, 0.87020, &
- 0.89047, 0.90876, 0.92524, &
- 0.94006, 0.95336, 0.96529, &
- 0.97596, 0.98551, 0.99400, &
- 1.00000 /
-
-
-! The 56-L setup
- data a56/ 10.00000, 24.97818, 58.01160, &
- 115.21466, 199.29210, 309.39897, &
- 445.31785, 610.54747, 812.28518, &
- 1059.80882, 1363.07092, 1732.09335, &
- 2176.91502, 2707.68972, 3334.70962, &
- 4068.31964, 4918.76594, 5896.01890, &
- 7009.59166, 8268.36324, 9680.41211, &
- 11252.86491, 12991.76409, 14901.95764, &
- 16987.01313, 19249.15733, 21689.24182, &
- 23845.11055, 25330.63353, 26243.52467, &
- 26663.84998, 26657.94696, 26281.61371, &
- 25583.05256, 24606.03265, 23393.39510, &
- 21990.28845, 20445.82122, 18811.93894, &
- 17139.59660, 15473.90350, 13850.50167, &
- 12294.49060, 10821.62655, 9440.57746, &
- 8155.11214, 6965.72496, 5870.70511, &
- 4866.83822, 3949.90019, 3115.03562, &
- 2357.07879, 1670.87329, 1051.65120, &
- 495.51399, 0.00000, 0.00000 /
-
- data b56 /0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00462, 0.01769, 0.03821, &
- 0.06534, 0.09834, 0.13659, &
- 0.17947, 0.22637, 0.27660, &
- 0.32929, 0.38343, 0.43791, &
- 0.49162, 0.54361, 0.59319, &
- 0.63989, 0.68348, 0.72391, &
- 0.76121, 0.79545, 0.82679, &
- 0.85537, 0.88135, 0.90493, &
- 0.92626, 0.94552, 0.96286, &
- 0.97840, 0.99223, 1.00000 /
-
- data a60/ 1.7861000000e-01, 1.0805100000e+00, 3.9647100000e+00, &
- 9.7516000000e+00, 1.9816580000e+01, 3.6695950000e+01, &
- 6.2550570000e+01, 9.9199620000e+01, 1.4792505000e+02, &
- 2.0947487000e+02, 2.8422571000e+02, 3.7241721000e+02, &
- 4.7437835000e+02, 5.9070236000e+02, 7.2236063000e+02, &
- 8.7076746000e+02, 1.0378138800e+03, 1.2258877300e+03, &
- 1.4378924600e+03, 1.6772726600e+03, 1.9480506400e+03, &
- 2.2548762700e+03, 2.6030909400e+03, 2.9988059200e+03, &
- 3.4489952300e+03, 3.9616028900e+03, 4.5456641600e+03, &
- 5.2114401700e+03, 5.9705644000e+03, 6.8361981800e+03, &
- 7.8231906000e+03, 8.9482351000e+03, 1.0230010660e+04, &
- 1.1689289750e+04, 1.3348986860e+04, 1.5234111060e+04, &
- 1.7371573230e+04, 1.9789784580e+04, 2.2005564550e+04, &
- 2.3550115120e+04, 2.4468583320e+04, 2.4800548800e+04, &
- 2.4582445070e+04, 2.3849999620e+04, 2.2640519740e+04, &
- 2.0994737150e+04, 1.8957848730e+04, 1.6579413230e+04, &
- 1.4080071030e+04, 1.1753630920e+04, 9.6516996300e+03, &
- 7.7938009300e+03, 6.1769062800e+03, 4.7874276000e+03, &
- 3.6050497500e+03, 2.6059860700e+03, 1.7668328200e+03, &
- 1.0656131200e+03, 4.8226201000e+02, 0.0000000000e+00, &
- 0.0000000000e+00 /
-
-
- data b60/ 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 5.0600000000e-03, &
- 2.0080000000e-02, 4.4900000000e-02, 7.9360000000e-02, &
- 1.2326000000e-01, 1.7634000000e-01, 2.3820000000e-01, &
- 3.0827000000e-01, 3.8581000000e-01, 4.6989000000e-01, &
- 5.5393000000e-01, 6.2958000000e-01, 6.9642000000e-01, &
- 7.5458000000e-01, 8.0463000000e-01, 8.4728000000e-01, &
- 8.8335000000e-01, 9.1368000000e-01, 9.3905000000e-01, &
- 9.6020000000e-01, 9.7775000000e-01, 9.9223000000e-01, &
- 1.0000000000e+00 /
-
-!! This is activated by USE_GFSL63
-!! Thfollowing L63 setting is the same as NCEP GFS's L64 except the top
-!! 3 layers
-! data a63/64.247, 137.790, 221.958, &
-! 318.266, 428.434, 554.424, &
-! 698.457, 863.05803, 1051.07995, &
-! 1265.75194, 1510.71101, 1790.05098, &
-! 2108.36604, 2470.78817, 2883.03811, &
-! 3351.46002, 3883.05187, 4485.49315, &
-! 5167.14603, 5937.04991, 6804.87379, &
-! 7780.84698, 8875.64338, 10100.20534, &
-! 11264.35673, 12190.64366, 12905.42546, &
-! 13430.87867, 13785.88765, 13986.77987, &
-! 14047.96335, 13982.46770, 13802.40331, &
-! 13519.33841, 13144.59486, 12689.45608, &
-! 12165.28766, 11583.57006, 10955.84778, &
-! 10293.60402, 9608.08306, 8910.07678, &
-! 8209.70131, 7516.18560, 6837.69250, &
-! 6181.19473, 5552.39653, 4955.72632, &
-! 4394.37629, 3870.38682, 3384.76586, &
-! 2937.63489, 2528.37666, 2155.78385, &
-! 1818.20722, 1513.68173, 1240.03585, &
-! 994.99144, 776.23591, 581.48797, &
-! 408.53400, 255.26520, 119.70243, 0. /
-!
-! data b63/0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00201, 0.00792, 0.01755, &
-! 0.03079, 0.04751, 0.06761, &
-! 0.09097, 0.11746, 0.14690, &
-! 0.17911, 0.21382, 0.25076, &
-! 0.28960, 0.32994, 0.37140, &
-! 0.41353, 0.45589, 0.49806, &
-! 0.53961, 0.58015, 0.61935, &
-! 0.65692, 0.69261, 0.72625, &
-! 0.75773, 0.78698, 0.81398, &
-! 0.83876, 0.86138, 0.88192, &
-! 0.90050, 0.91722, 0.93223, &
-! 0.94565, 0.95762, 0.96827, &
-! 0.97771, 0.98608, 0.99347, 1./
-#ifdef GFSL64
-! data a64/20.00000, 68.00000, 137.79000, &
-! 221.95800, 318.26600, 428.43400, &
-! 554.42400, 698.45700, 863.05803, &
-! 1051.07995, 1265.75194, 1510.71101, &
-! 1790.05098, 2108.36604, 2470.78817, &
-! 2883.03811, 3351.46002, 3883.05187, &
-! 4485.49315, 5167.14603, 5937.04991, &
-! 6804.87379, 7780.84698, 8875.64338, &
-! 9921.40745, 10760.99844, 11417.88354, &
-! 11911.61193, 12258.61668, 12472.89642, &
-! 12566.58298, 12550.43517, 12434.26075, &
-! 12227.27484, 11938.39468, 11576.46910, &
-! 11150.43640, 10669.41063, 10142.69482, &
-! 9579.72458, 8989.94947, 8382.67090, &
-! 7766.85063, 7150.91171, 6542.55077, &
-! 5948.57894, 5374.81094, 4825.99383, &
-! 4305.79754, 3816.84622, 3360.78848, &
-! 2938.39801, 2549.69756, 2194.08449, &
-! 1870.45732, 1577.34218, 1313.00028, &
-! 1075.52114, 862.90778, 673.13815, &
-! 504.22118, 354.22752, 221.32110, &
-! 103.78014, 0./
-! data b64/0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00000, 0.00000, 0.00000, &
-! 0.00179, 0.00705, 0.01564, &
-! 0.02749, 0.04251, 0.06064, &
-! 0.08182, 0.10595, 0.13294, &
-! 0.16266, 0.19492, 0.22950, &
-! 0.26615, 0.30455, 0.34435, &
-! 0.38516, 0.42656, 0.46815, &
-! 0.50949, 0.55020, 0.58989, &
-! 0.62825, 0.66498, 0.69987, &
-! 0.73275, 0.76351, 0.79208, &
-! 0.81845, 0.84264, 0.86472, &
-! 0.88478, 0.90290, 0.91923, &
-! 0.93388, 0.94697, 0.95865, &
-! 0.96904, 0.97826, 0.98642, &
-! 0.99363, 1./
- data a64/20.00000, 64.24700, 137.79000, &
- 221.95800, 318.26600, 428.43400, &
- 554.42400, 698.45700, 863.05800, &
- 1051.08000, 1265.75200, 1510.71100, &
- 1790.05100, 2108.36600, 2470.78800, &
- 2883.03800, 3351.46000, 3883.05200, &
- 4485.49300, 5167.14600, 5937.05000, &
- 6804.87400, 7777.15000, 8832.53700, &
- 9936.61400, 11054.85300, 12152.93700, &
- 13197.06500, 14154.31600, 14993.07400, &
- 15683.48900, 16197.96700, 16511.73000, &
- 16611.60300, 16503.14400, 16197.31500, &
- 15708.89300, 15056.34200, 14261.43500, &
- 13348.67100, 12344.49000, 11276.34800, &
- 10171.71200, 9057.05100, 7956.90800, &
- 6893.11700, 5884.20600, 4945.02900, &
- 4086.61400, 3316.21700, 2637.55300, &
- 2051.15000, 1554.78900, 1143.98800, &
- 812.489000, 552.72000, 356.22300, &
- 214.015000, 116.89900, 55.71200, &
- 21.516000, 5.74100, 0.57500, &
- 0.000000, 0./
- data b64/0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 3.697e-05, 0.00043106, &
- 0.00163591, 0.00410671, 0.00829402, &
- 0.01463712, 0.02355588, 0.03544162, &
- 0.05064684, 0.06947458, 0.09216691, &
- 0.11881219, 0.14926877, 0.18329624, &
- 0.22057019, 0.26068545, 0.30316412, &
- 0.34746849, 0.39301826, 0.43921080, &
- 0.48544331, 0.53113482, 0.57574665, &
- 0.61879962, 0.65988704, 0.69868292, &
- 0.73494523, 0.76851468, 0.79930974, &
- 0.82731884, 0.85259067, 0.87522360, &
- 0.89535499, 0.91315100, 0.92879731, &
- 0.94249106, 0.95443411, 0.96482757, &
- 0.9738676, 0.98174229, 0.98862660, &
- 0.99467119, 1./
-
-#else
- data a64/1.00000, 3.90000, 8.70000, &
- 15.42000, 24.00000, 34.50000, &
- 47.00000, 61.50000, 78.60000, &
- 99.13500, 124.12789, 154.63770, &
- 191.69700, 236.49300, 290.38000, &
- 354.91000, 431.82303, 523.09300, &
- 630.92800, 757.79000, 906.45000, &
- 1079.85000, 1281.00000, 1515.00000, &
- 1788.00000, 2105.00000, 2470.00000, &
- 2889.00000, 3362.00000, 3890.00000, &
- 4475.00000, 5120.00000, 5830.00000, &
- 6608.00000, 7461.00000, 8395.00000, &
- 9424.46289, 10574.46880, 11864.80270, &
- 13312.58890, 14937.03710, 16759.70700, &
- 18804.78710, 21099.41210, 23674.03710, &
- 26562.82810, 29804.11720, 32627.31640, &
- 34245.89840, 34722.28910, 34155.19920, &
- 32636.50390, 30241.08200, 27101.44920, &
- 23362.20700, 19317.05270, 15446.17090, &
- 12197.45210, 9496.39941, 7205.66992, &
- 5144.64307, 3240.79346, 1518.62134, &
- 0.00000, 0.00000 /
-
- data b64/0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00813, &
- 0.03224, 0.07128, 0.12445, &
- 0.19063, 0.26929, 0.35799, &
- 0.45438, 0.55263, 0.64304, &
- 0.71703, 0.77754, 0.82827, &
- 0.87352, 0.91502, 0.95235, &
- 0.98511, 1.00000 /
-#endif
-!-->cjg
- data a68/1.00000, 2.68881, 5.15524, &
- 8.86683, 14.20349, 22.00278, &
- 33.50807, 50.32362, 74.56680, &
- 109.05958, 157.51214, 224.73844, &
- 316.90481, 441.81219, 609.21090, &
- 831.14537, 1122.32514, 1500.51628, &
- 1986.94617, 2606.71274, 3389.18802, &
- 4368.40473, 5583.41379, 7078.60015, &
- 8903.94455, 11115.21886, 13774.60566, &
- 16936.82070, 20340.47045, 23193.71492, &
- 24870.36141, 25444.59363, 25252.57081, &
- 24544.26211, 23474.29096, 22230.65331, &
- 20918.50731, 19589.96280, 18296.26682, &
- 17038.02866, 15866.85655, 14763.18943, &
- 13736.83624, 12794.11850, 11930.72442, &
- 11137.17217, 10404.78946, 9720.03954, &
- 9075.54055, 8466.72650, 7887.12346, &
- 7333.90490, 6805.43028, 6297.33773, &
- 5805.78227, 5327.94995, 4859.88765, &
- 4398.63854, 3942.81761, 3491.08449, &
- 3043.04531, 2598.71608, 2157.94527, &
- 1720.87444, 1287.52805, 858.02944, &
- 432.71276, 8.10905, 0.00000 /
-
- data b68/0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00283, 0.01590, &
- 0.04412, 0.08487, 0.13284, &
- 0.18470, 0.23828, 0.29120, &
- 0.34211, 0.39029, 0.43518, &
- 0.47677, 0.51536, 0.55091, &
- 0.58331, 0.61263, 0.63917, &
- 0.66333, 0.68552, 0.70617, &
- 0.72555, 0.74383, 0.76117, &
- 0.77765, 0.79335, 0.80838, &
- 0.82287, 0.83693, 0.85069, &
- 0.86423, 0.87760, 0.89082, &
- 0.90392, 0.91689, 0.92973, &
- 0.94244, 0.95502, 0.96747, &
- 0.97979, 0.99200, 1.00000 /
-
- data a96/1.00000, 2.35408, 4.51347, &
- 7.76300, 12.43530, 19.26365, &
- 29.33665, 44.05883, 65.28397, &
- 95.48274, 137.90344, 196.76073, &
- 277.45330, 386.81095, 533.37018, &
- 727.67600, 982.60677, 1313.71685, &
- 1739.59104, 2282.20281, 2967.26766, &
- 3824.58158, 4888.33404, 6197.38450, &
- 7795.49158, 9731.48414, 11969.71024, &
- 14502.88894, 17304.52434, 20134.76139, &
- 22536.63814, 24252.54459, 25230.65591, &
- 25585.72044, 25539.91412, 25178.87141, &
- 24644.84493, 23978.98781, 23245.49366, &
- 22492.11600, 21709.93990, 20949.64473, &
- 20225.94258, 19513.31158, 18829.32485, &
- 18192.62250, 17589.39396, 17003.45386, &
- 16439.01774, 15903.91204, 15396.39758, &
- 14908.02140, 14430.65897, 13967.88643, &
- 13524.16667, 13098.30227, 12687.56457, &
- 12287.08757, 11894.41553, 11511.54106, &
- 11139.22483, 10776.01912, 10419.75711, &
- 10067.11881, 9716.63489, 9369.61967, &
- 9026.69066, 8687.29884, 8350.04978, &
- 8013.20925, 7677.12187, 7343.12994, &
- 7011.62844, 6681.98102, 6353.09764, &
- 6025.10535, 5699.10089, 5375.54503, &
- 5053.63074, 4732.62740, 4413.38037, &
- 4096.62775, 3781.79777, 3468.45371, &
- 3157.19882, 2848.25306, 2541.19150, &
- 2236.21942, 1933.50628, 1632.83741, &
- 1334.35954, 1038.16655, 744.22318, &
- 452.71094, 194.91899, 0.00000, &
- 0.00000 /
-
- data b96/0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00193, &
- 0.00974, 0.02538, 0.04876, &
- 0.07817, 0.11081, 0.14514, &
- 0.18007, 0.21486, 0.24866, &
- 0.28088, 0.31158, 0.34030, &
- 0.36701, 0.39210, 0.41554, &
- 0.43733, 0.45774, 0.47707, &
- 0.49540, 0.51275, 0.52922, &
- 0.54495, 0.56007, 0.57459, &
- 0.58850, 0.60186, 0.61471, &
- 0.62715, 0.63922, 0.65095, &
- 0.66235, 0.67348, 0.68438, &
- 0.69510, 0.70570, 0.71616, &
- 0.72651, 0.73675, 0.74691, &
- 0.75700, 0.76704, 0.77701, &
- 0.78690, 0.79672, 0.80649, &
- 0.81620, 0.82585, 0.83542, &
- 0.84492, 0.85437, 0.86375, &
- 0.87305, 0.88229, 0.89146, &
- 0.90056, 0.90958, 0.91854, &
- 0.92742, 0.93623, 0.94497, &
- 0.95364, 0.96223, 0.97074, &
- 0.97918, 0.98723, 0.99460, &
- 1.00000 /
-!<--cjg
-!
-! Ultra high troposphere resolution
- data a100/100.00000, 300.00000, 800.00000, &
- 1762.35235, 3106.43596, 4225.71874, &
- 4946.40525, 5388.77387, 5708.35540, &
- 5993.33124, 6277.73673, 6571.49996, &
- 6877.05339, 7195.14327, 7526.24920, &
- 7870.82981, 8229.35361, 8602.30193, &
- 8990.16936, 9393.46399, 9812.70768, &
- 10248.43625, 10701.19980, 11171.56286, &
- 11660.10476, 12167.41975, 12694.11735, &
- 13240.82253, 13808.17600, 14396.83442, &
- 15007.47066, 15640.77407, 16297.45067, &
- 16978.22343, 17683.83253, 18415.03554, &
- 19172.60771, 19957.34218, 20770.05022, &
- 21559.14829, 22274.03147, 22916.87519, &
- 23489.70456, 23994.40187, 24432.71365, &
- 24806.25734, 25116.52754, 25364.90190, &
- 25552.64670, 25680.92203, 25750.78675, &
- 25763.20311, 25719.04113, 25619.08274, &
- 25464.02630, 25254.49482, 24991.06137, &
- 24674.32737, 24305.11235, 23884.79781, &
- 23415.77059, 22901.76510, 22347.84738, &
- 21759.93950, 21144.07284, 20505.73136, &
- 19849.54271, 19179.31412, 18498.23400, &
- 17809.06809, 17114.28232, 16416.10343, &
- 15716.54833, 15017.44246, 14320.43478, &
- 13627.01116, 12938.50682, 12256.11762, &
- 11580.91062, 10913.83385, 10255.72526, &
- 9607.32122, 8969.26427, 8342.11044, &
- 7726.33606, 7122.34405, 6530.46991, &
- 5950.98721, 5384.11279, 4830.01153, &
- 4288.80090, 3760.55514, 3245.30920, &
- 2743.06250, 2253.78294, 1777.41285, &
- 1313.88054, 863.12371, 425.13088, &
- 0.00000, 0.00000 /
-
-
- data b100/0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00000, 0.00000, 0.00000, &
- 0.00052, 0.00209, 0.00468, &
- 0.00828, 0.01288, 0.01849, &
- 0.02508, 0.03266, 0.04121, &
- 0.05075, 0.06126, 0.07275, &
- 0.08521, 0.09866, 0.11308, &
- 0.12850, 0.14490, 0.16230, &
- 0.18070, 0.20009, 0.22042, &
- 0.24164, 0.26362, 0.28622, &
- 0.30926, 0.33258, 0.35605, &
- 0.37958, 0.40308, 0.42651, &
- 0.44981, 0.47296, 0.49591, &
- 0.51862, 0.54109, 0.56327, &
- 0.58514, 0.60668, 0.62789, &
- 0.64872, 0.66919, 0.68927, &
- 0.70895, 0.72822, 0.74709, &
- 0.76554, 0.78357, 0.80117, &
- 0.81835, 0.83511, 0.85145, &
- 0.86736, 0.88286, 0.89794, &
- 0.91261, 0.92687, 0.94073, &
- 0.95419, 0.96726, 0.97994, &
- 0.99223, 1.00000 /
-
- data a104/ &
- 1.8827062944e-01, 7.7977549145e-01, 2.1950593583e+00, &
- 4.9874566624e+00, 9.8041418997e+00, 1.7019717163e+01, &
- 2.7216579591e+01, 4.0518628401e+01, 5.6749646818e+01, &
- 7.5513868331e+01, 9.6315093333e+01, 1.1866706195e+02, &
- 1.4216835396e+02, 1.6653733709e+02, 1.9161605772e+02, &
- 2.1735580129e+02, 2.4379516604e+02, 2.7103771847e+02, &
- 2.9923284173e+02, 3.2856100952e+02, 3.5922338766e+02, &
- 3.9143507908e+02, 4.2542117983e+02, 4.6141487902e+02, &
- 4.9965698106e+02, 5.4039638379e+02, 5.8389118154e+02, &
- 6.3041016829e+02, 6.8023459505e+02, 7.3366009144e+02, &
- 7.9099869949e+02, 8.5258099392e+02, 9.1875827946e+02, &
- 9.8990486716e+02, 1.0664204381e+03, 1.1487325074e+03, &
- 1.2372990044e+03, 1.3326109855e+03, 1.4351954993e+03, &
- 1.5456186222e+03, 1.6644886848e+03, 1.7924597105e+03, &
- 1.9302350870e+03, 2.0785714934e+03, 2.2382831070e+03, &
- 2.4102461133e+03, 2.5954035462e+03, 2.7947704856e+03, &
- 3.0094396408e+03, 3.2405873512e+03, 3.4894800360e+03, &
- 3.7574811281e+03, 4.0460585279e+03, 4.3567926151e+03, &
- 4.6913848588e+03, 5.0516670674e+03, 5.4396113207e+03, &
- 5.8573406270e+03, 6.3071403487e+03, 6.7914704368e+03, &
- 7.3129785102e+03, 7.8745138115e+03, 8.4791420557e+03, &
- 9.1301611750e+03, 9.8311179338e+03, 1.0585825354e+04, &
- 1.1398380836e+04, 1.2273184781e+04, 1.3214959424e+04, &
- 1.4228767429e+04, 1.5320029596e+04, 1.6494540743e+04, &
- 1.7758482452e+04, 1.9118430825e+04, 2.0422798801e+04, &
- 2.1520147587e+04, 2.2416813461e+04, 2.3118184510e+04, &
- 2.3628790785e+04, 2.3952411814e+04, 2.4092209011e+04, &
- 2.4050892106e+04, 2.3830930156e+04, 2.3434818358e+04, &
- 2.2865410898e+04, 2.2126326004e+04, 2.1222420323e+04, &
- 2.0160313690e+04, 1.8948920926e+04, 1.7599915822e+04, &
- 1.6128019809e+04, 1.4550987232e+04, 1.2889169132e+04, &
- 1.1164595563e+04, 9.4227665517e+03, 7.7259097899e+03, &
- 6.1538244381e+03, 4.7808126007e+03, 3.5967415552e+03, &
- 2.5886394104e+03, 1.7415964865e+03, 1.0393721271e+03, &
- 4.6478852032e+02, 7.0308342481e-13, 0.0000000000e+00 /
-
-
- data b104/ &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, &
- 0.0000000000e+00, 0.0000000000e+00, 1.5648447298e-03, &
- 6.2617046389e-03, 1.4104157933e-02, 2.5118187415e-02, &
- 3.9340510972e-02, 5.6816335609e-02, 7.7596328431e-02, &
- 1.0173255472e-01, 1.2927309709e-01, 1.6025505622e-01, &
- 1.9469566981e-01, 2.3258141217e-01, 2.7385520518e-01, &
- 3.1840233814e-01, 3.6603639170e-01, 4.1648734767e-01, &
- 4.6939496013e-01, 5.2431098738e-01, 5.8071350676e-01, &
- 6.3803478105e-01, 6.9495048840e-01, 7.4963750338e-01, &
- 7.9975208897e-01, 8.4315257576e-01, 8.8034012292e-01, &
- 9.1184389721e-01, 9.3821231526e-01, 9.6000677644e-01, &
- 9.7779792223e-01, 9.9216315122e-01, 1.0000000000e+00 /
-
-! IFS-like L125(top 12 levels removed from IFSL137)
- data a125/ 64., &
- 86.895882, 107.415741, 131.425507, 159.279404, 191.338562, &
- 227.968948, 269.539581, 316.420746, 368.982361, 427.592499, 492.616028, &
- 564.413452, 643.339905, 729.744141, 823.967834, 926.344910, 1037.201172, &
- 1156.853638, 1285.610352, 1423.770142, 1571.622925, 1729.448975, 1897.519287, &
- 2076.095947, 2265.431641, 2465.770508, 2677.348145, 2900.391357, 3135.119385, &
- 3381.743652, 3640.468262, 3911.490479, 4194.930664, 4490.817383, 4799.149414, &
- 5119.895020, 5452.990723, 5798.344727, 6156.074219, 6526.946777, 6911.870605, &
- 7311.869141, 7727.412109, 8159.354004, 8608.525391, 9076.400391, 9562.682617, &
- 10065.978516, 10584.631836, 11116.662109, 11660.067383, 12211.547852, 12766.873047, &
- 13324.668945, 13881.331055, 14432.139648, 14975.615234, 15508.256836, 16026.115234, &
- 16527.322266, 17008.789063, 17467.613281, 17901.621094, 18308.433594, 18685.718750, &
- 19031.289063, 19343.511719, 19620.042969, 19859.390625, 20059.931641, 20219.664063, &
- 20337.863281, 20412.308594, 20442.078125, 20425.718750, 20361.816406, 20249.511719, &
- 20087.085938, 19874.025391, 19608.572266, 19290.226563, 18917.460938, 18489.707031, &
- 18006.925781, 17471.839844, 16888.687500, 16262.046875, 15596.695313, 14898.453125, &
- 14173.324219, 13427.769531, 12668.257813, 11901.339844, 11133.304688, 10370.175781, &
- 9617.515625, 8880.453125, 8163.375000, 7470.343750, 6804.421875, 6168.531250, &
- 5564.382813, 4993.796875, 4457.375000, 3955.960938, 3489.234375, 3057.265625, &
- 2659.140625, 2294.242188, 1961.500000, 1659.476563, 1387.546875, 1143.250000, &
- 926.507813, 734.992188, 568.062500, 424.414063, 302.476563, 202.484375, &
- 122.101563, 62.781250, 22.835938, 3.757813, 0.000000, 0.000000 /
-
- data b125/ 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
- 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
- 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
- 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
- 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
- 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
- 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, &
- 0.000000, 0.000007, 0.000024, 0.000059, 0.000112, 0.000199, &
- 0.000340, 0.000562, 0.000890, 0.001353, 0.001992, 0.002857, &
- 0.003971, 0.005378, 0.007133, 0.009261, 0.011806, 0.014816, &
- 0.018318, 0.022355, 0.026964, 0.032176, 0.038026, 0.044548, &
- 0.051773, 0.059728, 0.068448, 0.077958, 0.088286, 0.099462, &
- 0.111505, 0.124448, 0.138313, 0.153125, 0.168910, 0.185689, &
- 0.203491, 0.222333, 0.242244, 0.263242, 0.285354, 0.308598, &
- 0.332939, 0.358254, 0.384363, 0.411125, 0.438391, 0.466003, &
- 0.493800, 0.521619, 0.549301, 0.576692, 0.603648, 0.630036, &
- 0.655736, 0.680643, 0.704669, 0.727739, 0.749797, 0.770798, &
- 0.790717, 0.809536, 0.827256, 0.843881, 0.859432, 0.873929, &
- 0.887408, 0.899900, 0.911448, 0.922096, 0.931881, 0.940860, &
- 0.949064, 0.956550, 0.963352, 0.969513, 0.975078, 0.980072, &
- 0.984542, 0.988500, 0.991984, 0.995003, 0.997630, 1.000000 /
-
- select case (km)
-
- case (24)
-
+
+ if (trim(scm_state%npz_type) == 'superC' .or. trim(scm_state%npz_type) == 'superK') then
+ auto_routine = 1
+ select case (km)
+ case (20)
+ ptop = 56.e2
+ pint = ptop
+ stretch_fac = 1.03
+ case (24)
+ ptop = 56.e2
+ pint = ptop
+ stretch_fac = 1.03
+ case (30)
+ ptop = 56.e2
+ pint = ptop
+ stretch_fac = 1.03
+ case (40)
+ ptop = 56.e2
+ pint = ptop
+ stretch_fac = 1.03
+ case (50)
+ ptop = 56.e2
+ pint = ptop
+ stretch_fac = 1.03
+ case (60)
+ ptop = 56.e2
+ pint = ptop
+ stretch_fac = 1.03
+ case (80)
+ ptop = 56.e2
+ pint = ptop
+ stretch_fac = 1.03
+ case (90) ! super-duper cell
+ ptop = 40.e2
+ stretch_fac = 1.025
+ auto_routine = 2
+ end select
+ else if (trim(scm_state%npz_type) == 'input') then
+
+ !> - Open the appropriate file.
+ open(unit=1, file=scm_state%vert_coord_file, status='old', action='read', iostat=ierr)
+ if(ierr /= 0) then
+ write(*,*) 'There was an error opening the file ', scm_state%vert_coord_file, ' in the run directory. &
+ Error code = ',ierr
+ stop
+ endif
+
+ !> The file being read in must have the following format:
+ !! include a single line description: number of coefficients, number of layers
+ !! ak/bk pairs, with each pair occupying a single line
+ !! the pairs must be ordered from surface to TOA
+ !! the pairs define the interfaces of the grid to create levels-1 layer
+
+ !> - The first line contains the number of coefficients and number of levels
+ read(1,*) dummy, n_levels_file
+ if (n_levels_file /= scm_state%n_levels) then
+ write(*,*) 'There is a mismatch in the number of levels expected and the number of coefficients supplied in the file ',scm_state%vert_coord_file
+ stop
+ end if
+ !> - Read in the coefficient data.
+ do k=1, km+1
+ read(1,*) scm_state%a_k(k), scm_state%b_k(k)
+ end do
+ close(1)
+
+ ! flip scm_state%a_k, scm_state%b_k in vertical (a_k and b_k are expected to be TOA-to-surface at this point)
+ mid_index = (km+1)/2
+ last_index = km+1
+ do k = 1, mid_index
+ ak_tmp = scm_state%a_k(k)
+ bk_tmp = scm_state%b_k(k)
+ scm_state%a_k(k) = scm_state%a_k(last_index)
+ scm_state%b_k(k) = scm_state%b_k(last_index)
+ scm_state%a_k(last_index) = ak_tmp
+ scm_state%b_k(last_index) = bk_tmp
+ last_index = last_index - 1
+ end do
+
+ else
+ select case (km)
+ case (5,10) ! does this work????
+ ! Equivalent Shallow Water: for modon test
+ ptop = 500.e2
+ ks = 0
+ do k=1,km+1
+ scm_state%b_k(k) = real(k-1) / real (km)
+ scm_state%a_k(k) = ptop*(1.-scm_state%b_k(k))
+ enddo
+ case (24)
ks = 5
do k=1,km+1
scm_state%a_k(k) = a24(k)
scm_state%b_k(k) = b24(k)
enddo
-
- case (26)
-
+ case (26)
ks = 7
do k=1,km+1
scm_state%a_k(k) = a26(k)
scm_state%b_k(k) = b26(k)
enddo
-
+ case (30) ! For Baroclinic Instability Test
+ ptop = 2.26e2
+ pint = 250.E2
+ stretch_fac = 1.03
+ auto_routine = 1
+ case (31) ! N = 4, M=2
+ if (trim(scm_state%npz_type) == 'lowtop') then
+ ptop = 300.
+ pint = 100.E2
+ stretch_fac = 1.035
+ auto_routine = 5
+ else
+ ptop = 100.
+ stretch_fac = 1.035
+ auto_routine = 1
+ endif
case (32)
-#ifdef OLD_32
- ks = 13 ! high-res trop_32 setup
-#else
+ if (trim(scm_state%npz_type) == 'old32') then
+ ks = 13 ! high-res trop_32 setup
+ do k=1,km+1
+ scm_state%a_k(k) = a32old(k)
+ scm_state%b_k(k) = b32old(k)
+ enddo
+ elseif (trim(scm_state%npz_type) == 'lowtop') then
+ ptop = 100.
+ stretch_fac = 1.035
+ auto_routine = 1
+ else
+ ks = 7
+ do k=1,km+1
+ scm_state%a_k(k) = a32(k)
+ scm_state%b_k(k) = b32(k)
+ enddo
+ endif
+ !miz
+ case (33)
ks = 7
-#endif
do k=1,km+1
- scm_state%a_k(k) = a32(k)
- scm_state%b_k(k) = b32(k)
+ scm_state%a_k(k) = a33(k)
+ scm_state%b_k(k) = b33(k)
enddo
-
- case (47)
- ! ks = 27 ! high-res trop-strat
- ks = 20 ! Oct 23, 2012
- do k=1,km+1
- scm_state%a_k(k) = a47(k)
- scm_state%b_k(k) = b47(k)
- enddo
-
+ !miz
+ case (39) ! N = 5
+ ptop = 100.
+ stretch_fac = 1.035
+ auto_routine = 1
+ case (40)
+ ptop = 50.e2 ! For super cell test
+ pint = 300.E2
+ stretch_fac = 1.03
+ auto_routine = 1
+ case (41)
+ ptop = 100.
+ pint = 100.E2
+ stretch_fac = 1.035
+ auto_routine = 1
+ case (47)
+ if (trim(scm_state%npz_type) == 'lowtop') then
+ ptop = 100.
+ stretch_fac = 1.035
+ auto_routine = 1
+ else
+ ! ks = 27 ! high-res trop-strat
+ ks = 20 ! Oct 23, 2012
+ do k=1,km+1
+ scm_state%a_k(k) = a47(k)
+ scm_state%b_k(k) = b47(k)
+ enddo
+ endif
case (48)
ks = 28
do k=1,km+1
scm_state%a_k(k) = a48(k)
scm_state%b_k(k) = b48(k)
enddo
-
- case (52)
- ks = 35 ! pint = 223
+ case (50)
+ ! ! *Very-low top: for idealized super-cell simulation:
+ ! ptop = 50.e2
+ ! pint = 250.E2
+ ! stretch_fac = 1.03
+ ! auto_routine = 1
+ ks = 19
do k=1,km+1
- scm_state%a_k(k) = a52(k)
- scm_state%b_k(k) = b52(k)
+ scm_state%a_k(k) = a50(k)
+ scm_state%b_k(k) = b50(k)
enddo
-
+ case (51)
+ if (trim(scm_state%npz_type) == 'lowtop') then
+ ptop = 100.
+ stretch_fac = 1.03
+ auto_routine = 1
+ elseif (trim(scm_state%npz_type) == 'meso') then
+ ptop = 20.E2
+ pint = 100.E2
+ stretch_fac = 1.05
+ auto_routine = 1
+ elseif (trim(scm_state%npz_type) == 'meso2') then
+ ptop = 1.E2
+ pint = 100.E2
+ stretch_fac = 1.05
+ auto_routine = 6
+ else
+ ptop = 100.
+ pint = 100.E2
+ stretch_fac = 1.035
+ auto_routine = 1
+ endif
+ case (52)
+ if (trim(scm_state%npz_type) == 'rce') then
+ ptop = 30.e2 ! for special DPM RCE experiments
+ stretch_fac = 1.03
+ auto_routine = 1
+ else
+ ks = 35 ! pint = 223
+ do k=1,km+1
+ scm_state%a_k(k) = a52(k)
+ scm_state%b_k(k) = b52(k)
+ enddo
+ endif
case (54)
ks = 11 ! pint = 109.4
do k=1,km+1
scm_state%a_k(k) = a54(k)
scm_state%b_k(k) = b54(k)
enddo
-
+ case (55) ! Mid-top: ! N = 7
+ ptop = 10.
+ pint = 100.E2
+ stretch_fac = 1.035
+ auto_routine = 1
case (56)
ks = 26
do k=1,km+1
scm_state%a_k(k) = a56(k)
scm_state%b_k(k) = b56(k)
enddo
-
case (60)
- ks = 37
- do k=1,km+1
- scm_state%a_k(k) = a60(k)
- scm_state%b_k(k) = b60(k)
- enddo
-
-
+ if (trim(scm_state%npz_type) == 'gfs') then
+ ks = 20
+ do k=1,km+1
+ scm_state%a_k(k) = a60gfs(k)
+ scm_state%b_k(k) = b60gfs(k)
+ enddo
+ else if (trim(scm_state%npz_type) == 'BCwave') then
+ ptop = 3.e2
+ ! pint = 250.E2
+ pint = 300.E2 ! revised for Moist test
+ stretch_fac = 1.03
+ auto_routine = 1
+ else if (trim(scm_state%npz_type) == 'meso') then
+ ptop = 40.e2
+ pint = 250.E2
+ stretch_fac = 1.03
+ auto_routine = 1
+ else
+ ks = 19
+ do k=1,km+1
+ scm_state%a_k(k) = a60(k)
+ scm_state%b_k(k) = b60(k)
+ enddo
+ endif
+ case (63)
+ if (trim(scm_state%npz_type) == 'meso') then
+ ks = 11
+ do k=1,km+1
+ scm_state%a_k(k) = a63meso(k)
+ scm_state%b_k(k) = b63meso(k)
+ enddo
+ elseif (trim(scm_state%npz_type) == 'hitop') then
+ ptop = 1. ! high top
+ pint = 100.E2
+ stretch_fac = 1.035
+ auto_routine = 1
+ else!if (trim(scm_state%npz_type) == 'gfs') then
+ !Used for SHiELD
+ ! GFS L64 equivalent setting
+ ks = 23
+ do k=1,km+1
+ scm_state%a_k(k) = a63(k)
+ scm_state%b_k(k) = b63(k)
+ enddo
+ endif
case (64)
-#ifdef GFSL64
- ks = 23
-#else
- ks = 46
-#endif
- do k=1,km+1
- scm_state%a_k(k) = a64(k)
- scm_state%b_k(k) = b64(k)
- enddo
- !-->cjg
+ if (trim(scm_state%npz_type) == 'gfs') then
+ ks = 23
+ do k=1,km+1
+ scm_state%a_k(k) = a64gfs(k)
+ scm_state%b_k(k) = b64gfs(k)
+ enddo
+ else
+ ks = 46
+ do k=1,km+1
+ scm_state%a_k(k) = a64(k)
+ scm_state%b_k(k) = b64(k)
+ enddo
+ endif
+ !-->cjg
case (68)
ks = 27
do k=1,km+1
scm_state%a_k(k) = a68(k)
scm_state%b_k(k) = b68(k)
enddo
-
+ case (71) ! N = 9
+ ptop = 1.
+ stretch_fac = 1.03
+ auto_routine = 1
+ case (75) ! HS-SGO test configuration
+ pint = 100.E2
+ ptop = 10.E2
+ stretch_fac = 1.035
+ auto_routine = 6
+ case (79) ! N = 10, M=5
+ if (trim(scm_state%npz_type) == 'gcrm') then
+ pint = 100.E2
+ ptop = 3.E2
+ stretch_fac = 1.035
+ auto_routine = 6
+ else
+ ptop = 1.
+ stretch_fac = 1.03
+ auto_routine = 1
+ endif
+ case (90) ! super-duper cell
+ ptop = 40.e2
+ stretch_fac = 1.025
+ auto_routine = 2
+ case (91) ! NGGPS_GFS
+ pint = 100.E2
+ ptop = 40.
+ stretch_fac = 1.029
+ auto_routine = 6
+ case (95)
+ ! Mid-top settings:
+ pint = 100.E2
+ ptop = 20.
+ stretch_fac = 1.029
+ auto_routine = 6
case (96)
ks = 27
do k=1,km+1
scm_state%a_k(k) = a96(k)
scm_state%b_k(k) = b96(k)
enddo
- !<--cjg
-
+ !<--cjg
case (100)
ks = 38
do k=1,km+1
scm_state%a_k(k) = a100(k)
scm_state%b_k(k) = b100(k)
enddo
-
case (104)
ks = 73
do k=1,km+1
scm_state%a_k(k) = a104(k)
scm_state%b_k(k) = b104(k)
enddo
-
-#ifndef TEST_GWAVES
- case (10)
- !--------------------------------------------------
- ! Pure sigma-coordinate with uniform spacing in "z"
- !--------------------------------------------------
- !
- pt = 2000. ! model top pressure (pascal)
- ! pt = 100. ! 1 mb
- press(1) = pt
- press(km+1) = p0
- dlnp = (log(p0) - log(pt)) / real(km)
-
- lnpe = log(press(km+1))
- do k=km,2,-1
- lnpe = lnpe - dlnp
- press(k) = exp(lnpe)
- enddo
-
- ! Search KS
- ks = 0
- do k=1,km
- if(press(k) >= pc) then
- ks = k-1
- goto 123
- endif
- enddo
-123 continue
-
- if(ks /= 0) then
- do k=1,ks
- scm_state%a_k(k) = press(k)
- scm_state%b_k(k) = 0.
- enddo
- endif
-
- pint = press(ks+1)
- do k=ks+1,km
- scm_state%a_k(k) = pint*(press(km)-press(k))/(press(km)-pint)
- scm_state%b_k(k) = (press(k) - scm_state%a_k(k)) / press(km+1)
- enddo
- scm_state%a_k(km+1) = 0.
- scm_state%b_k(km+1) = 1.
-
- ! do k=2,km
- ! scm_state%b_k(k) = real(k-1) / real(km)
- ! scm_state%a_k(k) = pt * ( 1. - scm_state%b_k(k) )
- ! enddo
-#endif
-
-! The following 4 selections are better for non-hydrostatic
-! Low top:
- case (31)
- ptop = 300.
- pint = 100.E2
- call var_dz(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, 1.035)
-#ifndef TEST_GWAVES
- case (41)
- ptop = 100.
- pint = 100.E2
- call var_hi(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, 1.035)
-#endif
- case (51)
- ptop = 100.
- pint = 100.E2
- call var_hi(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, 1.035)
- ! Mid-top:
- case (55)
- ptop = 10.
- pint = 100.E2
- ! call var_dz(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, 1.035)
- call var_hi(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, 1.035)
-#ifdef USE_GFSL63
-! GFS L64 equivalent setting
- case (63)
- ks = 23
- ptop = a63(1)
- pint = a63(ks+1)
- do k=1,km+1
- scm_state%a_k(k) = a63(k)
- scm_state%b_k(k) = b63(k)
- enddo
-#else
- case (63)
- ptop = 1. ! high top
- pint = 100.E2
- call var_hi(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, 1.035)
-#endif
-! NGGPS_GFS
- case (91)
- pint = 100.E2
- ptop = 40.
- call var_gfs(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, 1.029)
- case (95)
- ! Mid-top settings:
- pint = 100.E2
- ptop = 20.
- call var_gfs(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, 1.028)
- case (127)
- ptop = 1.
- pint = 75.E2
- call var_gfs(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, 1.028)
- ! IFS-like L125
+ ! IFS-like L125
case (125)
ks = 33
ptop = a125(1)
@@ -1218,43 +420,73 @@ subroutine get_FV3_vgrid(scm_input, scm_state)
scm_state%a_k(k) = a125(k)
scm_state%b_k(k) = b125(k)
enddo
+ case (127) ! N = 10, M=5
+ if (trim(scm_state%npz_type) == 'hitop') then
+ ptop = 1.
+ stretch_fac = 1.03
+ auto_routine = 2
+ else
+ ptop = 1.
+ pint = 75.E2
+ stretch_fac = 1.028
+ auto_routine = 6
+ endif
+ case (151)
+ !LES applications
+ ptop = 75.e2
+ pint = 500.E2
+ stretch_fac = 1.01
+ auto_routine = 3
case default
+ if(trim(scm_state%npz_type) == 'hitop') then
+ ptop = 1.
+ pint = 100.E2
+ elseif(trim(scm_state%npz_type) == 'midtop') then
+ ptop = 10.
+ pint = 100.E2
+ elseif(trim(scm_state%npz_type) == 'lowtop') then
+ ptop = 1.E2
+ pint = 100.E2
+ endif
-#ifdef TEST_GWAVES
-!--------------------------------------------------
-! Pure sigma-coordinate with uniform spacing in "z"
-!--------------------------------------------------
- call gw_1d(km, 1000.E2, scm_state%a_k, scm_state%b_k, ptop, 10.E3, pt1)
- ks = 0
- pint = scm_state%a_k(1)
-#else
-
-!----------------------------------------------------------------
-! Sigma-coordinate with uniform spacing in sigma and ptop = 1 mb
-!----------------------------------------------------------------
- pt = 100.
- ! One pressure layer
- ks = 1
- ! pint = pt + 0.5*1.E5/real(km) ! SJL: 20120327
- pint = pt + 1.E5/real(km)
-
- scm_state%a_k(1) = pt
- scm_state%b_k(1) = 0.
- scm_state%a_k(2) = pint
- scm_state%b_k(2) = 0.
-
- do k=3,km+1
- scm_state%b_k(k) = real(k-2) / real(km-1)
- scm_state%a_k(k) = pint - scm_state%b_k(k)*pint
- enddo
- scm_state%a_k(km+1) = 0.
- scm_state%b_k(km+1) = 1.
-#endif
+ if (trim(scm_state%npz_type) == 'gfs') then
+ auto_routine = 6
+ elseif(trim(scm_state%npz_type) == 'les') then
+ auto_routine = 3
+ elseif(trim(scm_state%npz_type) == 'mountain_wave') then
+ auto_routine = 4
+ elseif (km > 79) then
+ auto_routine = 2
+ else
+ auto_routine = 1
+ endif
+ end select
+ endif ! superC/superK
+
+ select case (auto_routine)
+ case (1)
+ call var_hi(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, stretch_fac)
+ case (2)
+ call var_hi2(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, stretch_fac)
+ case (3)
+ call var_les(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, stretch_fac)
+ case (4)
+ call mount_waves(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint)
+ case (5)
+ call var_dz(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, stretch_fac)
+ case (6)
+ call var_gfs(km, scm_state%a_k, scm_state%b_k, ptop, ks, pint, stretch_fac)
end select
-
- ptop = scm_state%a_k(1)
- pint = scm_state%a_k(ks+1)
-
+
+ call check_eta_levels (scm_state%a_k, scm_state%b_k)
+
+ if (verbose) then
+ write(*, '(A4, A13, A13, A11)') 'klev', 'ak', 'bk', 'p_ref'
+ do k=1,km+1
+ write(*,'(I4, F13.5, F13.5, F11.2)') k, scm_state%a_k(k), scm_state%b_k(k), 1000.E2*scm_state%b_k(k) + scm_state%a_k(k)
+ enddo
+ endif
+
!> - Calculate interface pressures, sigma, and exner function.
! flip scm_state%a_k, scm_state%b_k in vertical
@@ -1291,14 +523,189 @@ subroutine get_FV3_vgrid(scm_input, scm_state)
end subroutine get_FV3_vgrid
-subroutine var_dz(km, ak, bk, ptop, ks, pint, s_rate)
+subroutine var_hi(km, ak, bk, ptop, ks, pint, s_rate)
+ integer, intent(in):: km
+ real, intent(in):: ptop
+ real, intent(in):: s_rate !< between [1. 1.1]
+ real, intent(out):: ak(km+1), bk(km+1)
+ real, intent(inout):: pint
+ integer, intent(out):: ks
+! Local
+ real, parameter:: p00 = 1.E5
+ real, dimension(km+1):: ze, pe1, peln, eta
+ real, dimension(km):: dz, s_fac, dlnp
+ real ztop, t0, dz0, sum1, tmp1
+ real ep, es, alpha, beta, gama
+!---- Tunable parameters:
+ integer:: k_inc = 15 ! p
+ do k=1,km
+ dz(k) = ze(k) - ze(k+1)
+ dlnp(k) = con_g*dz(k) / (con_rd*t0)
+ enddo
+
+ pe1(km+1) = p00
+ peln(km+1) = log(p00)
+ do k=km,1,-1
+ peln(k) = peln(k+1) - dlnp(k)
+ pe1(k) = exp(peln(k))
+ enddo
+
+! Comnpute new ptop
+ ptop = pe1(1)
+
+! Pe(k) = ak(k) + bk(k) * PS
+! Locate pint and KS
+ ks = 0
+ do k=2,km
+ if ( pint < pe1(k)) then
+ ks = k-1
+ exit
+ endif
+ enddo
+
+ if ( verbose ) then
+ write(*,*) 'For (input) PINT=', 0.01*pint, ' KS=', ks, 'pint(computed)=', 0.01*pe1(ks+1)
+ write(*,*) 'Modified ptop =', ptop, ' ztop=', ze(1)/1000.
+ do k=1,km
+ write(*,*) k, 'ze =', ze(k)/1000.
+ enddo
endif
pint = pe1(ks+1)
@@ -1587,7 +1116,6 @@ subroutine var_hi(km, ak, bk, ptop, ks, pint, s_rate)
do k=1,km+1
eta(k) = pe1(k) / pe1(km+1)
enddo
-
ep = eta(ks+1)
es = eta(km)
! es = 1.
@@ -1614,10 +1142,6 @@ subroutine var_hi(km, ak, bk, ptop, ks, pint, s_rate)
#endif
if ( verbose ) then
- write(*,*) 'KS=', ks, 'PINT (mb)=', pint/100.
- do k=1,km
- write(*,*) k, 0.5*(pe1(k)+pe1(k+1))/100., dz(k)
- enddo
tmp1 = ak(ks+1)
do k=ks+1,km
tmp1 = max(tmp1, (ak(k)-ak(k+1))/max(1.E-5, (bk(k+1)-bk(k))) )
@@ -1625,178 +1149,334 @@ subroutine var_hi(km, ak, bk, ptop, ks, pint, s_rate)
write(*,*) 'Hybrid Sigma-P: minimum allowable surface pressure (hpa)=', tmp1/100.
endif
+end subroutine mount_waves
- end subroutine var_hi
+subroutine var_dz(km, ak, bk, ptop, ks, pint, s_rate)
+ integer, intent(in):: km
+ real, intent(in):: ptop
+ real, intent(in):: s_rate !< between [1. 1.1]
+ real, intent(out):: ak(km+1), bk(km+1)
+ real, intent(inout):: pint
+ integer, intent(out):: ks
+! Local
+ real, parameter:: p00 = 1.E5
+ real, dimension(km+1):: ze, pe1, peln, eta
+ real, dimension(km):: dz, s_fac, dlnp
+ real ztop, t0, dz0, sum1, tmp1
+ real ep, es, alpha, beta, gama
+ integer k
+
+ pe1(1) = ptop
+ peln(1) = log(pe1(1))
+ pe1(km+1) = p00
+ peln(km+1) = log(pe1(km+1))
+
+ t0 = 270.
+ ztop = con_rd/con_g*t0*(peln(km+1) - peln(1))
+
+ s_fac(km ) = 0.10
+ s_fac(km-1) = 0.20
+ s_fac(km-2) = 0.30
+ s_fac(km-3) = 0.40
+ s_fac(km-4) = 0.50
+ s_fac(km-5) = 0.60
+ s_fac(km-6) = 0.70
+ s_fac(km-7) = 0.80
+ s_fac(km-8) = 0.90
+ s_fac(km-9) = 0.95
+ s_fac(km-10) = 0.5*(s_fac(km-9) + s_rate)
+
+ do k=km-11, 9, -1
+ s_fac(k) = min(10.0, s_rate * s_fac(k+1) )
+ enddo
+
+ s_fac(8) = 0.5*(1.1+s_rate)*s_fac(9)
+ s_fac(7) = 1.1 *s_fac(8)
+ s_fac(6) = 1.15*s_fac(7)
+ s_fac(5) = 1.2 *s_fac(6)
+ s_fac(4) = 1.3 *s_fac(5)
+ s_fac(3) = 1.4 *s_fac(4)
+ s_fac(2) = 1.5 *s_fac(3)
+ s_fac(1) = 1.6 *s_fac(2)
+
+ sum1 = 0.
+ do k=1,km
+ sum1 = sum1 + s_fac(k)
+ enddo
+
+ dz0 = ztop / sum1
+
+ do k=1,km
+ dz(k) = s_fac(k) * dz0
+ enddo
+
+ ze(km+1) = 0.
+ do k=km,1,-1
+ ze(k) = ze(k+1) + dz(k)
+ enddo
- subroutine var_gfs(km, ak, bk, ptop, ks, pint, s_rate)
- integer, intent(in):: km
- real(kind=dp), intent(in):: ptop
- real, intent(in):: s_rate ! between [1. 1.1]
- real(kind=dp), intent(out):: ak(km+1), bk(km+1)
- real, intent(inout):: pint
- integer, intent(out):: ks
- ! Local
- real, parameter:: p00 = 1.E5
- real, dimension(km+1):: ze, pe1, peln, eta
- real, dimension(km):: dz, s_fac, dlnp
- real ztop, t0, dz0, sum1, tmp1
- real ep, es, alpha, beta, gama
- !---- Tunable parameters:
- integer:: k_inc = 25 ! # of layers from bottom up to near const dz region
- real:: s0 = 0.13 ! lowest layer stretch factor
- !-----------------------
- real:: s_inc
- integer k
-
- pe1(1) = ptop
- peln(1) = log(pe1(1))
- pe1(km+1) = p00
- peln(km+1) = log(pe1(km+1))
-
- t0 = 270.
- ztop = con_rd/con_g*t0*(peln(km+1) - peln(1))
-
- s_inc = (1.-s0) / real(k_inc)
- s_fac(km) = s0
-
- do k=km-1, km-k_inc, -1
- s_fac(k) = s_fac(k+1) + s_inc
- enddo
-
- do k=km-k_inc-1, 9, -1
- s_fac(k) = s_rate * s_fac(k+1)
- enddo
- s_fac(8) = 0.5*(1.1+s_rate)*s_fac(9)
- s_fac(7) = 1.10*s_fac(8)
- s_fac(6) = 1.15*s_fac(7)
- s_fac(5) = 1.20*s_fac(6)
- s_fac(4) = 1.26*s_fac(5)
- s_fac(3) = 1.33*s_fac(4)
- s_fac(2) = 1.41*s_fac(3)
- s_fac(1) = 1.60*s_fac(2)
-
- sum1 = 0.
- do k=1,km
- sum1 = sum1 + s_fac(k)
- enddo
-
- dz0 = ztop / sum1
-
- do k=1,km
- dz(k) = s_fac(k) * dz0
- enddo
-
- ze(km+1) = 0.
- do k=km,1,-1
- ze(k) = ze(k+1) + dz(k)
- enddo
+! Re-scale dz with the stretched ztop
+ do k=1,km
+ dz(k) = dz(k) * (ztop/ze(1))
+ enddo
- ! Re-scale dz with the stretched ztop
- do k=1,km
- dz(k) = dz(k) * (ztop/ze(1))
- enddo
+ do k=km,1,-1
+ ze(k) = ze(k+1) + dz(k)
+ enddo
+! ze(1) = ztop
- do k=km,1,-1
- ze(k) = ze(k+1) + dz(k)
- enddo
- ! ze(1) = ztop
+ if ( verbose ) write(*,*) 'var_dz: computed model top (m)=', ztop*0.001, ' bottom/top dz=', dz(km), dz(1)
+ call sm1_edge(1, 1, 1, 1, km, 1, 1, ze, 1)
- if ( verbose ) then
- write(*,*) 'var_gfs: computed model top (m)=', ztop*0.001, ' bottom/top dz=', dz(km), dz(1)
- ! do k=1,km
- ! write(*,*) k, s_fac(k)
- ! enddo
- endif
+! Given z --> p
+ do k=1,km
+ dz(k) = ze(k) - ze(k+1)
+ dlnp(k) = con_g*dz(k) / (con_rd*t0)
+ enddo
+ do k=2,km
+ peln(k) = peln(k-1) + dlnp(k-1)
+ pe1(k) = exp(peln(k))
+ enddo
- ! call sm1_edge(1, 1, 1, 1, km, 1, 1, ze, 3)
+! Pe(k) = ak(k) + bk(k) * PS
+! Locate pint and KS
+ ks = 0
+ do k=2,km
+ if ( pint < pe1(k)) then
+ ks = k-1
+ exit
+ endif
+ enddo
+ if ( verbose ) then
+ write(*,*) 'For (input) PINT=', 0.01*pint, ' KS=', ks, 'pint(computed)=', 0.01*pe1(ks+1)
+ write(*,*) 'ptop =', ptop
+ endif
+ pint = pe1(ks+1)
- ! Given z --> p
- do k=1,km
- dz(k) = ze(k) - ze(k+1)
- dlnp(k) = con_g*dz(k) / (con_rd*t0)
- enddo
- do k=2,km
- peln(k) = peln(k-1) + dlnp(k-1)
- pe1(k) = exp(peln(k))
- enddo
+#ifdef NO_UKMO_HB
+ do k=1,ks+1
+ ak(k) = pe1(k)
+ bk(k) = 0.
+ enddo
+
+ do k=ks+2,km+1
+ bk(k) = (pe1(k) - pint) / (pe1(km+1)-pint) ! bk == sigma
+ ak(k) = pe1(k) - bk(k) * pe1(km+1)
+ enddo
+ bk(km+1) = 1.
+ ak(km+1) = 0.
+#else
+! Problematic for non-hydrostatic
+ do k=1,km+1
+ eta(k) = pe1(k) / pe1(km+1)
+ enddo
- ! Pe(k) = ak(k) + bk(k) * PS
- ! Locate pint and KS
- ks = 0
- do k=2,km
- if ( pint < pe1(k)) then
- ks = k-1
- exit
- endif
- enddo
- if ( verbose ) then
- write(*,*) 'For (input) PINT=', 0.01*pint, ' KS=', ks, 'pint(computed)=', 0.01*pe1(ks+1)
- write(*,*) 'ptop =', ptop
- endif
- pint = pe1(ks+1)
+ ep = eta(ks+1)
+ es = eta(km)
+! es = 1.
+ alpha = (ep**2-2.*ep*es) / (es-ep)**2
+ beta = 2.*ep*es**2 / (es-ep)**2
+ gama = -(ep*es)**2 / (es-ep)**2
+
+! Pure pressure:
+ do k=1,ks+1
+ ak(k) = eta(k)*1.e5
+ bk(k) = 0.
+ enddo
+
+ do k=ks+2, km
+ ak(k) = alpha*eta(k) + beta + gama/eta(k)
+ ak(k) = ak(k)*1.e5
+ enddo
+ ak(km+1) = 0.
+
+ do k=ks+2, km
+ bk(k) = (pe1(k) - ak(k))/pe1(km+1)
+ enddo
+ bk(km+1) = 1.
+#endif
+
+ if ( verbose ) then
+ write(*,*) 'KS=', ks, 'PINT (mb)=', pint/100.
+ do k=1,km
+ write(*,*) k, 0.5*(pe1(k)+pe1(k+1))/100., dz(k)
+ enddo
+ tmp1 = ak(ks+1)
+ do k=ks+1,km
+ tmp1 = max(tmp1, (ak(k)-ak(k+1))/max(1.E-5, (bk(k+1)-bk(k))) )
+ enddo
+ write(*,*) 'Hybrid Sigma-P: minimum allowable surface pressure (hpa)=', tmp1/100.
+ endif
+end subroutine var_dz
+
+subroutine var_gfs(km, ak, bk, ptop, ks, pint, s_rate)
+ integer, intent(in):: km
+ real, intent(in):: ptop
+ real, intent(in):: s_rate !< between [1. 1.1]
+ real, intent(out):: ak(km+1), bk(km+1)
+ real, intent(inout):: pint
+ integer, intent(out):: ks
+! Local
+ real, parameter:: p00 = 1.E5
+ real, dimension(km+1):: ze, pe1, peln, eta
+ real, dimension(km):: dz, s_fac, dlnp
+ real ztop, t0, dz0, sum1, tmp1
+ real ep, es, alpha, beta, gama
+!---- Tunable parameters:
+ integer:: k_inc = 25 !< number of layers from bottom up to near const dz region
+ real:: s0 = 0.13 !< lowest layer stretch factor
+!-----------------------
+ real:: s_inc
+ integer k
+
+ pe1(1) = ptop
+ peln(1) = log(pe1(1))
+ pe1(km+1) = p00
+ peln(km+1) = log(pe1(km+1))
+
+ t0 = 270.
+ ztop = con_rd/con_g*t0*(peln(km+1) - peln(1))
+
+ s_inc = (1.-s0) / real(k_inc)
+ s_fac(km) = s0
+
+ do k=km-1, km-k_inc, -1
+ s_fac(k) = s_fac(k+1) + s_inc
+ enddo
+
+ do k=km-k_inc-1, 9, -1
+ s_fac(k) = s_rate * s_fac(k+1)
+ enddo
+ s_fac(8) = 0.5*(1.1+s_rate)*s_fac(9)
+ s_fac(7) = 1.10*s_fac(8)
+ s_fac(6) = 1.15*s_fac(7)
+ s_fac(5) = 1.20*s_fac(6)
+ s_fac(4) = 1.26*s_fac(5)
+ s_fac(3) = 1.33*s_fac(4)
+ s_fac(2) = 1.41*s_fac(3)
+ s_fac(1) = 1.60*s_fac(2)
+
+ sum1 = 0.
+ do k=1,km
+ sum1 = sum1 + s_fac(k)
+ enddo
+
+ dz0 = ztop / sum1
+
+ do k=1,km
+ dz(k) = s_fac(k) * dz0
+ enddo
+
+ ze(km+1) = 0.
+ do k=km,1,-1
+ ze(k) = ze(k+1) + dz(k)
+ enddo
+
+! Re-scale dz with the stretched ztop
+ do k=1,km
+ dz(k) = dz(k) * (ztop/ze(1))
+ enddo
+
+ do k=km,1,-1
+ ze(k) = ze(k+1) + dz(k)
+ enddo
+! ze(1) = ztop
+
+ if ( verbose ) then
+ write(*,*) 'var_gfs: computed model top (m)=', ztop*0.001, ' bottom/top dz=', dz(km), dz(1)
+! do k=1,km
+! write(*,*) k, s_fac(k)
+! enddo
+ endif
+
+! call sm1_edge(1, 1, 1, 1, km, 1, 1, ze, 3)
+
+! Given z --> p
+ do k=1,km
+ dz(k) = ze(k) - ze(k+1)
+ dlnp(k) = con_g*dz(k) / (con_rd*t0)
+ enddo
+ do k=2,km
+ peln(k) = peln(k-1) + dlnp(k-1)
+ pe1(k) = exp(peln(k))
+ enddo
+
+! Pe(k) = ak(k) + bk(k) * PS
+! Locate pint and KS
+ ks = 0
+ do k=2,km
+ if ( pint < pe1(k)) then
+ ks = k-1
+ exit
+ endif
+ enddo
+ if ( verbose ) then
+ write(*,*) 'For (input) PINT=', 0.01*pint, ' KS=', ks, 'pint(computed)=', 0.01*pe1(ks+1)
+ write(*,*) 'ptop =', ptop
+ endif
+ pint = pe1(ks+1)
#ifdef NO_UKMO_HB
- do k=1,ks+1
- ak(k) = pe1(k)
- bk(k) = 0.
- enddo
-
- do k=ks+2,km+1
- bk(k) = (pe1(k) - pint) / (pe1(km+1)-pint) ! bk == sigma
- ak(k) = pe1(k) - bk(k) * pe1(km+1)
- enddo
- bk(km+1) = 1.
- ak(km+1) = 0.
+ do k=1,ks+1
+ ak(k) = pe1(k)
+ bk(k) = 0.
+ enddo
+
+ do k=ks+2,km+1
+ bk(k) = (pe1(k) - pint) / (pe1(km+1)-pint) ! bk == sigma
+ ak(k) = pe1(k) - bk(k) * pe1(km+1)
+ enddo
+ bk(km+1) = 1.
+ ak(km+1) = 0.
#else
- ! Problematic for non-hydrostatic
- do k=1,km+1
- eta(k) = pe1(k) / pe1(km+1)
- enddo
+! Problematic for non-hydrostatic
+ do k=1,km+1
+ eta(k) = pe1(k) / pe1(km+1)
+ enddo
- ep = eta(ks+1)
- es = eta(km)
- ! es = 1.
- alpha = (ep**2-2.*ep*es) / (es-ep)**2
- beta = 2.*ep*es**2 / (es-ep)**2
- gama = -(ep*es)**2 / (es-ep)**2
+ ep = eta(ks+1)
+ es = eta(km)
+! es = 1.
+ alpha = (ep**2-2.*ep*es) / (es-ep)**2
+ beta = 2.*ep*es**2 / (es-ep)**2
+ gama = -(ep*es)**2 / (es-ep)**2
- ! Pure pressure:
- do k=1,ks+1
- ak(k) = eta(k)*1.e5
- bk(k) = 0.
- enddo
-
- do k=ks+2, km
- ak(k) = alpha*eta(k) + beta + gama/eta(k)
- ak(k) = ak(k)*1.e5
- enddo
- ak(km+1) = 0.
-
- do k=ks+2, km
- bk(k) = (pe1(k) - ak(k))/pe1(km+1)
- enddo
- bk(km+1) = 1.
+! Pure pressure:
+ do k=1,ks+1
+ ak(k) = eta(k)*1.e5
+ bk(k) = 0.
+ enddo
+
+ do k=ks+2, km
+ ak(k) = alpha*eta(k) + beta + gama/eta(k)
+ ak(k) = ak(k)*1.e5
+ enddo
+ ak(km+1) = 0.
+
+ do k=ks+2, km
+ bk(k) = (pe1(k) - ak(k))/pe1(km+1)
+ enddo
+ bk(km+1) = 1.
#endif
- if ( verbose ) then
- write(*,*) 'KS=', ks, 'PINT (mb)=', pint/100.
- do k=1,km
- write(*,*) k, 0.5*(pe1(k)+pe1(k+1))/100., dz(k)
- enddo
- tmp1 = ak(ks+1)
- do k=ks+1,km
- tmp1 = max(tmp1, (ak(k)-ak(k+1))/max(1.E-5, (bk(k+1)-bk(k))) )
- enddo
- write(*,*) 'Hybrid Sigma-P: minimum allowable surface pressure (hpa)=', tmp1/100.
- endif
-
- end subroutine var_gfs
-
- subroutine sm1_edge(is, ie, js, je, km, i, j, ze, ntimes)
+ if ( verbose ) then
+ write(*,*) 'KS=', ks, 'PINT (mb)=', pint/100.
+ do k=1,km
+ write(*,*) k, 0.5*(pe1(k)+pe1(k+1))/100., dz(k)
+ enddo
+ tmp1 = ak(ks+1)
+ do k=ks+1,km
+ tmp1 = max(tmp1, (ak(k)-ak(k+1))/max(1.E-5, (bk(k+1)-bk(k))) )
+ enddo
+ write(*,*) 'Hybrid Sigma-P: minimum allowable surface pressure (hpa)=', tmp1/100.
+ endif
+end subroutine var_gfs
+
+subroutine sm1_edge(is, ie, js, je, km, i, j, ze, ntimes)
integer, intent(in):: is, ie, js, je, km
integer, intent(in):: ntimes, i, j
real, intent(inout):: ze(is:ie,js:je,km+1)
-! local:
+ ! local:
real, parameter:: df = 0.25
real dz(km)
real flux(km+1)
@@ -1825,67 +1505,41 @@ subroutine sm1_edge(is, ie, js, je, km, i, j, ze, ntimes)
ze(i,j,k) = ze(i,j,k+1) - dz(k)
enddo
- end subroutine sm1_edge
-
- subroutine gw_1d(km, p0, ak, bk, ptop, ztop, pt1)
- integer, intent(in):: km
- real, intent(in):: p0, ztop
- real, intent(inout):: ptop
- real, intent(inout):: ak(km+1), bk(km+1)
- real, intent(out):: pt1(km)
-! Local
- logical:: isothermal
- real, dimension(km+1):: ze, pe1, pk1
- real, dimension(km):: dz1
- real t0, n2, s0
- integer k
-
-! Set up vertical coordinare with constant del-z spacing:
- isothermal = .false.
- t0 = 300.
-
- if ( isothermal ) then
- n2 = con_g**2/(con_cp*t0)
- else
- n2 = 0.0001
- endif
-
- s0 = con_g*con_g / (con_cp*n2)
-
- ze(km+1) = 0.
- do k=km,1,-1
- dz1(k) = ztop / real(km)
- ze(k) = ze(k+1) + dz1(k)
- enddo
+end subroutine sm1_edge
+
+subroutine check_eta_levels(ak, bk)
+ real, intent(in) :: ak(:)
+ real, intent(in) :: bk(:)
+ !--- local variables
+ real :: ph1, tmp
+ integer :: nlev, k
+ logical :: monotonic
+
+ nlev = size(ak(:))
+
+ monotonic = .true.
+ ph1 = ak(1)
+ do k=2,nlev
+ tmp = ak(k) + bk(k)*1000.E2
+ if (tmp <= ph1) then
+ monotonic = .false.
+ exit
+ endif
+ ph1 = tmp
+ enddo
+
+ if (.not. monotonic) then
+ if (verbose) then
+ write(*, '(A4, A13, A13, A11)') 'klev', 'ak', 'bk', 'p_ref'
+ do k=1,nlev
+ write(*,'(I4, F13.5, F13.5, F11.2)') k, ak(k), bk(k), ak(k) + bk(k)*1000.E2
+ enddo
+ endif
+ write(*,*) 'FV3 check_eta_levels: ak/bk pairs do not provide a monotonic vertical coordinate'
+ stop
+ endif
-! Given z --> p
- do k=1,km+1
- pe1(k) = p0*( (1.-s0/t0) + s0/t0*exp(-n2*ze(k)/con_g) )**(1./con_rocp)
- enddo
-
- ptop = pe1(1)
-! if ( verbose ) write(*,*) 'GW_1D: computed model top (pa)=', ptop
-
-! Set up "sigma" coordinate
- ak(1) = pe1(1)
- bk(1) = 0.
- do k=2,km
- bk(k) = (pe1(k) - pe1(1)) / (pe1(km+1)-pe1(1)) ! bk == sigma
- ak(k) = pe1(1)*(1.-bk(k))
- enddo
- ak(km+1) = 0.
- bk(km+1) = 1.
-
- do k=1,km+1
- pk1(k) = pe1(k) ** con_rocp
- enddo
-
-! Compute volume mean potential temperature with hydrostatic eqn:
- do k=1,km
- pt1(k) = con_g*dz1(k) / ( con_cp*(pk1(k+1)-pk1(k)) )
- enddo
-
- end subroutine gw_1d
+end subroutine check_eta_levels
!> This subroutine calculates the pressure and exner function at grid centers and interface levels given a surface pressure and interface-level GFS grid coefficients.
!! This subroutine should be called to update the pressures of the model levels as the surface pressure of the column changes.
diff --git a/scm/src/suite_info.py b/scm/src/suite_info.py
new file mode 100755
index 000000000..0fdb48a49
--- /dev/null
+++ b/scm/src/suite_info.py
@@ -0,0 +1,63 @@
+class suite(object):
+
+ DEFAULT_MAX_TIMESTEP = 1800.0
+
+ def __init__(self, name, tracers, namelist, timestep, max_timestep, supported):
+ self._name = name #should remain unchanged after init
+ self._default_tracers = tracers #should remain unchanged after init
+ self._default_namelist = namelist #should remain unchanged after init
+ self.tracers = self._default_tracers #can be modified after init
+ self.namelist = self._default_namelist #can be modified after init
+ self._supported = supported
+
+ if max_timestep > 0:
+ self._max_timestep = max_timestep #should remain unchanged after init
+ else:
+ self._max_timestep = DEFAULT_MAX_TIMESTEP
+
+ if timestep <= self._max_timestep and timestep > 0:
+ self._default_timestep = timestep #should remain unchanged after init
+ self.timestep = self._default_timestep #can be modified after init
+ elif timestep <= 0:
+ self.timestep = None #use the default dt in the SCM code
+ else:
+ message = 'The timestep for suite {0} cannot be set greater than the max_timestep of {1}'.format(self._name, self._max_timestep)
+ raise Exception(message)
+
+ @property
+ def timestep(self):
+ """Get the timestep for the given suite."""
+ return self.timestep
+
+ @timestep.setter
+ def timestep(self, value):
+ """Set the timestep for the given suite."""
+ if value <= self._max_timestep:
+ self.timestep = value
+ else:
+ message = 'The timestep for suite {0} cannot be set greater than the max_timestep of {1}'.format(self._name, self._max_timestep)
+ raise Exception(message)
+
+suite_list = []
+suite_list.append(suite('SCM_GFS_v15p2', 'tracers_GFS_v15p2.txt', 'input_GFS_v15p2.nml', 600.0, 1800.0, True ))
+suite_list.append(suite('SCM_GFS_v16', 'tracers_GFS_v16.txt', 'input_GFS_v16.nml', 600.0, 1800.0, True ))
+suite_list.append(suite('SCM_GSD_v1', 'tracers_gsd.txt', 'input_GSD_v1.nml', 600.0, 600.0 , True ))
+suite_list.append(suite('SCM_RRFS_v1alpha', 'tracers_RRFS_v1alpha.txt', 'input_RRFS_v1alpha.nml', 600.0, 600.0 , True ))
+suite_list.append(suite('SCM_csawmg', 'tracers_csawmg.txt', 'input_csawmg.nml', 600.0, 1800.0, True ))
+
+suite_list.append(suite('SCM_GFS_v15p2_RRTMGP', 'tracers_GFS_v15p2.txt', 'input_GFS_v15p2_RRTMGP.nml', 600.0, 1800.0, False))
+suite_list.append(suite('SCM_GFS_v15p2_no_nsst', 'tracers_GFS_v15p2.txt', 'input_GFS_v15p2.nml', 600.0, 1800.0, False))
+suite_list.append(suite('SCM_GFS_v15p2_noahmp', 'tracers_GFS_v15p2.txt', 'input_GFS_v15p2_noahmp.nml', 600.0, 1800.0, False))
+suite_list.append(suite('SCM_GFS_v15p2_MYJ', 'tracers_GFS_v15p2.txt', 'input_GFS_v15p2_MYJ.nml', 600.0, 1800.0, False))
+suite_list.append(suite('SCM_GFS_v15p2_YSU', 'tracers_GFS_v15p2.txt', 'input_GFS_v15p2_YSU.nml', 600.0, 1800.0, False))
+suite_list.append(suite('SCM_GFS_v15p2_saYSU', 'tracers_GFS_v15p2.txt', 'input_GFS_v15p2_saYSU.nml', 600.0, 1800.0, False))
+suite_list.append(suite('SCM_GFS_v15p2_ACM', 'tracers_GFS_v15p2.txt', 'input_GFS_v15p2_ACM.nml', 600.0, 1800.0, False))
+suite_list.append(suite('SCM_GFS_v16_RRTMGP', 'tracers_GFS_v16.txt', 'input_GFS_v16_RRTMGP.nml', 600.0, 1800.0, False))
+suite_list.append(suite('SCM_GFS_v16_no_nsst', 'tracers_GFS_v16.txt', 'input_GFS_v16.nml', 600.0, 1800.0, False))
+suite_list.append(suite('HAFS_v0_hwrf', 'tracers_HAFS_v0_hwrf.txt', 'input_HAFS_v0_hwrf.nml', 600.0, 1800.0, False))
+suite_list.append(suite('HAFS_v0_hwrf_thompson', 'tracers_HAFS_v0_hwrf_thompson.txt', 'input_HAFS_v0_hwrf_thompson.nml', 600.0, 600.0 , False))
+suite_list.append(suite('SCM_GSD_v1nssl', 'tracers_gsd_nssl.txt', 'input_GSD_v1nssl.nml', 600.0, 600.0 , False))
+suite_list.append(suite('SCM_RRFS_v1nssl', 'tracers_RRFS_v1nssl_nohail_noccn.txt', 'input_RRFS_v1nssl_nohailnoccn.nml', 600.0, 600.0 , False))
+
+
+
diff --git a/test/rt.sh b/test/rt.sh
index 94a8798be..a8189c590 100755
--- a/test/rt.sh
+++ b/test/rt.sh
@@ -229,9 +229,9 @@ for compiler in "${compilers[@]}"; do
BUILD_OUTPUT=${BIN_DIR}/build.out
if [ "${build_type}" == "Debug" ] ; then
# Add --runtime ${runtime} to multi_run_scm.py to reduce runtime for tests
- test_run_cmd="${RUN_DIR}/multi_run_scm.py -f ${TEST_DIR}/rt_test_cases.py -v --runtime 86400" # 1 day
+ test_run_cmd="${BIN_DIR}/multi_run_scm.py -f ${TEST_DIR}/rt_test_cases.py -v --runtime_mult 0.1 --run_dir ${RUN_DIR}"
else
- test_run_cmd="${RUN_DIR}/multi_run_scm.py -f ${TEST_DIR}/rt_test_cases.py -v --timer --runtime 259200" # 3 days
+ test_run_cmd="${BIN_DIR}/multi_run_scm.py -f ${TEST_DIR}/rt_test_cases.py -v --timer --runtime_mult 0.1 --run_dir ${RUN_DIR}"
fi
. ${ETC_DIR}/${machine}_setup_${compiler}.sh
@@ -261,8 +261,6 @@ for compiler in "${compilers[@]}"; do
if [ -d "${RUN_DIR}" ] ; then rm -rf ${RUN_DIR}; fi
mkdir ${RUN_DIR}
cd ${RUN_DIR}
- ln -s ${BIN_DIR}/${executable_name} ${executable_name}
- ln -s ${SRC_DIR}/multi_run_scm.py multi_run_scm.py
ln -s ${SRC_DIR}/run_scm.py run_scm.py
job_name=${job_prefix}_${compiler}_${build_type_lc}
if ${use_batch_system} ; then