diff --git a/data/table_files/met_header_columns_V11.0.txt b/data/table_files/met_header_columns_V11.0.txt index fb48b0d16f..e7a896a335 100644 --- a/data/table_files/met_header_columns_V11.0.txt +++ b/data/table_files/met_header_columns_V11.0.txt @@ -19,7 +19,7 @@ V11.0 : STAT : PJC : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID V11.0 : STAT : PRC : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL (N_THRESH) THRESH_[0-9]* PODY_[0-9]* POFD_[0-9]* V11.0 : STAT : PSTD : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL (N_THRESH) BASER BASER_NCL BASER_NCU RELIABILITY RESOLUTION UNCERTAINTY ROC_AUC BRIER BRIER_NCL BRIER_NCU BRIERCL BRIERCL_NCL BRIERCL_NCU BSS BSS_SMPL THRESH_[0-9]* V11.0 : STAT : ECLV : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL BASER VALUE_BASER (N_PTS) CL_[0-9]* VALUE_[0-9]* -V11.0 : STAT : ECNT : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL N_ENS CRPS CRPSS IGN ME RMSE SPREAD ME_OERR RMSE_OERR SPREAD_OERR SPREAD_PLUS_OERR CRPSCL CRPS_EMP CRPSCL_EMP CRPSS_EMP CRPS_EMP_FAIR BIAS_RATIO N_GE_OBS ME_GE_OBS N_LT_OBS ME_LT_OBS +V11.0 : STAT : ECNT : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL N_ENS CRPS CRPSS IGN ME RMSE SPREAD ME_OERR RMSE_OERR SPREAD_OERR SPREAD_PLUS_OERR CRPSCL CRPS_EMP CRPSCL_EMP CRPSS_EMP CRPS_EMP_FAIR MAE MAE_OERR BIAS_RATIO N_GE_OBS ME_GE_OBS N_LT_OBS ME_LT_OBS V11.0 : STAT : RPS : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL N_PROB RPS_REL RPS_RES RPS_UNC RPS RPSS RPSS_SMPL RPS_COMP V11.0 : STAT : RHIST : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL (N_RANK) RANK_[0-9]* V11.0 : STAT : PHIST : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL BIN_SIZE (N_BIN) BIN_[0-9]* diff --git a/docs/Users_Guide/appendixC.rst b/docs/Users_Guide/appendixC.rst index fb6eb4b873..f40e779ebe 100644 --- a/docs/Users_Guide/appendixC.rst +++ b/docs/Users_Guide/appendixC.rst @@ -505,6 +505,7 @@ Root-mean-squared error (RMSE) ------------------------------ Called "RMSE" in CNT output :numref:`table_PS_format_info_CNT` +Called "RMSE" and "RMSE_OERR" in ECNT output :numref:`table_ES_header_info_es_out_ECNT` RMSE is simply the square root of the MSE, :math:`\text{RMSE} = \sqrt{\text{MSE}}`. @@ -540,6 +541,7 @@ Mean Absolute Error (MAE) ------------------------- Called "MAE" in CNT output :numref:`table_PS_format_info_CNT` +Called "MAE" and "MAE_OERR" in ECNT output :numref:`table_ES_header_info_es_out_ECNT` The Mean Absolute Error (MAE) is defined as :math:`\text{MAE} = \frac{1}{n} \sum|f_{i} - o_{i}|`. diff --git a/docs/Users_Guide/ensemble-stat.rst b/docs/Users_Guide/ensemble-stat.rst index db7b393246..de7b167edc 100644 --- a/docs/Users_Guide/ensemble-stat.rst +++ b/docs/Users_Guide/ensemble-stat.rst @@ -624,18 +624,24 @@ The format of the STAT and ASCII output of the Ensemble-Stat tool are described - CRPS_EMP_FAIR - The Continuous Ranked Probability Skill Score (empirical distribution) adjusted by subtracting 1/2(m) times the mean absolute difference of the ensemble members (m is the ensemble size) * - 42 + - MAE + - The Mean Absolute Error of the ensemble mean (unperturbed or supplied) + * - 43 + - MAE_OERR + - The Mean Absolute Error of the PERTURBED ensemble mean (e.g. with Observation Error) + * - 44 - BIAS_RATIO - The Bias Ratio - * - 43 + * - 45 - N_GE_OBS - The number of ensemble values greater than or equal to their observations - * - 44 + * - 46 - ME_GE_OBS - The Mean Error of the ensemble values greater than or equal to their observations - * - 45 + * - 47 - N_LT_OBS - The number of ensemble values less than their observations - * - 46 + * - 48 - ME_LT_OBS - The Mean Error of the ensemble values less than or equal to their observations diff --git a/docs/Users_Guide/release-notes.rst b/docs/Users_Guide/release-notes.rst index 245dbac8c8..b3d654196c 100644 --- a/docs/Users_Guide/release-notes.rst +++ b/docs/Users_Guide/release-notes.rst @@ -9,10 +9,49 @@ When applicable, release notes are followed by the GitHub issue number which des enhancement, or new feature (`MET GitHub issues `_). Important issues are listed **in bold** for emphasis. -MET Version 11.0.0-beta3 release notes (20220921) +.. warning:: **Ensemble post-processing was added to Gen-Ens-Prod in version 10.1.0 and will be removed from Ensemble-Stat in version 11.0.0!** + +MET Version 11.0.0-beta4 release notes (20221031) ------------------------------------------------- -.. warning:: **Ensemble post-processing was added to Gen-Ens-Prod in version 10.1.0 and will be removed from Ensemble-Stat in version 11.0.0!** +* Repository, build, and testing: + + * Enhance the MET base image to support NetCDF files using groups in the enhanced data model (`dtcenter/METbaseimage#6 `_). + * Update the SonarQube version used for routine software scans (`#2270 `_). + * Create test to replicate MET-11.0.0-beta3 linker errors and fix them (`#2281 `_). + * Fix GHA documentation workflow (`#2282 `_). + * Fix GHA warnings and update the version of actions (i.e. actions/checkout@v3) (`#2297 `_). + +* Code cleanup and documentation: + + * Remove namespace specification from header files (`#2227 `_). + * Move release notes into its own chapter in the User's Guide (`#2298 `_). + +* Bugfixes: + + * Fix Stat-Analysis aggregation of the neighborhood statistics line types (`#2271 `_). + * Fix the ascii2nc_airnow_hourly test in unit_ascii2nc.xml (`#2306 `_). + * Fix TC-Stat parsing of TCMPR lines (`#2309 `_). + * Fix the Point-Stat and Ensemble-Stat GRIB table lookup logic for python embedding of point observations (`#2286 `_). + +* Library Enhancments: + + * Add support for point-based climatologies for use in SEEPS (`#1941 `_). + * Enhance MET to handle NC strings when processing CF-Compliant NetCDF files (`#2042 `_). + * Enhance the MET library code to handle CF-compliant time strings with an offset defined in months or years (`#2155 `_). + +* Application Enhancements: + + * **Enhance ASCII2NC to read NDBC buoy data** (`#2276 `_). + * **Enhance IODA2NC to support IODA v2.0 format** (`#2068 `_). + * **Add MAE to the ECNT line type from Ensemble-Stat and for HiRA** (`#2325 `_). + * **Add new bias ratio statistic to the ECNT line type from Ensemble-Stat and for HiRA** (`#2058 `_). + * **Enhance TC-Pairs consensus logic to compute the spread of the location, wind speed, and pressure** (`#2036 `_). + * **Enhance TC-Pairs to read hurricane model diagnostic files (e.g. SHIPS) and TC-Stat to filter the new data** (`#392 `_). + * Refine Grid-Diag output variable names when specifying two input data sources (`#2232 `_). + +MET Version 11.0.0-beta3 release notes (20220921) +------------------------------------------------- * Repository and build: diff --git a/docs/conf.py b/docs/conf.py index d7086ba2fb..3635edc6d6 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -20,11 +20,11 @@ project = 'MET' author = 'UCAR/NCAR, NOAA, CSU/CIRA, and CU/CIRES' author_list = 'Opatz, J., T. Jensen, J. Prestopnik, H. Soh, L. Goodrich, B. Brown, R. Bullock, J. Halley Gotway, K. Newman' -version = '11.0.0-beta3' +version = '11.0.0-beta4' verinfo = version release = f'{version}' release_year = '2022' -release_date = f'{release_year}-09-21' +release_date = f'{release_year}-10-31' copyright = f'{release_year}, {author}' # -- General configuration --------------------------------------------------- diff --git a/internal/test_unit/hdr/met_11_0.hdr b/internal/test_unit/hdr/met_11_0.hdr index a559da2695..2d08a8fbd5 100644 --- a/internal/test_unit/hdr/met_11_0.hdr +++ b/internal/test_unit/hdr/met_11_0.hdr @@ -17,7 +17,7 @@ PJC : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_L PRC : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL N_THRESH _VAR_ PSTD : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL N_THRESH BASER BASER_NCL BASER_NCU RELIABILITY RESOLUTION UNCERTAINTY ROC_AUC BRIER BRIER_NCL BRIER_NCU BRIERCL BRIERCL_NCL BRIERCL_NCU BSS BSS_SMPL _VAR_ ECLV : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL BASE N_PTS _VAR_ -ECNT : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL N_ENS CRPS CRPSS IGN ME RMSE SPREAD ME_OERR RMSE_OERR SPREAD_OERR SPREAD_PLUS_OERR CRPSCL CRPS_EMP CRPSCL_EMP CRPSS_EMP CRPS_EMP_FAIR BIAS_RATIO N_GE_OBS ME_GE_OBS N_LT_OBS ME_LT_OBS +ECNT : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL N_ENS CRPS CRPSS IGN ME RMSE SPREAD ME_OERR RMSE_OERR SPREAD_OERR SPREAD_PLUS_OERR CRPSCL CRPS_EMP CRPSCL_EMP CRPSS_EMP CRPS_EMP_FAIR MAE MAE_OERR BIAS_RATIO N_GE_OBS ME_GE_OBS N_LT_OBS ME_LT_OBS RPS : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL N_PROB RPS_REL RPS_RES RPS_UNC RPS RPSS RPSS_SMPL RPS_COMP RHIST : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL CRPS IGN N_RANK CRPSS SPREAD _VAR_ PHIST : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL BIN_SIZE N_BIN _VAR_ diff --git a/internal/test_unit/perl/tcst_conv.pl b/internal/test_unit/perl/tcst_conv.pl index f006fd5793..f8f504c47c 100755 --- a/internal/test_unit/perl/tcst_conv.pl +++ b/internal/test_unit/perl/tcst_conv.pl @@ -29,7 +29,11 @@ () AAL_WIND_34 BAL_WIND_34 ANE_WIND_34 BNE_WIND_34 ASE_WIND_34 BSE_WIND_34 ASW_WIND_34 BSW_WIND_34 ANW_WIND_34 BNW_WIND_34 AAL_WIND_50 BAL_WIND_50 ANE_WIND_50 BNE_WIND_50 ASE_WIND_50 BSE_WIND_50 ASW_WIND_50 BSW_WIND_50 ANW_WIND_50 BNW_WIND_50 AAL_WIND_64 BAL_WIND_64 ANE_WIND_64 BNE_WIND_64 ASE_WIND_64 BSE_WIND_64 ASW_WIND_64 BSW_WIND_64 ANW_WIND_64 BNW_WIND_64 - ARADP BRADP ARRP BRRP AMRD BMRD AGUSTS BGUSTS AEYE BEYE ADIR BDIR ASPEED BSPEED ADEPTH BDEPTH); + ARADP BRADP ARRP BRRP AMRD BMRD AGUSTS BGUSTS AEYE BEYE ADIR BDIR ASPEED BSPEED ADEPTH BDEPTH + NUM_MEMBERS TRACK_SPREAD DIST_MEAN MSLP_SPREAD MAX_WIND_SPREAD); + +my @fld_tcdiag = qw(AMODEL BMODEL DESC STORM_ID BASIN CYCLONE STORM_NAME INIT_MASK VALID_MASK + TOTAL INDEX LEVEL SOURCE N_DIAG DIAG_ VALUE_); my @fld_probrirw = qw(AMODEL BMODEL DESC STORM_ID BASIN CYCLONE STORM_NAME INIT_MASK VALID_MASK ALAT ALON BLAT BLON INITIALS TK_ERR X_ERR Y_ERR ADLAND BDLAND RI_BEG RI_END RI_WINDOW @@ -136,7 +140,26 @@ () "%15s" . # ASPEED "%15s" . # BSPEED "%15s" . # ADEPTH - "%15s"; # BDEPTH + "%15s" . # BDEPTH + "%15s" . # NUM_MEMBERS + "%15s" . # TRACK_SPREAD + "%15s" . # DIST_MEAN + "%15s" . # MSLP_SPREAD + "%15s"; # MAX_WIND_SPREAD + +my $fmt_tcdiag = + "%15s" . # AMODEL + "%15s" . # BMODEL + "%15s" . # STORM_ID + "%15s" . # BASIN + "%15s" . # CYCLONE + "%15s" . # STORM_NAME + "%15s" . # INIT_MASK + "%15s" . # VALID_MASK + "%15s" . # TOTAL + "%15s" . # INDEX + "%15s" . # SOURCE + "%15s"; # N_DIAG my $fmt_probrirw = "%15s" . # AMODEL @@ -215,10 +238,20 @@ () # write a TCMPR line my $fmt_val; if( $vals[13] eq "TCMPR" ){ - push @outs, (" TCST_TCMPR ", @vals[1,2,4 .. 7,11,12,14 .. 79]); + push @outs, (" TCST_TCMPR ", @vals[1,2,4 .. 7,11,12,14 .. 84]); $fmt_val = $fmt_tcmpr; } + # write a TCDIAG line + elsif( $vals[13] eq "TCDIAG" ) { + push @outs, (" TCST_TCDIAG ", @vals[1,2,4 .. 7,11,12,14 .. 17]); + $fmt_val = $fmt_tcdiag; + foreach my $i ( 18 .. $#vals ) { + $fmt_val = $fmt_val . "%15s"; + push @outs, ($vals[$i]); + } + } + # write a PROBRIRW line elsif( $vals[13] eq "PROBRIRW" ) { push @outs, (" TCST_PROBRIRW ", @vals[1,2,4 .. 7,11,12,14 .. 34]); @@ -318,6 +351,19 @@ () # 77 - BSPEED # 78 - ADEPTH # 79 - BDEPTH +# 80 - NUM_MEMBERS +# 81 - TRACK_SPREAD +# 82 - DIST_MEAN +# 83 - MSLP_SPREAD +# 84 - MAX_WIND_SPREAD + +# TCDIAG Line Type +# 14 - TOTAL +# 15 - INDEX +# 16 - SOURCE +# 17 - N_DIAG +# 18 - DIAG_i +# 19 - VALUE_i # PROBRIRW Line Type # 14 - ALAT @@ -341,13 +387,5 @@ () # 32 - BLEVEL_BEG # 33 - BLEVEL_END # 34 - N_THRESH -# 35 - THRESH_1 -# 36 - PROB_1 -# 37 - THRESH_2 -# 38 - PROB_2 -# 39 - THRESH_3 -# 40 - PROB_3 -# 41 - THRESH_4 -# 42 - PROB_4 -# 43 - THRESH_5 -# 44 - PROB_5 \ No newline at end of file +# 35 - THRESH_i +# 36 - PROB_i diff --git a/src/basic/vx_config/config.tab.cc b/src/basic/vx_config/config.tab.cc index 5b67009f59..9adec0b08e 100644 --- a/src/basic/vx_config/config.tab.cc +++ b/src/basic/vx_config/config.tab.cc @@ -128,16 +128,13 @@ extern void yyerror(const char *); extern "C" int configwrap(); - - // // definitions that have external linkage // -char * configtext; - -FILE * configin; +char * configtext; +FILE * configin; int LineNumber = 1; @@ -265,7 +262,7 @@ static void do_user_function_def(); -#line 269 "config.tab.cc" /* yacc.c:337 */ +#line 266 "config.tab.cc" /* yacc.c:337 */ # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus @@ -346,7 +343,7 @@ extern int configdebug; union YYSTYPE { -#line 195 "config.tab.yy" /* yacc.c:352 */ +#line 192 "config.tab.yy" /* yacc.c:352 */ char text[max_id_length + 1]; @@ -366,7 +363,7 @@ union YYSTYPE PC_info pc_info; -#line 370 "config.tab.cc" /* yacc.c:352 */ +#line 367 "config.tab.cc" /* yacc.c:352 */ }; typedef union YYSTYPE YYSTYPE; @@ -671,14 +668,14 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 259, 259, 260, 263, 264, 265, 269, 270, 274, - 279, 280, 281, 282, 284, 285, 286, 288, 289, 290, - 291, 292, 293, 295, 301, 302, 306, 310, 314, 314, - 318, 322, 323, 327, 328, 332, 333, 336, 337, 341, - 342, 343, 344, 345, 349, 350, 351, 352, 356, 357, - 361, 362, 366, 367, 371, 372, 376, 377, 378, 379, - 380, 381, 382, 383, 384, 385, 385, 386, 386, 391, - 392, 396, 400, 401, 405 + 0, 256, 256, 257, 260, 261, 262, 266, 267, 271, + 276, 277, 278, 279, 281, 282, 283, 285, 286, 287, + 288, 289, 290, 292, 298, 299, 303, 307, 311, 311, + 315, 319, 320, 324, 325, 329, 330, 333, 334, 338, + 339, 340, 341, 342, 346, 347, 348, 349, 353, 354, + 358, 359, 363, 364, 368, 369, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 382, 383, 383, 388, + 389, 393, 397, 398, 402 }; #endif @@ -1576,397 +1573,397 @@ yyparse (void) switch (yyn) { case 2: -#line 259 "config.tab.yy" /* yacc.c:1652 */ +#line 256 "config.tab.yy" /* yacc.c:1652 */ { is_lhs = true; } -#line 1582 "config.tab.cc" /* yacc.c:1652 */ +#line 1579 "config.tab.cc" /* yacc.c:1652 */ break; case 3: -#line 260 "config.tab.yy" /* yacc.c:1652 */ +#line 257 "config.tab.yy" /* yacc.c:1652 */ { is_lhs = true; } -#line 1588 "config.tab.cc" /* yacc.c:1652 */ +#line 1585 "config.tab.cc" /* yacc.c:1652 */ break; case 4: -#line 263 "config.tab.yy" /* yacc.c:1652 */ +#line 260 "config.tab.yy" /* yacc.c:1652 */ { is_lhs = true; } -#line 1594 "config.tab.cc" /* yacc.c:1652 */ +#line 1591 "config.tab.cc" /* yacc.c:1652 */ break; case 5: -#line 264 "config.tab.yy" /* yacc.c:1652 */ +#line 261 "config.tab.yy" /* yacc.c:1652 */ { is_lhs = true; } -#line 1600 "config.tab.cc" /* yacc.c:1652 */ +#line 1597 "config.tab.cc" /* yacc.c:1652 */ break; case 6: -#line 265 "config.tab.yy" /* yacc.c:1652 */ +#line 262 "config.tab.yy" /* yacc.c:1652 */ { } -#line 1606 "config.tab.cc" /* yacc.c:1652 */ +#line 1603 "config.tab.cc" /* yacc.c:1652 */ break; case 7: -#line 269 "config.tab.yy" /* yacc.c:1652 */ +#line 266 "config.tab.yy" /* yacc.c:1652 */ { do_print( 0); } -#line 1612 "config.tab.cc" /* yacc.c:1652 */ +#line 1609 "config.tab.cc" /* yacc.c:1652 */ break; case 8: -#line 270 "config.tab.yy" /* yacc.c:1652 */ +#line 267 "config.tab.yy" /* yacc.c:1652 */ { do_print((yyvsp[-3].text)); } -#line 1618 "config.tab.cc" /* yacc.c:1652 */ +#line 1615 "config.tab.cc" /* yacc.c:1652 */ break; case 9: -#line 274 "config.tab.yy" /* yacc.c:1652 */ +#line 271 "config.tab.yy" /* yacc.c:1652 */ { is_lhs = false; } -#line 1624 "config.tab.cc" /* yacc.c:1652 */ +#line 1621 "config.tab.cc" /* yacc.c:1652 */ break; case 10: -#line 279 "config.tab.yy" /* yacc.c:1652 */ +#line 276 "config.tab.yy" /* yacc.c:1652 */ { do_assign_boolean ((yyvsp[-2].text), (yyvsp[-1].bval)); } -#line 1630 "config.tab.cc" /* yacc.c:1652 */ +#line 1627 "config.tab.cc" /* yacc.c:1652 */ break; case 11: -#line 280 "config.tab.yy" /* yacc.c:1652 */ +#line 277 "config.tab.yy" /* yacc.c:1652 */ { do_assign_exp ((yyvsp[-2].text)); } -#line 1636 "config.tab.cc" /* yacc.c:1652 */ +#line 1633 "config.tab.cc" /* yacc.c:1652 */ break; case 12: -#line 281 "config.tab.yy" /* yacc.c:1652 */ +#line 278 "config.tab.yy" /* yacc.c:1652 */ { do_assign_id ((yyvsp[-2].text), (yyvsp[-1].text)); } -#line 1642 "config.tab.cc" /* yacc.c:1652 */ +#line 1639 "config.tab.cc" /* yacc.c:1652 */ break; case 13: -#line 282 "config.tab.yy" /* yacc.c:1652 */ +#line 279 "config.tab.yy" /* yacc.c:1652 */ { do_pwl ((yyvsp[-2].text)); } -#line 1648 "config.tab.cc" /* yacc.c:1652 */ +#line 1645 "config.tab.cc" /* yacc.c:1652 */ break; case 14: -#line 284 "config.tab.yy" /* yacc.c:1652 */ +#line 281 "config.tab.yy" /* yacc.c:1652 */ { do_assign_threshold ((yyvsp[-2].text)); } -#line 1654 "config.tab.cc" /* yacc.c:1652 */ +#line 1651 "config.tab.cc" /* yacc.c:1652 */ break; case 15: -#line 285 "config.tab.yy" /* yacc.c:1652 */ +#line 282 "config.tab.yy" /* yacc.c:1652 */ { do_assign_string ((yyvsp[-2].text), (yyvsp[-1].text)); } -#line 1660 "config.tab.cc" /* yacc.c:1652 */ +#line 1657 "config.tab.cc" /* yacc.c:1652 */ break; case 16: -#line 286 "config.tab.yy" /* yacc.c:1652 */ +#line 283 "config.tab.yy" /* yacc.c:1652 */ { do_assign_dict ((yyvsp[-1].text)); } -#line 1666 "config.tab.cc" /* yacc.c:1652 */ +#line 1663 "config.tab.cc" /* yacc.c:1652 */ break; case 17: -#line 288 "config.tab.yy" /* yacc.c:1652 */ +#line 285 "config.tab.yy" /* yacc.c:1652 */ { do_assign_dict((yyvsp[-3].text)); } -#line 1672 "config.tab.cc" /* yacc.c:1652 */ +#line 1669 "config.tab.cc" /* yacc.c:1652 */ break; case 18: -#line 289 "config.tab.yy" /* yacc.c:1652 */ +#line 286 "config.tab.yy" /* yacc.c:1652 */ { do_assign_exp_array((yyvsp[-3].text)); } -#line 1678 "config.tab.cc" /* yacc.c:1652 */ +#line 1675 "config.tab.cc" /* yacc.c:1652 */ break; case 19: -#line 290 "config.tab.yy" /* yacc.c:1652 */ +#line 287 "config.tab.yy" /* yacc.c:1652 */ { do_assign_dict((yyvsp[-3].text)); } -#line 1684 "config.tab.cc" /* yacc.c:1652 */ +#line 1681 "config.tab.cc" /* yacc.c:1652 */ break; case 20: -#line 291 "config.tab.yy" /* yacc.c:1652 */ +#line 288 "config.tab.yy" /* yacc.c:1652 */ { do_assign_dict((yyvsp[-3].text)); } -#line 1690 "config.tab.cc" /* yacc.c:1652 */ +#line 1687 "config.tab.cc" /* yacc.c:1652 */ break; case 21: -#line 292 "config.tab.yy" /* yacc.c:1652 */ +#line 289 "config.tab.yy" /* yacc.c:1652 */ { do_assign_dict((yyvsp[-3].text)); } -#line 1696 "config.tab.cc" /* yacc.c:1652 */ +#line 1693 "config.tab.cc" /* yacc.c:1652 */ break; case 22: -#line 293 "config.tab.yy" /* yacc.c:1652 */ +#line 290 "config.tab.yy" /* yacc.c:1652 */ { do_assign_dict((yyvsp[-2].text)); } -#line 1702 "config.tab.cc" /* yacc.c:1652 */ +#line 1699 "config.tab.cc" /* yacc.c:1652 */ break; case 23: -#line 295 "config.tab.yy" /* yacc.c:1652 */ +#line 292 "config.tab.yy" /* yacc.c:1652 */ { do_user_function_def(); } -#line 1708 "config.tab.cc" /* yacc.c:1652 */ +#line 1705 "config.tab.cc" /* yacc.c:1652 */ break; case 24: -#line 301 "config.tab.yy" /* yacc.c:1652 */ +#line 298 "config.tab.yy" /* yacc.c:1652 */ { ida.add((yyvsp[0].text)); } -#line 1714 "config.tab.cc" /* yacc.c:1652 */ +#line 1711 "config.tab.cc" /* yacc.c:1652 */ break; case 25: -#line 302 "config.tab.yy" /* yacc.c:1652 */ +#line 299 "config.tab.yy" /* yacc.c:1652 */ { ida.add((yyvsp[0].text)); } -#line 1720 "config.tab.cc" /* yacc.c:1652 */ +#line 1717 "config.tab.cc" /* yacc.c:1652 */ break; case 26: -#line 306 "config.tab.yy" /* yacc.c:1652 */ +#line 303 "config.tab.yy" /* yacc.c:1652 */ { is_lhs = false; function_name = (yyvsp[-4].text); is_function_def = true; } -#line 1726 "config.tab.cc" /* yacc.c:1652 */ +#line 1723 "config.tab.cc" /* yacc.c:1652 */ break; case 27: -#line 310 "config.tab.yy" /* yacc.c:1652 */ +#line 307 "config.tab.yy" /* yacc.c:1652 */ { is_lhs = false; strcpy((yyval.text), (yyvsp[-1].text)); } -#line 1732 "config.tab.cc" /* yacc.c:1652 */ +#line 1729 "config.tab.cc" /* yacc.c:1652 */ break; case 28: -#line 314 "config.tab.yy" /* yacc.c:1652 */ +#line 311 "config.tab.yy" /* yacc.c:1652 */ { mark(apm); } -#line 1738 "config.tab.cc" /* yacc.c:1652 */ +#line 1735 "config.tab.cc" /* yacc.c:1652 */ break; case 29: -#line 314 "config.tab.yy" /* yacc.c:1652 */ +#line 311 "config.tab.yy" /* yacc.c:1652 */ { is_lhs = false; strcpy((yyval.text), (yyvsp[-2].text)); } -#line 1744 "config.tab.cc" /* yacc.c:1652 */ +#line 1741 "config.tab.cc" /* yacc.c:1652 */ break; case 30: -#line 318 "config.tab.yy" /* yacc.c:1652 */ +#line 315 "config.tab.yy" /* yacc.c:1652 */ { do_dict(); } -#line 1750 "config.tab.cc" /* yacc.c:1652 */ +#line 1747 "config.tab.cc" /* yacc.c:1652 */ break; case 33: -#line 327 "config.tab.yy" /* yacc.c:1652 */ +#line 324 "config.tab.yy" /* yacc.c:1652 */ { do_string((yyvsp[0].text)); } -#line 1756 "config.tab.cc" /* yacc.c:1652 */ +#line 1753 "config.tab.cc" /* yacc.c:1652 */ break; case 34: -#line 328 "config.tab.yy" /* yacc.c:1652 */ +#line 325 "config.tab.yy" /* yacc.c:1652 */ { do_string((yyvsp[0].text)); } -#line 1762 "config.tab.cc" /* yacc.c:1652 */ +#line 1759 "config.tab.cc" /* yacc.c:1652 */ break; case 37: -#line 336 "config.tab.yy" /* yacc.c:1652 */ +#line 333 "config.tab.yy" /* yacc.c:1652 */ { do_thresh ((yyvsp[0].node)); } -#line 1768 "config.tab.cc" /* yacc.c:1652 */ +#line 1765 "config.tab.cc" /* yacc.c:1652 */ break; case 38: -#line 337 "config.tab.yy" /* yacc.c:1652 */ +#line 334 "config.tab.yy" /* yacc.c:1652 */ { do_na_thresh (); } -#line 1774 "config.tab.cc" /* yacc.c:1652 */ +#line 1771 "config.tab.cc" /* yacc.c:1652 */ break; case 39: -#line 341 "config.tab.yy" /* yacc.c:1652 */ +#line 338 "config.tab.yy" /* yacc.c:1652 */ { (yyval.node) = (yyvsp[0].node); } -#line 1780 "config.tab.cc" /* yacc.c:1652 */ +#line 1777 "config.tab.cc" /* yacc.c:1652 */ break; case 40: -#line 342 "config.tab.yy" /* yacc.c:1652 */ +#line 339 "config.tab.yy" /* yacc.c:1652 */ { (yyval.node) = do_and_thresh ((yyvsp[-2].node), (yyvsp[0].node)); } -#line 1786 "config.tab.cc" /* yacc.c:1652 */ +#line 1783 "config.tab.cc" /* yacc.c:1652 */ break; case 41: -#line 343 "config.tab.yy" /* yacc.c:1652 */ +#line 340 "config.tab.yy" /* yacc.c:1652 */ { (yyval.node) = do_or_thresh ((yyvsp[-2].node), (yyvsp[0].node)); } -#line 1792 "config.tab.cc" /* yacc.c:1652 */ +#line 1789 "config.tab.cc" /* yacc.c:1652 */ break; case 42: -#line 344 "config.tab.yy" /* yacc.c:1652 */ +#line 341 "config.tab.yy" /* yacc.c:1652 */ { (yyval.node) = do_not_thresh ((yyvsp[0].node)); } -#line 1798 "config.tab.cc" /* yacc.c:1652 */ +#line 1795 "config.tab.cc" /* yacc.c:1652 */ break; case 43: -#line 345 "config.tab.yy" /* yacc.c:1652 */ +#line 342 "config.tab.yy" /* yacc.c:1652 */ { (yyval.node) = do_paren_thresh ((yyvsp[-1].node)); } -#line 1804 "config.tab.cc" /* yacc.c:1652 */ +#line 1801 "config.tab.cc" /* yacc.c:1652 */ break; case 44: -#line 349 "config.tab.yy" /* yacc.c:1652 */ +#line 346 "config.tab.yy" /* yacc.c:1652 */ { (yyval.node) = do_simple_thresh((yyvsp[-1].cval), (yyvsp[0].nval)); } -#line 1810 "config.tab.cc" /* yacc.c:1652 */ +#line 1807 "config.tab.cc" /* yacc.c:1652 */ break; case 45: -#line 350 "config.tab.yy" /* yacc.c:1652 */ +#line 347 "config.tab.yy" /* yacc.c:1652 */ { (yyval.node) = do_simple_perc_thresh((yyvsp[-1].cval), (yyvsp[0].pc_info)); } -#line 1816 "config.tab.cc" /* yacc.c:1652 */ +#line 1813 "config.tab.cc" /* yacc.c:1652 */ break; case 46: -#line 351 "config.tab.yy" /* yacc.c:1652 */ +#line 348 "config.tab.yy" /* yacc.c:1652 */ { (yyval.node) = do_compound_perc_thresh((yyvsp[-4].cval), (yyvsp[-3].pc_info), (yyvsp[-1].nval)); } -#line 1822 "config.tab.cc" /* yacc.c:1652 */ +#line 1819 "config.tab.cc" /* yacc.c:1652 */ break; case 47: -#line 352 "config.tab.yy" /* yacc.c:1652 */ +#line 349 "config.tab.yy" /* yacc.c:1652 */ { (yyval.node) = do_fortran_thresh((yyvsp[0].text)); } -#line 1828 "config.tab.cc" /* yacc.c:1652 */ +#line 1825 "config.tab.cc" /* yacc.c:1652 */ break; case 48: -#line 356 "config.tab.yy" /* yacc.c:1652 */ +#line 353 "config.tab.yy" /* yacc.c:1652 */ { set_number_string(); } -#line 1834 "config.tab.cc" /* yacc.c:1652 */ +#line 1831 "config.tab.cc" /* yacc.c:1652 */ break; case 49: -#line 357 "config.tab.yy" /* yacc.c:1652 */ +#line 354 "config.tab.yy" /* yacc.c:1652 */ { set_number_string(); } -#line 1840 "config.tab.cc" /* yacc.c:1652 */ +#line 1837 "config.tab.cc" /* yacc.c:1652 */ break; case 50: -#line 361 "config.tab.yy" /* yacc.c:1652 */ +#line 358 "config.tab.yy" /* yacc.c:1652 */ { do_boolean((yyvsp[0].bval)); } -#line 1846 "config.tab.cc" /* yacc.c:1652 */ +#line 1843 "config.tab.cc" /* yacc.c:1652 */ break; case 51: -#line 362 "config.tab.yy" /* yacc.c:1652 */ +#line 359 "config.tab.yy" /* yacc.c:1652 */ { do_boolean((yyvsp[0].bval)); } -#line 1852 "config.tab.cc" /* yacc.c:1652 */ +#line 1849 "config.tab.cc" /* yacc.c:1652 */ break; case 56: -#line 376 "config.tab.yy" /* yacc.c:1652 */ +#line 373 "config.tab.yy" /* yacc.c:1652 */ { do_number((yyvsp[0].nval)); } -#line 1858 "config.tab.cc" /* yacc.c:1652 */ +#line 1855 "config.tab.cc" /* yacc.c:1652 */ break; case 57: -#line 377 "config.tab.yy" /* yacc.c:1652 */ +#line 374 "config.tab.yy" /* yacc.c:1652 */ { do_local_var((yyvsp[0].index)); } -#line 1864 "config.tab.cc" /* yacc.c:1652 */ +#line 1861 "config.tab.cc" /* yacc.c:1652 */ break; case 58: -#line 378 "config.tab.yy" /* yacc.c:1652 */ +#line 375 "config.tab.yy" /* yacc.c:1652 */ { do_op('+'); } -#line 1870 "config.tab.cc" /* yacc.c:1652 */ +#line 1867 "config.tab.cc" /* yacc.c:1652 */ break; case 59: -#line 379 "config.tab.yy" /* yacc.c:1652 */ +#line 376 "config.tab.yy" /* yacc.c:1652 */ { do_op('-'); } -#line 1876 "config.tab.cc" /* yacc.c:1652 */ +#line 1873 "config.tab.cc" /* yacc.c:1652 */ break; case 60: -#line 380 "config.tab.yy" /* yacc.c:1652 */ +#line 377 "config.tab.yy" /* yacc.c:1652 */ { do_op('*'); } -#line 1882 "config.tab.cc" /* yacc.c:1652 */ +#line 1879 "config.tab.cc" /* yacc.c:1652 */ break; case 61: -#line 381 "config.tab.yy" /* yacc.c:1652 */ +#line 378 "config.tab.yy" /* yacc.c:1652 */ { do_op('/'); } -#line 1888 "config.tab.cc" /* yacc.c:1652 */ +#line 1885 "config.tab.cc" /* yacc.c:1652 */ break; case 62: -#line 382 "config.tab.yy" /* yacc.c:1652 */ +#line 379 "config.tab.yy" /* yacc.c:1652 */ { do_op('^'); } -#line 1894 "config.tab.cc" /* yacc.c:1652 */ +#line 1891 "config.tab.cc" /* yacc.c:1652 */ break; case 63: -#line 383 "config.tab.yy" /* yacc.c:1652 */ +#line 380 "config.tab.yy" /* yacc.c:1652 */ { do_negate(); } -#line 1900 "config.tab.cc" /* yacc.c:1652 */ +#line 1897 "config.tab.cc" /* yacc.c:1652 */ break; case 64: -#line 384 "config.tab.yy" /* yacc.c:1652 */ +#line 381 "config.tab.yy" /* yacc.c:1652 */ { do_paren_exp(); } -#line 1906 "config.tab.cc" /* yacc.c:1652 */ +#line 1903 "config.tab.cc" /* yacc.c:1652 */ break; case 65: -#line 385 "config.tab.yy" /* yacc.c:1652 */ +#line 382 "config.tab.yy" /* yacc.c:1652 */ { mark(fcm); } -#line 1912 "config.tab.cc" /* yacc.c:1652 */ +#line 1909 "config.tab.cc" /* yacc.c:1652 */ break; case 66: -#line 385 "config.tab.yy" /* yacc.c:1652 */ +#line 382 "config.tab.yy" /* yacc.c:1652 */ { do_builtin_call((yyvsp[-4].index)); } -#line 1918 "config.tab.cc" /* yacc.c:1652 */ +#line 1915 "config.tab.cc" /* yacc.c:1652 */ break; case 67: -#line 386 "config.tab.yy" /* yacc.c:1652 */ +#line 383 "config.tab.yy" /* yacc.c:1652 */ { mark(fcm); } -#line 1924 "config.tab.cc" /* yacc.c:1652 */ +#line 1921 "config.tab.cc" /* yacc.c:1652 */ break; case 68: -#line 386 "config.tab.yy" /* yacc.c:1652 */ +#line 383 "config.tab.yy" /* yacc.c:1652 */ { do_user_function_call((yyvsp[-4].entry)); } -#line 1930 "config.tab.cc" /* yacc.c:1652 */ +#line 1927 "config.tab.cc" /* yacc.c:1652 */ break; case 69: -#line 391 "config.tab.yy" /* yacc.c:1652 */ +#line 388 "config.tab.yy" /* yacc.c:1652 */ { store_exp(); } -#line 1936 "config.tab.cc" /* yacc.c:1652 */ +#line 1933 "config.tab.cc" /* yacc.c:1652 */ break; case 70: -#line 392 "config.tab.yy" /* yacc.c:1652 */ +#line 389 "config.tab.yy" /* yacc.c:1652 */ { store_exp(); } -#line 1942 "config.tab.cc" /* yacc.c:1652 */ +#line 1939 "config.tab.cc" /* yacc.c:1652 */ break; case 71: -#line 396 "config.tab.yy" /* yacc.c:1652 */ +#line 393 "config.tab.yy" /* yacc.c:1652 */ { } -#line 1948 "config.tab.cc" /* yacc.c:1652 */ +#line 1945 "config.tab.cc" /* yacc.c:1652 */ break; case 72: -#line 400 "config.tab.yy" /* yacc.c:1652 */ +#line 397 "config.tab.yy" /* yacc.c:1652 */ { } -#line 1954 "config.tab.cc" /* yacc.c:1652 */ +#line 1951 "config.tab.cc" /* yacc.c:1652 */ break; case 73: -#line 401 "config.tab.yy" /* yacc.c:1652 */ +#line 398 "config.tab.yy" /* yacc.c:1652 */ { } -#line 1960 "config.tab.cc" /* yacc.c:1652 */ +#line 1957 "config.tab.cc" /* yacc.c:1652 */ break; case 74: -#line 405 "config.tab.yy" /* yacc.c:1652 */ +#line 402 "config.tab.yy" /* yacc.c:1652 */ { add_point(); } -#line 1966 "config.tab.cc" /* yacc.c:1652 */ +#line 1963 "config.tab.cc" /* yacc.c:1652 */ break; -#line 1970 "config.tab.cc" /* yacc.c:1652 */ +#line 1967 "config.tab.cc" /* yacc.c:1652 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2197,7 +2194,7 @@ yyparse (void) #endif return yyresult; } -#line 409 "config.tab.yy" /* yacc.c:1918 */ +#line 406 "config.tab.yy" /* yacc.c:1918 */ diff --git a/src/basic/vx_config/config.tab.h b/src/basic/vx_config/config.tab.h index 8ed626a152..2e861d07cf 100644 --- a/src/basic/vx_config/config.tab.h +++ b/src/basic/vx_config/config.tab.h @@ -92,7 +92,7 @@ extern int configdebug; union YYSTYPE { -#line 195 "config.tab.yy" /* yacc.c:1921 */ +#line 192 "config.tab.yy" /* yacc.c:1921 */ char text[max_id_length + 1]; diff --git a/src/basic/vx_config/config.tab.yy b/src/basic/vx_config/config.tab.yy index a89d87c6e8..2a533128cf 100644 --- a/src/basic/vx_config/config.tab.yy +++ b/src/basic/vx_config/config.tab.yy @@ -53,16 +53,13 @@ extern void yyerror(const char *); extern "C" int configwrap(); - - // // definitions that have external linkage // -char * configtext; - -FILE * configin; +char * configtext; +FILE * configin; int LineNumber = 1; diff --git a/src/basic/vx_util/stat_column_defs.h b/src/basic/vx_util/stat_column_defs.h index 0101825690..a96fa2d26f 100644 --- a/src/basic/vx_util/stat_column_defs.h +++ b/src/basic/vx_util/stat_column_defs.h @@ -267,9 +267,9 @@ static const char * ecnt_columns [] = { "RMSE", "SPREAD", "ME_OERR", "RMSE_OERR", "SPREAD_OERR", "SPREAD_PLUS_OERR", "CRPSCL", "CRPS_EMP", "CRPSCL_EMP", - "CRPSS_EMP", "CRPS_EMP_FAIR", "BIAS_RATIO", - "N_GE_OBS", "ME_GE_OBS", "N_LT_OBS", - "ME_LT_OBS" + "CRPSS_EMP", "CRPS_EMP_FAIR", "MAE", + "MAE_OERR", "BIAS_RATIO", "N_GE_OBS", + "ME_GE_OBS", "N_LT_OBS", "ME_LT_OBS" }; static const char * rps_columns [] = { diff --git a/src/libcode/vx_stat_out/stat_columns.cc b/src/libcode/vx_stat_out/stat_columns.cc index 85f89742bc..51ad6faee6 100644 --- a/src/libcode/vx_stat_out/stat_columns.cc +++ b/src/libcode/vx_stat_out/stat_columns.cc @@ -4220,14 +4220,14 @@ void write_ecnt_cols(const ECNTInfo &ecnt_info, // // Ensemble Continuous Statistics // Dump out the ECNT line: - // TOTAL, N_ENS, CRPS, - // CRPSS, IGN, ME, - // RMSE, SPREAD, ME_OERR, - // RMSE_OERR, SPREAD_OERR, SPREAD_PLUS_OERR, - // CRPSCL, CRPS_EMP, CRPSCL_EMP, - // CRPSS_EMP CRPS_EMP_FAIR, BIAS RATIO, - // N_GE_OBS, ME_GE_OBS, N_LT_OBS, - // ME_LT_OBS + // TOTAL, N_ENS, CRPS, + // CRPSS, IGN, ME, + // RMSE, SPREAD, ME_OERR, + // RMSE_OERR, SPREAD_OERR, SPREAD_PLUS_OERR, + // CRPSCL, CRPS_EMP, CRPSCL_EMP, + // CRPSS_EMP CRPS_EMP_FAIR, MAE, + // MAE_OERR, BIAS RATIO, N_GE_OBS, + // ME_GE_OBS, N_LT_OBS, ME_LT_OBS // at.set_entry(r, c+0, // Total Number of Pairs ecnt_info.n_pair); @@ -4280,19 +4280,25 @@ void write_ecnt_cols(const ECNTInfo &ecnt_info, at.set_entry(r, c+16, // Empirical ensemble CRPS FAIR ecnt_info.crps_emp_fair); - at.set_entry(r, c+17, // Bias Ratio + at.set_entry(r, c+17, // MAE for unperturbed ensemble mean + ecnt_info.mae); + + at.set_entry(r, c+18, // MAE for mean of perturbed members + ecnt_info.mae_oerr); + + at.set_entry(r, c+19, // Bias Ratio ecnt_info.bias_ratio); - at.set_entry(r, c+18, // Number of ensemble values >= observations + at.set_entry(r, c+20, // Number of ensemble values >= observations ecnt_info.n_ge_obs); - at.set_entry(r, c+19, // ME of ensemble values >= observations + at.set_entry(r, c+21, // ME of ensemble values >= observations ecnt_info.me_ge_obs); - at.set_entry(r, c+20, // Number of ensemble values < observations + at.set_entry(r, c+22, // Number of ensemble values < observations ecnt_info.n_lt_obs); - at.set_entry(r, c+21, // ME of ensemble values < observations + at.set_entry(r, c+23, // ME of ensemble values < observations ecnt_info.me_lt_obs); return; diff --git a/src/libcode/vx_statistics/ens_stats.cc b/src/libcode/vx_statistics/ens_stats.cc index 89bee8d597..b64341a3dc 100644 --- a/src/libcode/vx_statistics/ens_stats.cc +++ b/src/libcode/vx_statistics/ens_stats.cc @@ -180,8 +180,8 @@ void ECNTInfo::clear() { crps_emp = crpscl_emp = crpss_emp = crps_emp_fair = bad_data_double; crps_gaus = crpscl_gaus = crpss_gaus = bad_data_double; ign = bad_data_double; - me = rmse = spread = bad_data_double; - me_oerr = rmse_oerr = spread_oerr = bad_data_double; + me = mae = rmse = spread = bad_data_double; + me_oerr = mae_oerr = rmse_oerr = spread_oerr = bad_data_double; spread_plus_oerr = bad_data_double; n_ge_obs = n_lt_obs = 0; @@ -210,10 +210,12 @@ void ECNTInfo::assign(const ECNTInfo &c) { ign = c.ign; me = c.me; + mae = c.mae; rmse = c.rmse; spread = c.spread; me_oerr = c.me_oerr; + mae_oerr = c.mae_oerr; rmse_oerr = c.rmse_oerr; spread_oerr = c.spread_oerr; spread_plus_oerr = c.spread_plus_oerr; @@ -232,7 +234,7 @@ void ECNTInfo::assign(const ECNTInfo &c) { void ECNTInfo::set(const PairDataEnsemble &pd) { int i; double w, w_sum; - double fbar, obar, ffbar, oobar, fobar; + double fbar, obar, ffbar, oobar, fobar, abserr; NumArray cur; // Store the number of ensemble members @@ -276,8 +278,10 @@ void ECNTInfo::set(const PairDataEnsemble &pd) { // already computed by Stat-Analysis if(!is_bad_data(pd.me)) { me = pd.me; + mae = pd.mae; rmse = pd.rmse; me_oerr = pd.me_oerr; + mae_oerr = pd.mae_oerr; rmse_oerr = pd.rmse_oerr; } // If not, compute them from the pairs, if possible @@ -285,55 +289,62 @@ void ECNTInfo::set(const PairDataEnsemble &pd) { else if(!pd.mn_na.is_const(bad_data_double)) { // Compute ME and RMSE values - fbar = obar = ffbar = oobar = fobar = 0.0; + fbar = obar = ffbar = oobar = fobar = abserr = 0.0; for(i=0; isecond.ens_pd.me = it->second.me_na.wmean(it->second.ens_pd.wgt_na); + it->second.ens_pd.mae = it->second.mae_na.wmean(it->second.ens_pd.wgt_na); v = it->second.mse_na.wmean(it->second.ens_pd.wgt_na); it->second.ens_pd.rmse = (is_bad_data(v) ? bad_data_double : sqrt(v)); it->second.ens_pd.me_oerr = it->second.me_oerr_na.wmean(it->second.ens_pd.wgt_na); + it->second.ens_pd.mae_oerr = it->second.mae_oerr_na.wmean(it->second.ens_pd.wgt_na); v = it->second.mse_oerr_na.wmean(it->second.ens_pd.wgt_na); it->second.ens_pd.rmse_oerr = (is_bad_data(v) ? bad_data_double : sqrt(v)); diff --git a/src/tools/core/stat_analysis/aggr_stat_line.h b/src/tools/core/stat_analysis/aggr_stat_line.h index 43c5a437ee..0297334f3d 100644 --- a/src/tools/core/stat_analysis/aggr_stat_line.h +++ b/src/tools/core/stat_analysis/aggr_stat_line.h @@ -153,7 +153,8 @@ struct AggrENSInfo { StatHdrInfo hdr; PairDataEnsemble ens_pd; ClimoCDFInfo cdf_info; - NumArray me_na, mse_na, me_oerr_na, mse_oerr_na; + NumArray me_na, mae_na, mse_na; + NumArray me_oerr_na, mae_oerr_na, mse_oerr_na; void clear(); }; diff --git a/src/tools/core/stat_analysis/parse_stat_line.cc b/src/tools/core/stat_analysis/parse_stat_line.cc index d39e4f4d27..921297c2a2 100644 --- a/src/tools/core/stat_analysis/parse_stat_line.cc +++ b/src/tools/core/stat_analysis/parse_stat_line.cc @@ -377,6 +377,9 @@ void parse_ecnt_line(STATLine &l, ECNTData &e_data) { e_data.spread_plus_oerr = atof(l.get_item("SPREAD_PLUS_OERR")); + e_data.mae = atof(l.get_item("MAE")); + e_data.mae_oerr = atof(l.get_item("MAE_OERR")); + e_data.bias_ratio = atof(l.get_item("BIAS_RATIO")); e_data.n_ge_obs = atoi(l.get_item("N_GE_OBS")); e_data.me_ge_obs = atof(l.get_item("ME_GE_OBS")); diff --git a/src/tools/core/stat_analysis/parse_stat_line.h b/src/tools/core/stat_analysis/parse_stat_line.h index 8cfc6efdc7..3885538b08 100644 --- a/src/tools/core/stat_analysis/parse_stat_line.h +++ b/src/tools/core/stat_analysis/parse_stat_line.h @@ -63,8 +63,8 @@ struct ECNTData { int total, n_ens; double crps_emp, crps_emp_fair, crpscl_emp, crpss_emp; double crps_gaus, crpscl_gaus, crpss_gaus; - double ign, me, rmse, spread; - double me_oerr, rmse_oerr, spread_oerr; + double ign, me, mae, rmse, spread; + double me_oerr, mae_oerr, rmse_oerr, spread_oerr; double spread_plus_oerr; double bias_ratio; int n_ge_obs, n_lt_obs;