Note
Go to the end to download the full example code.
GridStat: GFS Cloud Pressure and Temperature Heights vs GOES
model_applications/clouds/GridStat_fcstGFS_obsGOES_cloudTopPressAndTemp.conf
Scientific Objective
This use case demonstrates using GOES-16 or GOES-18 level 2 cloud products to verify forecasts of cloud top information.
Version Added
METplus version 6.1
Datasets
- Forecast: Global Forecast System (GFS) global 0.25 degree grid
Cloud top temperature and cloud top pressure
- Observation: GOES-16 or GOES-18 level 2 cloud products
Cloud top temperature and cloud top pressure
Climatology: None
Location: All of the input data required for this use case can be found in a sample data tarball. Each use case category will have one or more sample data tarballs. It is only necessary to download the tarball with the use case’s dataset and not the entire collection of sample data. Click here to access the METplus releases page and download sample data for the appropriate release: https://github.com/dtcenter/METplus/releases This tarball should be unpacked into the directory that you will set the value of INPUT_BASE. See Running METplus section for more information.
METplus Components
This use case uses Point2Grid to place the point observations from GOES onto the GFS grid, then uses GridStat for evaluation.
METplus Workflow
Beginning time (INIT_BEG): 2024-03-07 00:00
End time (INIT_END): 2024-03-07 00:00
Increment between beginning and end times (INIT_INCREMENT): None
Sequence of forecast leads to process (LEAD_SEQ): 6
Instance names are used in this use case, so both Point2Grid and GridStat will run twice for each initialization time. Each of the instance names refers to the temperature observation variable (ACHTF) or the pressure observation variable (CTPC). This use case first runs the ACHTF Point2Grid instance to put cloud top temperature point observations on to a grid, then it runs the CTPC Point2Grid instance to put cloud top pressure point observations on a grid. Then it runs the ACHTF GridStat instance to verify cloud top temperature, and lastly, it runs the CTPC GridStat instance to verify cloud top pressure. Various output line types are requested and placed in stat files, with a unique output prefix indicating which output are from which GridStat instance.
METplus Configuration
METplus first loads all of the configuration files found in parm/metplus_config, then it loads any configuration files passed to METplus via the command line, i.e. parm/use_cases/model_applications/clouds/GridStat_fcstGFS_obsGOES_cloudTopPressAndTemp.conf
[config]
###
# Processes to run
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#process-list
###
PROCESS_LIST = Point2Grid(ACHTF), Point2Grid(CTPC), GridStat(ACHTF), GridStat(CTPC)
###
# Time Info
# LOOP_BY options are INIT, VALID, RETRO, and REALTIME
# If set to INIT or RETRO:
# INIT_TIME_FMT, INIT_BEG, INIT_END, and INIT_INCREMENT must also be set
# If set to VALID or REALTIME:
# VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set
# LEAD_SEQ is the list of forecast leads to process
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#timing-control
###
LOOP_BY = INIT
INIT_TIME_FMT = %Y%m%d%H
INIT_BEG = 2024030700
INIT_END = 2024030700
LEAD_SEQ = 6
CUSTOM_LOOP_LIST = goes16, goes18
###
# File I/O
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#directory-and-filename-template-info
###
POINT2GRID_OUTPUT_DIR = {OUTPUT_BASE}/Point2Grid/{custom?fmt=%s}
POINT2GRID_OUTPUT_TEMPLATE = OR_ABI-L2-{OBTYPE}_s{valid?fmt=%Y%m%d%H}.nc
POINT2GRID_FILE_WINDOW_BEGIN = 0
POINT2GRID_FILE_WINDOW_END = 0
FCST_GRID_STAT_INPUT_DIR = {INPUT_BASE}/model_applications/clouds/GridStat_fcstGFS_obsGOES_cloudTopPressAndTemp/GFS_0.25
FCST_GRID_STAT_INPUT_TEMPLATE = {init?fmt=%Y%m%d%H}/gfs.0p25.{init?fmt=%Y%m%d%H}.f{lead?fmt=%HHH}.grib2
OBS_GRID_STAT_INPUT_DIR = {POINT2GRID_OUTPUT_DIR}
OBS_GRID_STAT_INPUT_TEMPLATE = {POINT2GRID_OUTPUT_TEMPLATE}
GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE}/GridStat/{custom?fmt=%s}
LOG_GRID_STAT_VERBOSITY=3
###
# Field Info
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#field-info
###
MODEL = GFS
###
# Point2Grid Settings
# https://metplus.readthedocs.io/en/latest/Users_Guide/wrappers.html#point2grid
###
POINT2GRID_REGRID_TO_GRID = G212
POINT2GRID_REGRID_METHOD = MAX
POINT2GRID_ADP =
POINT2GRID_GAUSSIAN_DX = 81.271
POINT2GRID_GAUSSIAN_RADIUS = 120
POINT2GRID_PROB_CAT_THRESH =
POINT2GRID_VLD_THRESH =
###
# GridStat Settings
# https://metplus.readthedocs.io/en/latest/Users_Guide/wrappers.html#gridstat
###
MODEL = GFS
GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped
GRID_STAT_REGRID_TO_GRID = FCST
GRID_STAT_REGRID_METHOD = BILIN
GRID_STAT_REGRID_WIDTH = 2
GRID_STAT_DESC =
FCST_GRID_STAT_FILE_WINDOW_BEGIN = 0
FCST_GRID_STAT_FILE_WINDOW_END = 0
OBS_GRID_STAT_FILE_WINDOW_BEGIN = 0
OBS_GRID_STAT_FILE_WINDOW_END = 0
GRID_STAT_NEIGHBORHOOD_WIDTH = 1
GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE
GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5
GRID_STAT_ONCE_PER_FIELD = False
FCST_IS_PROB = false
FCST_GRID_STAT_PROB_THRESH = ==0.1
OBS_IS_PROB = false
OBS_GRID_STAT_PROB_THRESH = ==0.1
GRID_STAT_OUTPUT_PREFIX = {MODEL}_vs_{OBTYPE}
GRID_STAT_OUTPUT_FLAG_FHO = STAT
GRID_STAT_OUTPUT_FLAG_CTC = BOTH
GRID_STAT_OUTPUT_FLAG_CTS = BOTH
GRID_STAT_OUTPUT_FLAG_CNT = STAT
GRID_STAT_OUTPUT_FLAG_SL1L2 = STAT
GRID_STAT_OUTPUT_FLAG_GRAD = STAT
GRID_STAT_NC_PAIRS_FLAG_LATLON = TRUE
GRID_STAT_NC_PAIRS_FLAG_RAW = TRUE
GRID_STAT_NC_PAIRS_FLAG_DIFF = TRUE
GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE
GRID_STAT_NC_PAIRS_FLAG_GRADIENT = TRUE
GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = TRUE
###
## Settings for Cloud Top Temp
###
[ACHTF]
###
## File I/O
###
POINT2GRID_INPUT_DIR = {INPUT_BASE}/model_applications/clouds/GridStat_fcstGFS_obsGOES_cloudTopPressAndTemp/noaa-{custom?fmt=%s}/ABI-L2-ACHTF/{valid?fmt=%Y}/{valid?fmt=%j}/{lead?fmt=%H}
POINT2GRID_INPUT_TEMPLATE = OR_ABI-L2-{OBTYPE}-M6_*_s{valid?fmt=%Y%j}{lead?fmt=%H}00*.nc
###
## Point2Grid Settings
###
POINT2GRID_INPUT_FIELD = TEMP
POINT2GRID_INPUT_LEVEL = (*,*)
###
## Field Info
###
OBTYPE = ACHTF
FCST_VAR1_NAME = TMP
FCST_VAR1_LEVELS = L0
FCST_VAR1_THRESH = gt0, lt180.0, ge190.0, ge200.0, ge210.0, ge220.0, ge230.0, ge240.0, ge250.0, ge260.0, ge270.0, ge280.0
FCST_VAR1_OPTIONS = GRIB2_ipdtmpl_index=9;GRIB2_ipdtmpl_val=213;
FCST_VAR2_NAME = {FCST_VAR1_NAME}
FCST_VAR2_LEVELS = {FCST_VAR1_LEVELS}
FCST_VAR2_THRESH = {FCST_VAR1_THRESH}
FCST_VAR2_OPTIONS = GRIB2_ipdtmpl_index=9;GRIB2_ipdtmpl_val=223;
FCST_VAR3_NAME = {FCST_VAR1_NAME}
FCST_VAR3_LEVELS = {FCST_VAR1_LEVELS}
FCST_VAR3_THRESH = {FCST_VAR1_THRESH}
FCST_VAR3_OPTIONS = GRIB2_ipdtmpl_index=9;GRIB2_ipdtmpl_val=233;
OBS_VAR1_NAME = TEMP
OBS_VAR1_LEVELS = (*,*)
OBS_VAR1_THRESH = gt0, lt180.0, ge190.0, ge200.0, ge210.0, ge220.0, ge230.0, ge240.0, ge250.0, ge260.0, ge270.0, ge280.0
OBS_VAR2_NAME = {OBS_VAR1_NAME}
OBS_VAR2_LEVELS = {OBS_VAR1_LEVELS}
OBS_VAR2_THRESH = {OBS_VAR1_THRESH}
OBS_VAR3_NAME = {OBS_VAR1_NAME}
OBS_VAR3_LEVELS = {OBS_VAR1_LEVELS}
OBS_VAR3_THRESH = {OBS_VAR1_THRESH}
###
## Settings for Cloud Top Pres
###
[CTPC]
###
## File I/O
###
POINT2GRID_INPUT_DIR = {INPUT_BASE}/model_applications/clouds/GridStat_fcstGFS_obsGOES_cloudTopPressAndTemp/noaa-{custom?fmt=%s}/ABI-L2-CTPC/{valid?fmt=%Y}/{valid?fmt=%j}/{lead?fmt=%H}
POINT2GRID_INPUT_TEMPLATE = OR_ABI-L2-{OBTYPE}-M6_*_s{valid?fmt=%Y%j}{lead?fmt=%H}01*.nc
###
## Point2Grid Settings
###
POINT2GRID_INPUT_FIELD = PRES
POINT2GRID_INPUT_LEVEL = (*,*)
###
## Field Info
###
OBTYPE = CTPC
FCST_VAR1_NAME = PRES
FCST_VAR1_LEVELS = L0
FCST_VAR1_THRESH = gt0, lt10.0, ge10.0, ge20.0, ge30.0, ge40.0, ge50.0, ge60.0, ge70.0, ge80.0, ge90.0
FCST_VAR1_OPTIONS = convert(x)=x*0.01;GRIB2_ipdtmpl_index=9;GRIB2_ipdtmpl_val=213
FCST_VAR2_NAME = {FCST_VAR1_NAME}
FCST_VAR2_LEVELS = {FCST_VAR1_LEVELS}
FCST_VAR2_THRESH = {FCST_VAR1_THRESH}
FCST_VAR2_OPTIONS = convert(x)=x*0.01;GRIB2_ipdtmpl_index=9;GRIB2_ipdtmpl_val=223
FCST_VAR3_NAME = {FCST_VAR1_NAME}
FCST_VAR3_LEVELS = {FCST_VAR1_LEVELS}
FCST_VAR3_THRESH = {FCST_VAR1_THRESH}
FCST_VAR3_OPTIONS = convert(x)=x*0.01;GRIB2_ipdtmpl_index=9;GRIB2_ipdtmpl_val=233
OBS_VAR1_NAME = PRES
OBS_VAR1_LEVELS = (*,*)
OBS_VAR1_THRESH = gt0, lt10.0, ge10.0, ge20.0, ge30.0, ge40.0, ge50.0, ge60.0, ge70.0, ge80.0, ge90.0
OBS_VAR2_NAME = {OBS_VAR1_NAME}
OBS_VAR2_LEVELS = {OBS_VAR1_LEVELS}
OBS_VAR2_THRESH = {OBS_VAR1_THRESH}
OBS_VAR3_NAME = {OBS_VAR1_NAME}
OBS_VAR3_LEVELS = {OBS_VAR1_LEVELS}
OBS_VAR3_THRESH = {OBS_VAR1_THRESH}
MET Configuration
METplus sets environment variables based on user settings in the METplus configuration file. See How METplus controls MET config file settings for more details.
YOU SHOULD NOT SET ANY OF THESE ENVIRONMENT VARIABLES YOURSELF! THEY WILL BE OVERWRITTEN BY METPLUS WHEN IT CALLS THE MET TOOLS!
If there is a setting in the MET configuration file that is currently not supported by METplus you’d like to control, please refer to: Overriding Unsupported MET config file settings
Point2GridConfig_wrapped
////////////////////////////////////////////////////////////////////////////////
//
// Point2Grid configuration file.
//
// For additional information, please see the MET Users Guide.
//
////////////////////////////////////////////////////////////////////////////////
//
// NetCDF output variable timing information:
// - valid_time in YYYYMMDD[_HH[MMSS]] format
//
//valid_time =
${METPLUS_VALID_TIME}
//
// Observation time window
//
//obs_window = {
${METPLUS_OBS_WINDOW_DICT}
////////////////////////////////////////////////////////////////////////////////
//
// Observation message type
//
//message_type = [
${METPLUS_MESSAGE_TYPE}
////////////////////////////////////////////////////////////////////////////////
//
// Mapping of input variable names to output variables names.
//
//var_name_map = [
${METPLUS_VAR_NAME_MAP_LIST}
////////////////////////////////////////////////////////////////////////////////
//obs_quality_inc = [
${METPLUS_OBS_QUALITY_INC}
//obs_quality_exc = [
${METPLUS_OBS_QUALITY_EXC}
////////////////////////////////////////////////////////////////////////////////
tmp_dir = "${MET_TMP_DIR}";
//version = "V12.0.0";
////////////////////////////////////////////////////////////////////////////////
${METPLUS_MET_CONFIG_OVERRIDES}
GridStatConfig_wrapped
////////////////////////////////////////////////////////////////////////////////
//
// Grid-Stat configuration file.
//
// For additional information, see the MET_BASE/config/README file.
//
////////////////////////////////////////////////////////////////////////////////
//
// Output model name to be written
//
// model =
${METPLUS_MODEL}
//
// Output description to be written
// May be set separately in each "obs.field" entry
//
// desc =
${METPLUS_DESC}
//
// Output observation type to be written
//
// obtype =
${METPLUS_OBTYPE}
////////////////////////////////////////////////////////////////////////////////
//
// Verification grid
//
// regrid = {
${METPLUS_REGRID_DICT}
////////////////////////////////////////////////////////////////////////////////
//censor_thresh =
${METPLUS_CENSOR_THRESH}
//censor_val =
${METPLUS_CENSOR_VAL}
//cat_thresh =
${METPLUS_CAT_THRESH}
cnt_thresh = [ NA ];
cnt_logic = UNION;
wind_thresh = [ NA ];
wind_logic = UNION;
eclv_points = 0.05;
//nc_pairs_var_name =
${METPLUS_NC_PAIRS_VAR_NAME}
nc_pairs_var_suffix = "";
//hss_ec_value =
${METPLUS_HSS_EC_VALUE}
rank_corr_flag = FALSE;
//
// Forecast and observation fields to be verified
//
fcst = {
${METPLUS_FCST_FILE_TYPE}
${METPLUS_FCST_FIELD}
${METPLUS_FCST_CLIMO_MEAN_DICT}
${METPLUS_FCST_CLIMO_STDEV_DICT}
}
obs = {
${METPLUS_OBS_FILE_TYPE}
${METPLUS_OBS_FIELD}
${METPLUS_OBS_CLIMO_MEAN_DICT}
${METPLUS_OBS_CLIMO_STDEV_DICT}
}
////////////////////////////////////////////////////////////////////////////////
//
// Climatology mean data
//
//climo_mean = {
${METPLUS_CLIMO_MEAN_DICT}
//climo_stdev = {
${METPLUS_CLIMO_STDEV_DICT}
//
// May be set separately in each "obs.field" entry
//
//climo_cdf = {
${METPLUS_CLIMO_CDF_DICT}
////////////////////////////////////////////////////////////////////////////////
//
// Verification masking regions
//
// mask = {
${METPLUS_MASK_DICT}
////////////////////////////////////////////////////////////////////////////////
//
// Confidence interval settings
//
ci_alpha = [ 0.05 ];
boot = {
interval = PCTILE;
rep_prop = 1.0;
n_rep = 0;
rng = "mt19937";
seed = "";
}
////////////////////////////////////////////////////////////////////////////////
//
// Data smoothing methods
//
//interp = {
${METPLUS_INTERP_DICT}
////////////////////////////////////////////////////////////////////////////////
//
// Neighborhood methods
//
nbrhd = {
field = BOTH;
// shape =
${METPLUS_NBRHD_SHAPE}
// width =
${METPLUS_NBRHD_WIDTH}
// cov_thresh =
${METPLUS_NBRHD_COV_THRESH}
vld_thresh = 1.0;
}
////////////////////////////////////////////////////////////////////////////////
//
// Fourier decomposition
// May be set separately in each "obs.field" entry
//
//fourier = {
${METPLUS_FOURIER_DICT}
////////////////////////////////////////////////////////////////////////////////
//
// Gradient statistics
// May be set separately in each "obs.field" entry
//
//gradient = {
${METPLUS_GRADIENT_DICT}
////////////////////////////////////////////////////////////////////////////////
//
// Distance Map statistics
// May be set separately in each "obs.field" entry
//
//distance_map = {
${METPLUS_DISTANCE_MAP_DICT}
////////////////////////////////////////////////////////////////////////////////
// Threshold for SEEPS p1 (Probability of being dry)
//seeps_p1_thresh =
${METPLUS_SEEPS_P1_THRESH}
////////////////////////////////////////////////////////////////////////////////
//
// Statistical output types
//
//output_flag = {
${METPLUS_OUTPUT_FLAG_DICT}
//
// NetCDF matched pairs output file
// May be set separately in each "obs.field" entry
//
// nc_pairs_flag = {
${METPLUS_NC_PAIRS_FLAG_DICT}
////////////////////////////////////////////////////////////////////////////////
//ugrid_dataset =
${METPLUS_UGRID_DATASET}
//ugrid_max_distance_km =
${METPLUS_UGRID_MAX_DISTANCE_KM}
//ugrid_coordinates_file =
${METPLUS_UGRID_COORDINATES_FILE}
////////////////////////////////////////////////////////////////////////////////
//grid_weight_flag =
${METPLUS_GRID_WEIGHT_FLAG}
tmp_dir = "${MET_TMP_DIR}";
// output_prefix =
${METPLUS_OUTPUT_PREFIX}
////////////////////////////////////////////////////////////////////////////////
${METPLUS_TIME_OFFSET_WARNING}
${METPLUS_MET_CONFIG_OVERRIDES}
Python Embedding
This use case does not use Python embedding.
User Scripting
This use case does not use additional scripts.
Running METplus
Pass the use case configuration file to the run_metplus.py script along with any user-specific system configuration files if desired:
run_metplus.py /path/to/METplus/parm/use_cases/model_applications/clouds/GridStat_fcstGFS_obsGOES_cloudTopPressAndTemp.conf /path/to/user_system.conf
See Running METplus for more information.
Expected Output
A successful run will output the following both to the screen and to the logfile:
INFO: METplus has successfully finished running.
Refer to the value set for OUTPUT_BASE to find where the output data was generated.
Output from Point2Grid will be found in: {OUTPUT_BASE}/model_applications/clouds/Point2Grid/goes[16/18] and will contain the following files:
* OR_ABI-L2-ACHTF_s2024030706.nc
* OR_ABI-L2-CTPC_s2024030706.nc
Output from GridStat will be found in: {OUTPUT_BASE}/model_applications/clouds/GridStat/goes[16/18] and will contain the following files:
* grid_stat_GFS_vs_ACHTF_060000L_20240307_060000V_ctc.txt
* grid_stat_GFS_vs_ACHTF_060000L_20240307_060000V_cts.txt
* grid_stat_GFS_vs_ACHTF_060000L_20240307_060000V_pairs.nc
* grid_stat_GFS_vs_ACHTF_060000L_20240307_060000V.stat
* grid_stat_GFS_vs_CTPC_060000L_20240307_060000V_ctc.txt
* grid_stat_GFS_vs_CTPC_060000L_20240307_060000V_cts.txt
* grid_stat_GFS_vs_CTPC_060000L_20240307_060000V_pairs.nc
* grid_stat_GFS_vs_CTPC_060000L_20240307_060000V.stat
Each file should contain corresponding statistics for the line type(s) requested.
Keywords
Note
GridStatToolUseCase
Point2GridToolUseCase
CloudsAppUseCase
Navigate to the METplus Quick Search for Use Cases page to discover other similar use cases.