From e7cd0e39edabd1b4dca298a021dc83be837a7c23 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 12 Jun 2023 08:17:00 -0600 Subject: [PATCH 1/8] Update develop-ref after #2555 and #2561 (#2568) Co-authored-by: John Halley Gotway Co-authored-by: Seth Linden Co-authored-by: jprestop Co-authored-by: Daniel Adriaansen Co-authored-by: John and Cindy Co-authored-by: Howard Soh Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> Co-authored-by: hsoh-u Co-authored-by: MET Tools Test Account Co-authored-by: Seth Linden Co-authored-by: lisagoodrich <33230218+lisagoodrich@users.noreply.github.com> Co-authored-by: davidalbo Co-authored-by: Lisa Goodrich Co-authored-by: metplus-bot <97135045+metplus-bot@users.noreply.github.com> Co-authored-by: j-opatz <59586397+j-opatz@users.noreply.github.com> Fix Python environment issue (#2407) fix definitions of G172 and G220 based on comments in NOAA-EMC/NCEPLIBS-w3emc#157. (#2406) fix #2380 develop override (#2382) fix #2408 develop empty config (#2410) fix #2390 develop compile zlib (#2404) fix #2412 develop climo (#2422) fix #2437 develop convert (#2439) fix for develop, for #2437, forgot one reference to the search_parent for a dictionary lookup. fix #2452 develop airnow (#2454) fix #2449 develop pdf (#2464) fix #2402 develop sonarqube (#2468) fix #2426 develop buoy (#2475) fix 2518 dtypes appf docs (#2519) fix 2531 compilation errors (#2533) fix #2531 compilation_errors_configure (#2535) --- .github/workflows/testing.yml | 2 +- INSTALL | 1 + README.md | 2 + configure | 4 +- configure.ac | 4 +- data/config/Ascii2NcConfig_default | 5 +- data/config/Makefile.am | 1 + data/config/Makefile.in | 1 + data/config/TCDiagConfig_default | 150 ++ data/table_files/grib2_mrms.txt | 28 + docs/Users_Guide/appendixC.rst | 23 +- docs/Users_Guide/index.rst | 1 + docs/Users_Guide/mode.rst | 2 +- docs/Users_Guide/tc-diag.rst | 192 ++ docs/Users_Guide/tc-gen.rst | 4 +- docs/Users_Guide/tc-pairs.rst | 3 + .../scripts/installation/compile_MET_all.sh | 132 +- internal/test_unit/bin/unit_test.sh | 1 + .../test_unit/config/Ascii2NcConfig_aeronet | 5 +- .../config/Ascii2NcConfig_rain_01H_sum | 5 +- internal/test_unit/config/TCDiagConfig_ian | 144 ++ .../test_unit/config/TCPairsConfig_CONSENSUS | 5 - internal/test_unit/xml/unit_tc_diag.xml | 41 + scripts/python/Makefile.am | 9 +- scripts/python/Makefile.in | 9 +- scripts/python/pyembed/Makefile.am | 4 +- scripts/python/pyembed/Makefile.in | 4 +- scripts/python/pyembed/read_tmp_tc_diag.py | 15 + scripts/python/pyembed/write_tmp_tc_diag.py | 18 + scripts/python/tc_diag/Makefile.am | 33 + scripts/python/tc_diag/Makefile.in | 521 +++++ .../python/tc_diag/compute_tc_diagnostics.py | 177 ++ src/basic/vx_cal/time_array.cc | 24 + src/basic/vx_cal/time_array.h | 1 + src/basic/vx_config/config_constants.h | 12 + src/basic/vx_config/vx_config.h | 1 + src/basic/vx_util/main.cc | 2 +- src/basic/vx_util/string_fxns.cc | 20 + src/basic/vx_util/string_fxns.h | 12 +- src/libcode/vx_data2d/var_info.cc | 21 + src/libcode/vx_data2d/var_info.h | 1 + .../vx_data2d_factory/var_info_factory.cc | 14 + .../vx_data2d_factory/var_info_factory.h | 1 + src/libcode/vx_grid/tcrmw_grid.h | 8 +- src/libcode/vx_nc_util/nc_utils.cc | 55 +- src/libcode/vx_python3_utils/python3_util.h | 2 + src/libcode/vx_series_data/series_data.cc | 27 +- src/libcode/vx_shapedata/mode_conf_info.cc | 59 +- src/libcode/vx_shapedata/mode_conf_info.h | 2 + src/libcode/vx_tc_util/gen_shape_info.cc | 3 +- src/libcode/vx_tc_util/track_point.cc | 26 + src/libcode/vx_tc_util/track_point.h | 1 + src/libcode/vx_tc_util/vx_tc_nc_util.cc | 333 +++- src/libcode/vx_tc_util/vx_tc_nc_util.h | 42 +- src/tools/tc_utils/Makefile.am | 4 + src/tools/tc_utils/Makefile.in | 14 +- src/tools/tc_utils/tc_diag/.gitignore | 6 + src/tools/tc_utils/tc_diag/Makefile.am | 49 + src/tools/tc_utils/tc_diag/Makefile.in | 734 +++++++ src/tools/tc_utils/tc_diag/python_tc_diag.cc | 334 ++++ src/tools/tc_utils/tc_diag/python_tc_diag.h | 32 + src/tools/tc_utils/tc_diag/tc_diag.cc | 1698 +++++++++++++++++ src/tools/tc_utils/tc_diag/tc_diag.h | 201 ++ .../tc_utils/tc_diag/tc_diag_conf_info.cc | 452 +++++ .../tc_utils/tc_diag/tc_diag_conf_info.h | 157 ++ src/tools/tc_utils/tc_gen/tc_gen.cc | 66 +- src/tools/tc_utils/tc_gen/tc_gen.h | 6 +- src/tools/tc_utils/tc_pairs/tc_pairs.cc | 1 + src/tools/tc_utils/tc_rmw/tc_rmw.cc | 30 +- src/tools/tc_utils/tc_rmw/tc_rmw.h | 7 +- .../tc_utils/tc_rmw/tc_rmw_wind_converter.cc | 4 +- 71 files changed, 5731 insertions(+), 277 deletions(-) create mode 100644 data/config/TCDiagConfig_default create mode 100644 docs/Users_Guide/tc-diag.rst mode change 100755 => 100644 internal/scripts/installation/compile_MET_all.sh create mode 100644 internal/test_unit/config/TCDiagConfig_ian create mode 100644 internal/test_unit/xml/unit_tc_diag.xml create mode 100644 scripts/python/pyembed/read_tmp_tc_diag.py create mode 100644 scripts/python/pyembed/write_tmp_tc_diag.py create mode 100644 scripts/python/tc_diag/Makefile.am create mode 100644 scripts/python/tc_diag/Makefile.in create mode 100644 scripts/python/tc_diag/compute_tc_diagnostics.py create mode 100644 src/tools/tc_utils/tc_diag/.gitignore create mode 100644 src/tools/tc_utils/tc_diag/Makefile.am create mode 100644 src/tools/tc_utils/tc_diag/Makefile.in create mode 100644 src/tools/tc_utils/tc_diag/python_tc_diag.cc create mode 100644 src/tools/tc_utils/tc_diag/python_tc_diag.h create mode 100644 src/tools/tc_utils/tc_diag/tc_diag.cc create mode 100644 src/tools/tc_utils/tc_diag/tc_diag.h create mode 100644 src/tools/tc_utils/tc_diag/tc_diag_conf_info.cc create mode 100644 src/tools/tc_utils/tc_diag/tc_diag_conf_info.h diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index c147a4ef79..3550a30a5c 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -167,7 +167,7 @@ jobs: strategy: matrix: tests: - - 'ascii2nc_indy pb2nc_indy tc_dland tc_pairs tc_stat plot_tc tc_rmw rmw_analysis tc_gen' + - 'ascii2nc_indy pb2nc_indy tc_dland tc_pairs tc_stat plot_tc tc_rmw rmw_analysis tc_diag tc_gen' - 'met_test_scripts mode_multivar mode_graphics mtd regrid airnow gsi_tools netcdf modis series_analysis gen_ens_prod wwmca_regrid gen_vx_mask grid_weight interp_shape grid_diag grib_tables lidar2nc shift_data_plane trmm2nc aeronet wwmca_plot ioda2nc gaussian' fail-fast: false steps: diff --git a/INSTALL b/INSTALL index 82fb383f4d..14000719f8 100644 --- a/INSTALL +++ b/INSTALL @@ -219,6 +219,7 @@ sub-directory, or the MET Online Tutorial: - series_analysis - shift_data_plane - stat_analysis + - tc_diag - tc_dland - tc_gen - tc_pairs diff --git a/README.md b/README.md index bb6e08f57e..a91bcc55ba 100644 --- a/README.md +++ b/README.md @@ -9,3 +9,5 @@ Model Evaluation Tools (MET) Repository This repository contains the source code for the Model Evaluation Tools package. Please see the [MET website](https://dtcenter.org/community-code/model-evaluation-tools-met) and the [MET User's Guide](https://met.readthedocs.io/en/latest) for more information. Support for the METplus components is provided through the [METplus Discussions](https://github.com/dtcenter/METplus/discussions) forum. Users are welcome and encouraged to answer or address each other's questions there! For more information, please read "[Welcome to the METplus Components Discussions](https://github.com/dtcenter/METplus/discussions/939)". + +For information about the support provided for releases, see our [Release Support Policy](https://metplus.readthedocs.io/en/develop/Release_Guide/index.html#release-support-policy). diff --git a/configure b/configure index 12f9307754..7f4e796d1c 100755 --- a/configure +++ b/configure @@ -8877,7 +8877,7 @@ done # Create configured files -ac_config_files="$ac_config_files Makefile scripts/Rscripts/Makefile scripts/Rscripts/include/Makefile scripts/python/Makefile scripts/python/examples/Makefile scripts/python/met/Makefile scripts/python/pyembed/Makefile scripts/python/utility/Makefile data/Makefile data/climo/Makefile data/climo/seeps/Makefile data/colortables/Makefile data/colortables/NCL_colortables/Makefile data/config/Makefile data/map/Makefile data/map/admin_by_country/Makefile data/poly/Makefile data/poly/HMT_masks/Makefile data/poly/NCEP_masks/Makefile data/ps/Makefile data/table_files/Makefile data/tc_data/Makefile src/Makefile src/basic/Makefile src/basic/enum_to_string/Makefile src/basic/vx_cal/Makefile src/basic/vx_config/Makefile src/basic/vx_log/Makefile src/basic/vx_math/Makefile src/basic/vx_util/Makefile src/basic/vx_util_math/Makefile src/libcode/Makefile src/libcode/vx_afm/Makefile src/libcode/vx_analysis_util/Makefile src/libcode/vx_color/Makefile src/libcode/vx_data2d/Makefile src/libcode/vx_data2d_factory/Makefile src/libcode/vx_data2d_grib/Makefile src/libcode/vx_data2d_grib2/Makefile src/libcode/vx_data2d_nc_met/Makefile src/libcode/vx_data2d_nc_pinterp/Makefile src/libcode/vx_data2d_nccf/Makefile src/libcode/vx_geodesy/Makefile src/libcode/vx_gis/Makefile src/libcode/vx_gnomon/Makefile src/libcode/vx_grid/Makefile src/libcode/vx_gsl_prob/Makefile src/libcode/vx_nav/Makefile src/libcode/vx_solar/Makefile src/libcode/vx_nc_obs/Makefile src/libcode/vx_nc_util/Makefile src/libcode/vx_pb_util/Makefile src/libcode/vx_plot_util/Makefile src/libcode/vx_ps/Makefile src/libcode/vx_pxm/Makefile src/libcode/vx_render/Makefile src/libcode/vx_shapedata/Makefile src/libcode/vx_stat_out/Makefile src/libcode/vx_statistics/Makefile src/libcode/vx_time_series/Makefile src/libcode/vx_physics/Makefile src/libcode/vx_series_data/Makefile src/libcode/vx_regrid/Makefile src/libcode/vx_tc_util/Makefile src/libcode/vx_summary/Makefile src/libcode/vx_python3_utils/Makefile src/libcode/vx_data2d_python/Makefile src/libcode/vx_bool_calc/Makefile src/libcode/vx_pointdata_python/Makefile src/libcode/vx_seeps/Makefile src/tools/Makefile src/tools/core/Makefile src/tools/core/ensemble_stat/Makefile src/tools/core/grid_stat/Makefile src/tools/core/mode/Makefile src/tools/core/mode_analysis/Makefile src/tools/core/pcp_combine/Makefile src/tools/core/point_stat/Makefile src/tools/core/series_analysis/Makefile src/tools/core/stat_analysis/Makefile src/tools/core/wavelet_stat/Makefile src/tools/other/Makefile src/tools/other/ascii2nc/Makefile src/tools/other/lidar2nc/Makefile src/tools/other/gen_ens_prod/Makefile src/tools/other/gen_vx_mask/Makefile src/tools/other/gis_utils/Makefile src/tools/other/ioda2nc/Makefile src/tools/other/madis2nc/Makefile src/tools/other/mode_graphics/Makefile src/tools/other/modis_regrid/Makefile src/tools/other/pb2nc/Makefile src/tools/other/plot_data_plane/Makefile src/tools/other/plot_point_obs/Makefile src/tools/other/wwmca_tool/Makefile src/tools/other/gsi_tools/Makefile src/tools/other/regrid_data_plane/Makefile src/tools/other/point2grid/Makefile src/tools/other/shift_data_plane/Makefile src/tools/other/mode_time_domain/Makefile src/tools/other/grid_diag/Makefile src/tools/tc_utils/Makefile src/tools/tc_utils/tc_dland/Makefile src/tools/tc_utils/tc_pairs/Makefile src/tools/tc_utils/tc_stat/Makefile src/tools/tc_utils/tc_gen/Makefile src/tools/tc_utils/rmw_analysis/Makefile src/tools/tc_utils/tc_rmw/Makefile" +ac_config_files="$ac_config_files Makefile scripts/Rscripts/Makefile scripts/Rscripts/include/Makefile scripts/python/Makefile scripts/python/examples/Makefile scripts/python/met/Makefile scripts/python/pyembed/Makefile scripts/python/utility/Makefile scripts/python/tc_diag/Makefile data/Makefile data/climo/Makefile data/climo/seeps/Makefile data/colortables/Makefile data/colortables/NCL_colortables/Makefile data/config/Makefile data/map/Makefile data/map/admin_by_country/Makefile data/poly/Makefile data/poly/HMT_masks/Makefile data/poly/NCEP_masks/Makefile data/ps/Makefile data/table_files/Makefile data/tc_data/Makefile src/Makefile src/basic/Makefile src/basic/enum_to_string/Makefile src/basic/vx_cal/Makefile src/basic/vx_config/Makefile src/basic/vx_log/Makefile src/basic/vx_math/Makefile src/basic/vx_util/Makefile src/basic/vx_util_math/Makefile src/libcode/Makefile src/libcode/vx_afm/Makefile src/libcode/vx_analysis_util/Makefile src/libcode/vx_color/Makefile src/libcode/vx_data2d/Makefile src/libcode/vx_data2d_factory/Makefile src/libcode/vx_data2d_grib/Makefile src/libcode/vx_data2d_grib2/Makefile src/libcode/vx_data2d_nc_met/Makefile src/libcode/vx_data2d_nc_pinterp/Makefile src/libcode/vx_data2d_nccf/Makefile src/libcode/vx_geodesy/Makefile src/libcode/vx_gis/Makefile src/libcode/vx_gnomon/Makefile src/libcode/vx_grid/Makefile src/libcode/vx_gsl_prob/Makefile src/libcode/vx_nav/Makefile src/libcode/vx_solar/Makefile src/libcode/vx_nc_obs/Makefile src/libcode/vx_nc_util/Makefile src/libcode/vx_pb_util/Makefile src/libcode/vx_plot_util/Makefile src/libcode/vx_ps/Makefile src/libcode/vx_pxm/Makefile src/libcode/vx_render/Makefile src/libcode/vx_shapedata/Makefile src/libcode/vx_stat_out/Makefile src/libcode/vx_statistics/Makefile src/libcode/vx_time_series/Makefile src/libcode/vx_physics/Makefile src/libcode/vx_series_data/Makefile src/libcode/vx_regrid/Makefile src/libcode/vx_tc_util/Makefile src/libcode/vx_summary/Makefile src/libcode/vx_python3_utils/Makefile src/libcode/vx_data2d_python/Makefile src/libcode/vx_bool_calc/Makefile src/libcode/vx_pointdata_python/Makefile src/libcode/vx_seeps/Makefile src/tools/Makefile src/tools/core/Makefile src/tools/core/ensemble_stat/Makefile src/tools/core/grid_stat/Makefile src/tools/core/mode/Makefile src/tools/core/mode_analysis/Makefile src/tools/core/pcp_combine/Makefile src/tools/core/point_stat/Makefile src/tools/core/series_analysis/Makefile src/tools/core/stat_analysis/Makefile src/tools/core/wavelet_stat/Makefile src/tools/other/Makefile src/tools/other/ascii2nc/Makefile src/tools/other/lidar2nc/Makefile src/tools/other/gen_ens_prod/Makefile src/tools/other/gen_vx_mask/Makefile src/tools/other/gis_utils/Makefile src/tools/other/ioda2nc/Makefile src/tools/other/madis2nc/Makefile src/tools/other/mode_graphics/Makefile src/tools/other/modis_regrid/Makefile src/tools/other/pb2nc/Makefile src/tools/other/plot_data_plane/Makefile src/tools/other/plot_point_obs/Makefile src/tools/other/wwmca_tool/Makefile src/tools/other/gsi_tools/Makefile src/tools/other/regrid_data_plane/Makefile src/tools/other/point2grid/Makefile src/tools/other/shift_data_plane/Makefile src/tools/other/mode_time_domain/Makefile src/tools/other/grid_diag/Makefile src/tools/tc_utils/Makefile src/tools/tc_utils/tc_dland/Makefile src/tools/tc_utils/tc_pairs/Makefile src/tools/tc_utils/tc_stat/Makefile src/tools/tc_utils/tc_gen/Makefile src/tools/tc_utils/rmw_analysis/Makefile src/tools/tc_utils/tc_rmw/Makefile src/tools/tc_utils/tc_diag/Makefile" if test -n "$MET_DEVELOPMENT"; then @@ -9769,6 +9769,7 @@ do "scripts/python/met/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/python/met/Makefile" ;; "scripts/python/pyembed/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/python/pyembed/Makefile" ;; "scripts/python/utility/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/python/utility/Makefile" ;; + "scripts/python/tc_diag/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/python/tc_diag/Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "data/climo/Makefile") CONFIG_FILES="$CONFIG_FILES data/climo/Makefile" ;; "data/climo/seeps/Makefile") CONFIG_FILES="$CONFIG_FILES data/climo/seeps/Makefile" ;; @@ -9869,6 +9870,7 @@ do "src/tools/tc_utils/tc_gen/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/tc_utils/tc_gen/Makefile" ;; "src/tools/tc_utils/rmw_analysis/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/tc_utils/rmw_analysis/Makefile" ;; "src/tools/tc_utils/tc_rmw/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/tc_utils/tc_rmw/Makefile" ;; + "src/tools/tc_utils/tc_diag/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/tc_utils/tc_diag/Makefile" ;; "src/tools/dev_utils/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/dev_utils/Makefile" ;; "src/tools/dev_utils/shapefiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/dev_utils/shapefiles/Makefile" ;; "internal/test_util/Makefile") CONFIG_FILES="$CONFIG_FILES internal/test_util/Makefile" ;; diff --git a/configure.ac b/configure.ac index e54e5ea3b3..28744a1f22 100644 --- a/configure.ac +++ b/configure.ac @@ -1211,6 +1211,7 @@ AC_CONFIG_FILES([Makefile scripts/python/met/Makefile scripts/python/pyembed/Makefile scripts/python/utility/Makefile + scripts/python/tc_diag/Makefile data/Makefile data/climo/Makefile data/climo/seeps/Makefile @@ -1310,7 +1311,8 @@ AC_CONFIG_FILES([Makefile src/tools/tc_utils/tc_stat/Makefile src/tools/tc_utils/tc_gen/Makefile src/tools/tc_utils/rmw_analysis/Makefile - src/tools/tc_utils/tc_rmw/Makefile]) + src/tools/tc_utils/tc_rmw/Makefile + src/tools/tc_utils/tc_diag/Makefile]) if test -n "$MET_DEVELOPMENT"; then AC_CONFIG_FILES([src/tools/dev_utils/Makefile diff --git a/data/config/Ascii2NcConfig_default b/data/config/Ascii2NcConfig_default index 4313b37379..b473cb1757 100644 --- a/data/config/Ascii2NcConfig_default +++ b/data/config/Ascii2NcConfig_default @@ -37,12 +37,15 @@ message_type_map = [ { key = "FM-12 SYNOP"; val = "ADPSFC"; }, { key = "FM-13 SHIP"; val = "SFCSHP"; }, { key = "FM-15 METAR"; val = "ADPSFC"; }, + { key = "FM-16 SPECI"; val = "ADPSFC"; }, { key = "FM-18 BUOY"; val = "SFCSHP"; }, + { key = "FM-18X BUOY"; val = "SFCSHP"; }, { key = "FM-281 QSCAT"; val = "ASCATW"; }, { key = "FM-32 PILOT"; val = "ADPUPA"; }, { key = "FM-35 TEMP"; val = "ADPUPA"; }, { key = "FM-88 SATOB"; val = "SATWND"; }, - { key = "FM-97 ACARS"; val = "AIRCFT"; } + { key = "FM-97 ACARS"; val = "AIRCFT"; }, + { key = "FM-97 AMDAR"; val = "AIRCFT"; } ]; // diff --git a/data/config/Makefile.am b/data/config/Makefile.am index 6766b264dc..8c3e1934de 100644 --- a/data/config/Makefile.am +++ b/data/config/Makefile.am @@ -38,6 +38,7 @@ config_DATA = \ STATAnalysisConfig_default \ STATAnalysisConfig_GO_Index \ STATAnalysisConfig_CBS_Index \ + TCDiagConfig_default \ TCPairsConfig_default \ TCRMWConfig_default \ RMWAnalysisConfig_default \ diff --git a/data/config/Makefile.in b/data/config/Makefile.in index eaad379a8e..661063c4d0 100644 --- a/data/config/Makefile.in +++ b/data/config/Makefile.in @@ -315,6 +315,7 @@ config_DATA = \ STATAnalysisConfig_default \ STATAnalysisConfig_GO_Index \ STATAnalysisConfig_CBS_Index \ + TCDiagConfig_default \ TCPairsConfig_default \ TCRMWConfig_default \ RMWAnalysisConfig_default \ diff --git a/data/config/TCDiagConfig_default b/data/config/TCDiagConfig_default new file mode 100644 index 0000000000..2f4adaa86d --- /dev/null +++ b/data/config/TCDiagConfig_default @@ -0,0 +1,150 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// TC-Diag configuration file. +// +// For additional information, please see the MET User's Guide. +// +//////////////////////////////////////////////////////////////////////////////// + +// +// Filter input track data lines. +// + +// +// Model +// +model = []; + +// +// Storm identifier +// +storm_id = ""; + +// +// Basin +// +basin = ""; + +// +// Cyclone number +// +cyclone = ""; + +// +// Model initialization time +// +init_inc = ""; + +// +// Subset by the valid time +// +valid_beg = ""; +valid_end = ""; +valid_inc = []; +valid_exc = []; + +// +// Subset by the valid hour and lead time. +// +valid_hour = []; +lead = []; + +//////////////////////////////////////////////////////////////////////////////// + +// +// Python diagnostic scripts to be run +// May be set separately in each "domain_info" entry +// +diag_script = [ "MET_BASE/python/tc_diag/compute_tc_diagnostics.py" ]; + +// +// Domain-specific cylindrical coordinate transformation +// +domain_info = [ + { + domain = "parent"; + n_range = 150; + n_azimuth = 8; + delta_range_km = 10.0; + }, + { + domain = "nest"; + n_range = 150; + n_azimuth = 8; + delta_range_km = 2.0; + } +]; + +//////////////////////////////////////////////////////////////////////////////// + +// +// Data censoring and conversion +// May be set separately in each diag_data "field" entry +// +// censor_thresh = []; +// censor_val = []; +// convert(x) = x; +// + +// +// Data fields +// +data = { + + // If empty, the field is processed for all domains + domain = []; + + // Pressure levels to be used, unless overridden below + level = [ "P1000", "P925", "P850", "P700", "P500", + "P400", "P300", "P250", "P200", "P150", + "P100" ]; + + field = [ + { name = "TMP"; }, + { name = "UGRD"; }, + { name = "VGRD"; }, + { name = "RH"; }, + { name = "HGT"; }, + { name = "PRMSL"; level = "Z0"; }, + { name = "PWAT"; level = "L0"; }, + { name = "TMP"; level = "Z0"; }, + { name = "TMP"; level = "Z2"; }, + { name = "RH"; level = "Z2"; }, + { name = "UGRD"; level = "Z10"; }, + { name = "VGRD"; level = "Z10"; } + ]; +} + +//////////////////////////////////////////////////////////////////////////////// + +// +// Regridding options +// +regrid = { + method = NEAREST; + width = 1; + vld_thresh = 0.5; + shape = SQUARE; +} + +// +// Vortex removal flag +// +vortex_removal = FALSE; + +//////////////////////////////////////////////////////////////////////////////// + +// +// Flags to control output files +// +nc_rng_azi_flag = TRUE; +nc_diag_flag = FALSE; +cira_diag_flag = FALSE; + +//////////////////////////////////////////////////////////////////////////////// + +tmp_dir = "/tmp"; +output_prefix = ""; +version = "V11.1.0"; + +//////////////////////////////////////////////////////////////////////////////// diff --git a/data/table_files/grib2_mrms.txt b/data/table_files/grib2_mrms.txt index 0b00086744..0b539859e0 100644 --- a/data/table_files/grib2_mrms.txt +++ b/data/table_files/grib2_mrms.txt @@ -3,6 +3,7 @@ GRIB2 209 10 0 255 161 1 2 1 "NLDN_CG_005min_AvgDensity" "CG Lightning Density 5-min - NLDN" "flashes/km^2/min" 209 10 0 255 161 1 2 2 "NLDN_CG_015min_AvgDensity" "CG Lightning Density 15-min - NLDN" "flashes/km^2/min" 209 10 0 255 161 1 2 3 "NLDN_CG_030min_AvgDensity" "CG Lightning Density 30-min - NLDN" "flashes/km^2/min" +209 10 0 255 161 1 2 4 "LightningProbabilityNext30min" "Lightning Probability 0-30 minutes - NLDN" "%" 209 10 0 255 161 1 2 5 "LightningProbabilityNext30minGrid" "Lightning Probability 0-30 minutes - NLDN" "%" 209 10 0 255 161 1 2 6 "LightningProbabilityNext60minGrid" "Lightning Probability 0-60 minutes - NLDN" "%" 209 10 0 255 161 1 2 7 "LightningJumpGrid" "Rapid lightning increases and decreases" "non-dim" @@ -50,6 +51,10 @@ GRIB2 209 10 0 255 161 1 3 56 "Reflectivity_-20C" "Isothermal Reflectivity at -20C" "dBZ" 209 10 0 255 161 1 3 57 "ReflectivityAtLowestAltitude" "ReflectivityAtLowestAltitude" "dBZ" 209 10 0 255 161 1 3 58 "MergedReflectivityAtLowestAltitude" "Non Quality Controlled Reflectivity At Lowest Altitude" "dBZ" +209 10 0 255 161 1 4 0 "IRband4" "Infrared (E/W blend)" "K" +209 10 0 255 161 1 4 1 "Visible" "Visible (E/W blend)" "non-dim" +209 10 0 255 161 1 4 2 "WaterVapor" "Water Vapor (E/W blend)" "K" +209 10 0 255 161 1 4 3 "CloudCover" "Cloud Cover" "K" 209 10 0 255 161 1 6 0 "PrecipFlag" "Surface Precipitation Type" "type" 209 10 0 255 161 1 6 1 "PrecipRate" "Radar Precipitation Rate" "mm/hr" 209 10 0 255 161 1 6 2 "RadarOnly_QPE_01H" "Radar precipitation accumulation 1-hour" "mm" @@ -59,6 +64,27 @@ GRIB2 209 10 0 255 161 1 6 6 "RadarOnly_QPE_24H" "Radar precipitation accumulation 24-hour" "mm" 209 10 0 255 161 1 6 7 "RadarOnly_QPE_48H" "Radar precipitation accumulation 48-hour" "mm" 209 10 0 255 161 1 6 8 "RadarOnly_QPE_72H" "Radar precipitation accumulation 72-hour" "mm" +209 10 0 255 161 1 6 9 "GaugeCorrQPE01H" "Local gauge bias corrected radar precipitation accumulation 1-hour" "mm" +209 10 0 255 161 1 6 10 "GaugeCorrQPE03H" "Local gauge bias corrected radar precipitation accumulation 3-hour" "mm" +209 10 0 255 161 1 6 11 "GaugeCorrQPE06H" "Local gauge bias corrected radar precipitation accumulation 6-hour" "mm" +209 10 0 255 161 1 6 12 "GaugeCorrQPE12H" "Local gauge bias corrected radar precipitation accumulation 12-hour" "mm" +209 10 0 255 161 1 6 13 "GaugeCorrQPE24H" "Local gauge bias corrected radar precipitation accumulation 24-hour" "mm" +209 10 0 255 161 1 6 14 "GaugeCorrQPE48H" "Local gauge bias corrected radar precipitation accumulation 48-hour" "mm" +209 10 0 255 161 1 6 15 "GaugeCorrQPE72H" "Local gauge bias corrected radar precipitation accumulation 72-hour" "mm" +209 10 0 255 161 1 6 16 "GaugeOnlyQPE01H" "Gauge only precipitation accumulation 1-hour" "mm" +209 10 0 255 161 1 6 17 "GaugeOnlyQPE03H" "Gauge only precipitation accumulation 3-hour" "mm" +209 10 0 255 161 1 6 18 "GaugeOnlyQPE06H" "Gauge only precipitation accumulation 6-hour" "mm" +209 10 0 255 161 1 6 19 "GaugeOnlyQPE12H" "Gauge only precipitation accumulation 12-hour" "mm" +209 10 0 255 161 1 6 20 "GaugeOnlyQPE24H" "Gauge only precipitation accumulation 24-hour" "mm" +209 10 0 255 161 1 6 21 "GaugeOnlyQPE48H" "Gauge only precipitation accumulation 48-hour" "mm" +209 10 0 255 161 1 6 22 "GaugeOnlyQPE72H" "Gauge only precipitation accumulation 72-hour" "mm" +209 10 0 255 161 1 6 23 "MountainMapperQPE01H" "Mountain Mapper precipitation accumulation 1-hour" "mm" +209 10 0 255 161 1 6 24 "MountainMapperQPE03H" "Mountain Mapper precipitation accumulation 3-hour" "mm" +209 10 0 255 161 1 6 25 "MountainMapperQPE06H" "Mountain Mapper precipitation accumulation 6-hour" "mm" +209 10 0 255 161 1 6 26 "MountainMapperQPE12H" "Mountain Mapper precipitation accumulation 12-hour" "mm" +209 10 0 255 161 1 6 27 "MountainMapperQPE24H" "Mountain Mapper precipitation accumulation 24-hour" "mm" +209 10 0 255 161 1 6 28 "MountainMapperQPE48H" "Mountain Mapper precipitation accumulation 48-hour" "mm" +209 10 0 255 161 1 6 29 "MountainMapperQPE72H" "Mountain Mapper precipitation accumulation 72-hour" "mm" 209 10 0 255 161 1 6 30 "MultiSensor_QPE_01H_Pass1" "Multi-sensor accumulation 1-hour Pass1" "mm" 209 10 0 255 161 1 6 31 "MultiSensor_QPE_03H_Pass1" "Multi-sensor accumulation 3-hour Pass1" "mm" 209 10 0 255 161 1 6 32 "MultiSensor_QPE_06H_Pass1" "Multi-sensor accumulation 6-hour Pass1" "mm" @@ -107,6 +133,7 @@ GRIB2 209 10 0 255 161 1 8 22 "GaugeInflIndex_48H_Pass2" "Gauge Influence Index for 48-hour QPE Pass2" "non-dim" 209 10 0 255 161 1 8 23 "GaugeInflIndex_72H_Pass2" "Gauge Influence Index for 72-hour QPE Pass2" "non-dim" 209 10 0 255 161 1 9 0 "MergedReflectivityQC" "3D Reflectivty Mosaic - 33 CAPPIS (500-19000m)" "dBZ" +209 10 0 255 161 1 9 1 "ConusPlusMergedReflectivityQC" "All Radar 3D Reflectivty Mosaic - 33 CAPPIS (500-19000m)" "dBZ" 209 10 0 255 161 1 9 3 "MergedRhoHV" "3D RhoHV Mosaic - 33 CAPPIS (500-19000m)" "non-dim" 209 10 0 255 161 1 9 4 "MergedZdr" "3D Zdr Mosaic - 33 CAPPIS (500-19000m)" "dB" 209 10 0 255 161 1 10 0 "MergedReflectivityQCComposite" "Composite Reflectivity Mosaic (optimal method)" "dBZ" @@ -123,6 +150,7 @@ GRIB2 209 10 0 255 161 1 11 1 "MergedReflectivityComposite" "Raw Composite Reflectivity Mosaic (max ref)" "dBZ" 209 10 0 255 161 1 11 2 "MergedReflectivityQComposite" "Composite Reflectivity Mosaic (max ref)" "dBZ" 209 10 0 255 161 1 11 3 "MergedBaseReflectivity" "Raw Base Reflectivity Mosaic (optimal method)" "dBZ" +209 10 0 255 161 1 11 4 "Merged_LVL3_BaseHCA" "flag" "Level III Base HCA Mosaic (nearest neighbor)" 209 10 0 255 161 1 12 0 "FLASH_CREST_MAXUNITSTREAMFLOW" "FLASH QPE-CREST Unit Streamflow" "m^3/s/km^2" 209 10 0 255 161 1 12 1 "FLASH_CREST_MAXSTREAMFLOW" "FLASH QPE-CREST Streamflow" "m^3/s" 209 10 0 255 161 1 12 2 "FLASH_CREST_MAXSOILSAT" "FLASH QPE-CREST Soil Saturation" "%" diff --git a/docs/Users_Guide/appendixC.rst b/docs/Users_Guide/appendixC.rst index 2a1e358e68..57e91bf090 100644 --- a/docs/Users_Guide/appendixC.rst +++ b/docs/Users_Guide/appendixC.rst @@ -248,7 +248,7 @@ Heidke Skill Score (HSS) Called "HSS" in CTS output :numref:`table_PS_format_info_CTS` and "HSS" in MCTS output :numref:`table_PS_format_info_MCTS` -HSS is a skill score based on Accuracy, where the Accuracy is corrected by the number of correct forecasts that would be expected by chance. In particular, +HSS is a skill score based on Accuracy, where the Accuracy is compared to the number of correct forecasts that would be expected by chance. In particular, .. math:: \text{HSS } = \frac{n_{11} + n_{00} - C_2}{T - C_2}, @@ -256,17 +256,8 @@ where .. math:: C_2 = \frac{(n_{11} + n_{10}) (n_{11} + n_{01}) + (n_{01} + n_{00}) (n_{10} + n_{00})}{T}. -A more general format that uses percentages is provided by Ou (:ref:`Ou, 2016 `), - -.. only:: latex - - .. math:: \text{HSS(\%) } = 100 \ast \frac{(H - E)}{(T - E)} - -.. only:: html - - .. math:: \text{HSS(%) } = 100 \ast \frac{(H - E)}{(T - E)} - -where H is the number of forecasts in the correct category and E is the expected number of forecasts by chance. +Note that the C_2 value is calculated based on the data fields supplied by the user. Therefore, for C2 to appropriately represent a random forecast, +a sufficiently large sized dataset of forecasts and observations would be needed. HSS can range from minus infinity to 1. A perfect forecast would have HSS = 1. @@ -275,11 +266,13 @@ Heidke Skill Score - Expected Correct (HSS_EC) Called "HSS_EC" in CTS output :numref:`table_PS_format_info_CTS` and MCTS output :numref:`table_PS_format_info_MCTS` -HSS_EC is a skill score based on Accuracy, where the Accuracy is corrected by the number of correct forecasts that would be expected by chance. In particular, +HSS_EC calculates the HSS as described above, but with a C2 value based on a set expected chance (EC) value. +Instead of C2 being calculated by the user’s dataset, -.. math:: \text{HSS } = \frac{n_{11} + n_{00} - C_2}{T - C_2}, +.. math:: \text{HSS } = \text{T*EC }, -The C_2 value is user-configurable with a default value of T divided by the number of contingency table categories. +where EC is allowed to be prescribed by the user ranging from 0 to 1. By default the EC is set to 1 divided by the number of contingency table categories, +e.g. EC is set to 0.33333 for a 3 category (tercile) forecast and 0.5 for a two category (binary) forecast. HSS_EC can range from minus infinity to 1. A perfect forecast would have HSS_EC = 1. diff --git a/docs/Users_Guide/index.rst b/docs/Users_Guide/index.rst index c5948ca235..ee3a5ff6dc 100644 --- a/docs/Users_Guide/index.rst +++ b/docs/Users_Guide/index.rst @@ -67,6 +67,7 @@ The National Center for Atmospheric Research (NCAR) is sponsored by NSF. The DTC met-tc_overview tc-dland tc-pairs + tc-diag tc-stat tc-gen tc-rmw diff --git a/docs/Users_Guide/mode.rst b/docs/Users_Guide/mode.rst index f5e4caf33f..2e3b93a08f 100644 --- a/docs/Users_Guide/mode.rst +++ b/docs/Users_Guide/mode.rst @@ -410,7 +410,7 @@ _____________________ inten_perc_ratio = ratio_if; } -The set of interest function entries listed above define which values are of interest for each pairwise attribute measured. The interest functions may be defined as a piecewise linear function or as an algebraic expression. A piecewise linear function is defined by specifying the corner points of its graph. An algebraic function may be defined in terms of several built-in mathematical functions. See :numref:`MODE_A-Scientific-and-statistical` for how interest values are used by the fuzzy logic engine. By default, many of these functions are defined in terms of the previously defined **grid_res** entry. +The interest function entries listed above define which values are of interest for each pairwise attribute measured. Each interest function is defined as a piecewise linear function by specifying the corner points of its graph. The range of each function must be within **0** and **1**. Including (x, y) points with y-values outside this range results in a runtime error. See :numref:`MODE_A-Scientific-and-statistical` for how interest values are used by the fuzzy logic engine. By default, many of these functions are defined in terms of the previously defined **grid_res** entry. _____________________ diff --git a/docs/Users_Guide/tc-diag.rst b/docs/Users_Guide/tc-diag.rst new file mode 100644 index 0000000000..f9cef3d479 --- /dev/null +++ b/docs/Users_Guide/tc-diag.rst @@ -0,0 +1,192 @@ +.. _tc-diag: + +************ +TC-DIAG Tool +************ + +Introduction +============ + +The TC-Diag tool compute Tropical Cyclone diagnostics. More details to be added. + +Practical information +===================== + +tc_diag usage +------------- + +The following sections describe the usage statement, required arguments, and optional arguments for tc_diag. + +.. code-block:: none + + Usage: tc_diag + -data file_1 ... file_n | data_file_list + -deck file + -config file + -out file + [-log file] + [-v level] + +tc_diag has required arguments and can accept several optional arguments. + +Required arguments for tc_diag +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. The **-data file_1 ... file_n | data_file_list** options specify the gridded data files or an ASCII file containing a list of files to be used. + +2. The **-deck source** argument is the ATCF format data source. + +3. The **-config file** argument is the configuration file to be used. The contents of the configuration file are discussed below. + +4. The **-out** argument is the NetCDF output file to be written. + +Optional arguments for tc_diag +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +5. The **-log file** option directs output and errors to the specified log file. All messages will be written to that file as well as standard out and error. Thus, users can save the messages without having to redirect the output on the command line. The default behavior is no logfile. + +6. The **-v level** option indicates the desired level of verbosity. The contents of "level" will override the default setting of 2. Setting the verbosity to 0 will make the tool run with no log messages, while increasing the verbosity above 1 will increase the amount of logging. + +tc_diag configuration file +-------------------------- + +The default configuration file for the TC-Diag tool named **TCDiagConfig_default** can be found in the installed *share/met/config/* directory. It is encouraged for users to copy these default files before modifying their contents. The contents of the configuration file are described in the subsections below. + +The TC-Diag tool should be configured to filter the input track data (**-deck**) down to the subset of tracks that correspond to the gridded data files provided (**-data**). The filtered tracks should contain data for only one initialization time but may contain tracks for multiple models. + +_______________________ + +.. code-block:: none + + model = [ "GFSO", "OFCL" ]; + storm_id = ""; + basin = ""; + cyclone = ""; + init_inc = ""; + valid_beg = ""; + valid_end = ""; + valid_inc = []; + valid_exc = []; + valid_hour = []; + lead = []; + + censor_thresh = []; + censor_val = []; + convert(x) = x; + + data = { + field = [ + { + name = "PRMSL"; + level = ["L0"]; + }, + { + name = "TMP"; + level = ["P1000", "P500"]; + }, + { + name = "UGRD"; + level = ["P1000", "P500"]; + }, + { + name = "VGRD"; + level = ["P1000", "P500"]; + } + ]; + } + regrid = { ... } + +The configuration options listed above are common to many MET tools and are described in :numref:`config_options`. The name and level entries in the data dictionary define the data to be processed. The regrid dictionary defines if and how regridding will be performed. + +_______________________ + +.. code-block:: none + + n_range = 100; + +The **n_range** parameter is the number of equally spaced range intervals in the range-azimuth grid. + +_______________________ + +.. code-block:: none + + n_azimuth = 180; + +The **n_azimuth** parameter is the number of equally spaced azimuth intervals in the range-azimuth grid. The azimuthal grid spacing is 360 / **n_azimuth** degrees. + +_______________________ + +.. code-block:: none + + max_range_km = 100.0; + +The **max_range_km** parameter specifies the maximum range of the range-azimuth grid, in kilometers. If this parameter is specified and not **rmw_scale**, the radial grid spacing will be **max_range_km / n_range**. + +_______________________ + +.. code-block:: none + + delta_range_km = 10.0; + +The **delta_range_km** parameter specifies the spacing of the range rings, in kilometers. + +_______________________ + +.. code-block:: none + + rmw_scale = 0.2; + +The **rmw_scale** parameter overrides the **max_range_km** parameter. When this is set the radial grid spacing will be **rmw_scale** in units of the RMW, which varies along the storm track. + +_______________________ + +.. code-block:: none + + compute_tangential_and_radial_winds = TRUE; + +The **compute_tangential_and_radial_winds** parameter is a flag controlling whether a conversion from U/V to Tangential/Radial winds is done or not. If set to TRUE, additional parameters are used, otherwise they are not. + +_______________________ + +.. code-block:: none + + u_wind_field_name = "UGRD"; + v_wind_field_name = "VGRD"; + +The **u_wind_field_name** and **v_wind_field_name** parameters identify which input data to use in converting to tangential/radial winds. The parameters are used only if **compute_tangential_and_radial_winds** is set to TRUE. + +_______________________ + +.. code-block:: none + + tangential_velocity_field_name = "VT"; + tangential_velocity_long_field_name = "Tangential Velocity"; + + +The **tangential_velocity_field_name** and **tangential_velocity_long_field_name** parameters define the field names to give the output tangential velocity grid in the netCDF output file. The parameters are used only if **compute_tangential_and_radial_winds** is set to TRUE. + +_______________________ + +.. code-block:: none + + radial_velocity_field_name = "VT"; + radial_velocity_long_field_name = "Radial Velocity"; + + +The **radial_velocity_field_name** and **radial_velocity_long_field_name** parameters define the field names to give the output radial velocity grid in the netCDF output file. The parameters are used only if **compute_radial_and_radial_winds** is set to TRUE. + + +tc_diag output file +------------------- + +The NetCDF output file contains the following dimensions: + +1. *range* - the radial dimension of the range-azimuth grid + +2. *azimuth* - the azimuthal dimension of the range-azimuth grid + +3. *pressure* - if any pressure levels are specified in the data variable list, they will be sorted and combined into a 3D NetCDF variable, which pressure as the vertical dimension and range and azimuth as the horizontal dimensions + +4. *track_point* - the track points corresponding to the model output valid times + +For each data variable specified in the data variable list, a corresponding NetCDF variable will be created with the same name and units. diff --git a/docs/Users_Guide/tc-gen.rst b/docs/Users_Guide/tc-gen.rst index 5cc22a7351..1f690a1477 100644 --- a/docs/Users_Guide/tc-gen.rst +++ b/docs/Users_Guide/tc-gen.rst @@ -22,7 +22,7 @@ As with other extreme events (where the event occurs much less frequently than t For probabilistic forecasts specified using the **-edeck** command line option, it identifies genesis events in the reference dataset. It applies user-specified configuration options to pair the forecast probabilities to the reference genesis events. These pairs are added to an Nx2 probabilistic contingency table. If the reference genesis event occurs within in the predicted time window, the pair is counted in the observation-yes column. Otherwise, it is added to the observation-no column. -For warning area shapefiles specified using the **-shape** command line option, it processes metadata from the corresponding database files. The database file is assumed to exist at exactly the same path as the shapefile, but with a ".dbf" suffix instead of ".shp". Note that only shapefiles exactly following the NOAA National Hurricane Center's (NHC) "gtwo_areas_YYYYMMDDHHMM.shp" file naming and corresonding metadata conventions are supported. For each shapefile record, the database file defines up to three corresponding probability values. The first percentage is interpreted as the probability of genesis inside the shape within 48 hours. The second and, if provided, third percentages are interpreted as the 120-hour and 168-hour probabilities, respectively. Care is taken to identify and either ignore or update duplicate shapes found in the input. +For warning area shapefiles specified using the **-shape** command line option, it processes metadata from the corresponding database files. The database file is assumed to exist at exactly the same path as the shapefile, but with a ".dbf" suffix instead of ".shp". Note that only shapefiles exactly following the NOAA National Hurricane Center's (NHC) "gtwo_areas_YYYYMMDDHHMM.shp" file naming and corresonding metadata conventions are supported. For each shapefile record, the database file defines corresponding probability values for one or more time periods. Percentages may be provided for the probability of genesis inside the shape within 2, 5, or 7 days from issuance time that is parsed from the file name. Note that 5 day probabilities were discontinued in 2023. The 2 and 7 day probabilities are provided in database file fields named "PROB2DAY" and "PROB7DAY", respectively. Care is taken to identify and either ignore or update duplicate shapes found in the input. The shapes are then subset based on the filtering criteria in the configuration file. For each probability and shape, the reference genesis events are searched for a match within the defined time window. These pairs are added to an Nx2 probabilistic contingency table. The probabilistic contingeny tables and statistics are computed and reported separately for filter defined and lead hour encountered in the input. @@ -63,7 +63,7 @@ Required arguments for tc_gen 2. The **-edeck source** argument is the path to one or more ATCF edeck files, an ASCII file list containing them, or a top-level directory with files matching the regular expression ".dat". The probability of genesis are read from each edeck input file and verified against at the **-track** data. -3. The **-shape source** argument is the path to one or more NHC genesis warning area shapefiles, an ASCII file list containing them, or a top-level directory with files matching the regular expression "gtwo_areas.*.shp". The genesis warning areas and corresponding 2, 5, and 7 day probability values area verified against the **-track** data. +3. The **-shape source** argument is the path to one or more NHC genesis warning area shapefiles, an ASCII file list containing them, or a top-level directory with files matching the regular expression "gtwo_areas.*.shp". The genesis warning areas and corresponding forecast probability values area verified against the **-track** data. Note: At least one of the **-genesis**, **-edeck**, or **-shape** command line options are required. diff --git a/docs/Users_Guide/tc-pairs.rst b/docs/Users_Guide/tc-pairs.rst index 556f7358c2..0533d5f649 100644 --- a/docs/Users_Guide/tc-pairs.rst +++ b/docs/Users_Guide/tc-pairs.rst @@ -532,6 +532,7 @@ TC-Pairs produces output in TCST format. The default output file name can be ove * - 35, 36 - A/BAL_WIND_34 - a/bdeck 34-knot radius winds in full circle + or the mean of the non-zero 34-knot wind quadrants * - 37, 38 - A/BNE_WIND_34 - a/bdeck 34-knot radius winds in NE quadrant @@ -547,6 +548,7 @@ TC-Pairs produces output in TCST format. The default output file name can be ove * - 45, 46 - A/BAL_WIND_50 - a/bdeck 50-knot radius winds in full circle + or the mean of the non-zero 50-knot wind quadrants * - 47, 48 - A/BNE_WIND_50 - a/bdeck 50-knot radius winds in NE quadrant @@ -562,6 +564,7 @@ TC-Pairs produces output in TCST format. The default output file name can be ove * - 55, 56 - A/BAL_WIND_64 - a/bdeck 64-knot radius winds in full circle + or the mean of the non-zero 64-knot wind quadrants * - 57, 58 - A/BNE_WIND_64 - a/bdeck 64-knot radius winds in NE quadrant diff --git a/internal/scripts/installation/compile_MET_all.sh b/internal/scripts/installation/compile_MET_all.sh old mode 100755 new mode 100644 index 2eb0ff62e6..47333ca25e --- a/internal/scripts/installation/compile_MET_all.sh +++ b/internal/scripts/installation/compile_MET_all.sh @@ -6,11 +6,19 @@ # # This compile_MET_all.sh script expects certain environment # variables to be set: -# TEST_BASE, COMPILER, MET_SUBDIR, MET_TARBALL, -# and USE_MODULES. +# TEST_BASE, COMPILER (or COMPILER_FAMILY and COMPILER_VERSION), +# MET_SUBDIR, MET_TARBALL, and USE_MODULES. # # If compiling support for Python embedding, users will need to # set MET_PYTHON, MET_PYTHON_BIN_EXE, MET_PYTHON_CC, and MET_PYTHON_LD. +# Users can directly set the python module to be loaded by setting +# either PYTHON_MODULE or by setting PYTHON_NAME and PYTHON_VERSION: +# - PYTHON_MODULE (only used if USE_MODULES=TRUE) - format is the name +# of the Python module to load followed by an underscore and then the +# version number (e.g. python_3.8.6, The script will then run "module +# load python/3.8.6") +# - PYTHON_NAME = python (or e.g. python3, etc.) +# - PYTHON_VERSION = 3.8.6 # # For a description of these and other variables, visit the MET # downloads page under "Sample Script For Compiling External @@ -83,12 +91,16 @@ fi echo echo "TEST_BASE = ${TEST_BASE? "ERROR: TEST_BASE must be set"}" -echo "COMPILER = ${COMPILER? "ERROR: COMPILER must be set"}" echo "MET_SUBDIR = ${MET_SUBDIR? "ERROR: MET_SUBDIR must be set"}" echo "MET_TARBALL = ${MET_TARBALL? "ERROR: MET_TARBALL must be set"}" echo "USE_MODULES = ${USE_MODULES? "ERROR: USE_MODULES must be set to TRUE if using modules or FALSE otherwise"}" +if [[ -z "$COMPILER" ]] && [[ -z "$COMPILER_FAMILY" && -z "$COMPILER_VERSION" ]]; then + echo "ERROR: COMPILER or COMPILER_FAMILY and COMPILER_VERSION must be set" + exit 1 +fi echo ${MAKE_ARGS:+MAKE_ARGS = $MAKE_ARGS} + LIB_DIR=${TEST_BASE}/external_libs MET_DIR=${MET_SUBDIR} @@ -252,8 +264,17 @@ if [ ! -e ${LIB_DIR}/lib ]; then fi # Load compiler version -COMPILER_FAMILY=` echo $COMPILER | cut -d'_' -f1` -COMPILER_VERSION=`echo $COMPILER | cut -d'_' -f2` +if [ -z ${COMPILER_FAMILY} ]; then + COMPILER_FAMILY=` echo $COMPILER | cut -d'_' -f1` +fi + +if [ -z ${COMPILER_VERSION} ]; then + COMPILER_VERSION=`echo $COMPILER | cut -d'_' -f2` +fi + +echo "COMPILER = $COMPILER" +echo "COMPILER_FAMILY = $COMPILER_FAMILY" +echo "COMPILER_VERSION = $COMPILER_VERSION" COMPILER_MAJOR_VERSION=`echo $COMPILER_VERSION | cut -d'.' -f1` echo @@ -271,6 +292,12 @@ if [ ${USE_MODULES} = "TRUE" ]; then fi fi +# After loading the compiler module, strip any extra +# characters off of "gnu" (e.g. "gnu9") +if [[ ${COMPILER_FAMILY} == *gnu* ]]; then + export COMPILER_FAMILY="gnu" +fi + if [ ${COMPILER_FAMILY} = "gnu" ]; then if [ -z ${CC} ]; then CC=`which gcc`; fi if [ -z ${CXX} ]; then CXX=`which g++`; fi @@ -314,11 +341,16 @@ echo if [ ${USE_MODULES} = "TRUE" ]; then if [ ! -z ${PYTHON_MODULE} ]; then - PYTHON_NAME=` echo $PYTHON_MODULE | cut -d'_' -f1` + PYTHON_NAME=`echo $PYTHON_MODULE | cut -d'_' -f1` PYTHON_VERSION_NUM=`echo $PYTHON_MODULE | cut -d'_' -f2` echo "module load ${PYTHON_NAME}/${PYTHON_VERSION_NUM}" echo ${PYTHON_NAME}/${PYTHON_VERSION_NUM} module load ${PYTHON_NAME}/${PYTHON_VERSION_NUM} + # Allow the user to specify the name and version of the module to load + elif [[ ! -z ${PYTHON_NAME} && ! -z ${PYTHON_VERSION_NUM} ]]; then + echo "module load ${PYTHON_NAME}/${PYTHON_VERSION_NUM}" + echo ${PYTHON_NAME}/${PYTHON_VERSION_NUM} + module load ${PYTHON_NAME}/${PYTHON_VERSION_NUM} fi fi @@ -343,9 +375,9 @@ if [ $COMPILE_GSL -eq 1 ]; then tar -xf ${TAR_DIR}/gsl-${vrs}.tar.gz -C ${LIB_DIR}/gsl cd ${LIB_DIR}/gsl/gsl* echo "cd `pwd`" - run_cmd "./configure --prefix=${LIB_DIR} > configure.log 2>&1" - run_cmd "make ${MAKE_ARGS} > make.log 2>&1" - run_cmd "make ${MAKE_ARGS} install > make_install.log 2>&1" + run_cmd "./configure --prefix=${LIB_DIR} > gsl.configure.log 2>&1" + run_cmd "make ${MAKE_ARGS} > gsl.make.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > gsl.make_install.log 2>&1" fi # Compile BUFRLIB @@ -366,17 +398,17 @@ if [ $COMPILE_BUFRLIB -eq 1 ]; then # For GNU and Intel follow BUFRLIB11 instructions if [[ ${COMPILER_FAMILY} == "gnu" ]]; then if [[ ${COMPILER_MAJOR_VERSION} -ge 10 ]]; then - ${FC} -c -fno-second-underscore -fallow-argument-mismatch `./getdefflags_F.sh` modv*.F moda*.F `ls -1 *.F *.f | grep -v "mod[av]_"` >> make.log 2>&1 + ${FC} -c -fno-second-underscore -fallow-argument-mismatch `./getdefflags_F.sh` modv*.F moda*.F `ls -1 *.F *.f | grep -v "mod[av]_"` >> bufr.make.log 2>&1 elif [[ ${COMPILER_MAJOR_VERSION} -lt 10 ]]; then - ${FC} -c -fno-second-underscore -Wno-argument-mismatch `./getdefflags_F.sh` modv*.F moda*.F `ls -1 *.F *.f | grep -v "mod[av]_"` >> make.log 2>&1 + ${FC} -c -fno-second-underscore -Wno-argument-mismatch `./getdefflags_F.sh` modv*.F moda*.F `ls -1 *.F *.f | grep -v "mod[av]_"` >> bufr.make.log 2>&1 fi elif [[ ${COMPILER_FAMILY} == "intel" ]] || [[ ${COMPILER_FAMILY} == "ics" ]] || [[ ${COMPILER_FAMILY} == "ips" ]] || [[ ${COMPILER_FAMILY} == "PrgEnv-intel" ]]; then - ${FC} -c `./getdefflags_F.sh` modv*.F moda*.F `ls -1 *.F *.f | grep -v "mod[av]_"` >> make.log 2>&1 + ${FC} -c `./getdefflags_F.sh` modv*.F moda*.F `ls -1 *.F *.f | grep -v "mod[av]_"` >> bufr.make.log 2>&1 elif [[ ${COMPILER_FAMILY} == "pgi" ]]; then - ${FC} -c -Mnosecond_underscore `./getdefflags_F.sh` modv*.F moda*.F `ls -1 *.F *.f | grep -v "mod[av]_"` >> make.log 2>&1 + ${FC} -c -Mnosecond_underscore `./getdefflags_F.sh` modv*.F moda*.F `ls -1 *.F *.f | grep -v "mod[av]_"` >> bufr.make.log 2>&1 fi - ar crv libbufr.a *.o >> make.log 2>&1 + ar crv libbufr.a *.o >> bufr.make.log 2>&1 cp *.a ${LIB_DIR}/lib/. fi @@ -390,9 +422,9 @@ if [ $COMPILE_ZLIB -eq 1 ]; then tar -xzf ${TAR_DIR}/zlib*.tar.gz -C ${LIB_DIR}/zlib cd ${LIB_DIR}/zlib/zlib* echo "cd `pwd`" - run_cmd "./configure --prefix=${LIB_DIR} > configure.log 2>&1" - run_cmd "make ${MAKE_ARGS} > make.log 2>&1" - run_cmd "make ${MAKE_ARGS} install > make_install.log 2>&1" + run_cmd "./configure --prefix=${LIB_DIR} > zlib.configure.log 2>&1" + run_cmd "make ${MAKE_ARGS} > zlib.make.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > zlib.make_install.log 2>&1" # GPM: why is this removed? Could we add a comment to # describe why this is needed? @@ -409,9 +441,9 @@ if [[ $COMPILE_LIBPNG -eq 1 && $HOST != ys* ]]; then tar -xzf ${TAR_DIR}/libpng*.tar.gz -C ${LIB_DIR}/libpng cd ${LIB_DIR}/libpng/libpng* echo "cd `pwd`" - run_cmd "./configure --prefix=${LIB_DIR} LDFLAGS=-L${LIB_DIR}/lib CPPFLAGS=-I${LIB_DIR}/include > configure.log 2>&1" - run_cmd "make ${MAKE_ARGS} > make.log 2>&1" - run_cmd "make ${MAKE_ARGS} install > make_install.log 2>&1" + run_cmd "./configure --prefix=${LIB_DIR} LDFLAGS=-L${LIB_DIR}/lib CPPFLAGS=-I${LIB_DIR}/include > libpng.configure.log 2>&1" + run_cmd "make ${MAKE_ARGS} > libpng.make.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > libpng.make_install.log 2>&1" fi # Compile JASPER @@ -424,9 +456,9 @@ if [ $COMPILE_JASPER -eq 1 ]; then cd ${LIB_DIR}/jasper/jasper* export CPPFLAGS="-I${LIB_DIR}/include" echo "cd `pwd`" - run_cmd "./configure --prefix=${LIB_DIR} > configure.log 2>&1" - run_cmd "make ${MAKE_ARGS} > make.log 2>&1" - run_cmd "make ${MAKE_ARGS} install > make_install.log 2>&1" + run_cmd "./configure --prefix=${LIB_DIR} > jasper.configure.log 2>&1" + run_cmd "make ${MAKE_ARGS} > jasper.make.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > jasper.make_install.log 2>&1" fi # Compile G2CLIB @@ -451,7 +483,7 @@ if [ $COMPILE_G2CLIB -eq 1 ]; then echo "cd `pwd`" # g2clib appears to compile but causes failure compiling MET if -j argument is used # so exclude it from this call - run_cmd "make > make.log 2>&1" + run_cmd "make > g2clib.make.log 2>&1" cp libg2c*.a ${LIB_DIR}/lib/libgrib2c.a cp *.h ${LIB_DIR}/include/. @@ -471,7 +503,7 @@ if [ $COMPILE_HDF -eq 1 ]; then tar -xf ${TAR_DIR}/HDF4.2*.tar.gz -C ${LIB_DIR}/hdf cd ${LIB_DIR}/hdf/HDF* echo "cd `pwd`" - run_cmd "./configure --prefix=${LIB_DIR} --disable-netcdf --with-jpeg=${LIB_DIR} --with-zlib=${LIB_DIR} > configure.log 2>&1" + run_cmd "./configure --prefix=${LIB_DIR} --disable-netcdf --with-jpeg=${LIB_DIR} --with-zlib=${LIB_DIR} > hdf4.configure.log 2>&1" cat mfhdf/hdiff/Makefile | \ sed 's/LIBS = -ljpeg -lz/LIBS = -ljpeg -lz -lm/g' \ > Makefile_new @@ -486,8 +518,8 @@ if [ $COMPILE_HDF -eq 1 ]; then > Makefile_new fi mv Makefile_new hdf/src/Makefile - run_cmd "make ${MAKE_ARGS} > make.log 2>&1" - run_cmd "make ${MAKE_ARGS} install > make_install.log 2>&1" + run_cmd "make ${MAKE_ARGS} > hdf4.make.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > hdf4.make_install.log 2>&1" fi # Compile HDFEOS @@ -500,9 +532,9 @@ if [ $COMPILE_HDFEOS -eq 1 ]; then tar -xzf ${TAR_DIR}/HDF-EOS*.tar.* -C ${LIB_DIR}/hdfeos cd ${LIB_DIR}/hdfeos/hdfeos echo "cd `pwd`" - run_cmd "./configure --prefix=${LIB_DIR} --with-hdf4=${LIB_DIR} --with-jpeg=${LIB_DIR} > configure.log 2>&1" - run_cmd "make ${MAKE_ARGS} > make.log 2>&1" - run_cmd "make ${MAKE_ARGS} install > make_install.log 2>&1" + run_cmd "./configure --prefix=${LIB_DIR} --with-hdf4=${LIB_DIR} --with-jpeg=${LIB_DIR} > hdf-eos.configure.log 2>&1" + run_cmd "make ${MAKE_ARGS} > hed-eos.make.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > hsf-eos.make_install.log 2>&1" cp include/*.h ${LIB_DIR}/include/ fi @@ -517,8 +549,8 @@ if [ $COMPILE_NETCDF -eq 1 ]; then tar -xzf ${TAR_DIR}/hdf5*.tar.gz -C ${LIB_DIR}/hdf5 cd ${LIB_DIR}/hdf5/hdf5* echo "cd `pwd`" - run_cmd "./configure --prefix=${LIB_DIR} --with-zlib=${LIB_Z} CFLAGS=-fPIC CXXFLAGS=-fPIC FFLAGS=-fPIC LDFLAGS=-L${LIB_DIR}/lib:${LIB_Z} CPPFLAGS=-I${LIB_DIR}/include > configure.log 2>&1" - run_cmd "make ${MAKE_ARGS} install > make_install.log 2>&1" + run_cmd "./configure --prefix=${LIB_DIR} --with-zlib=${LIB_Z} CFLAGS=-fPIC CXXFLAGS=-fPIC FFLAGS=-fPIC LDFLAGS=-L${LIB_DIR}/lib:${LIB_Z} CPPFLAGS=-I${LIB_DIR}/include > hdf5.configure.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > hdf5.make_install.log 2>&1" echo echo "Compiling NetCDF-C at `date`" @@ -529,16 +561,16 @@ if [ $COMPILE_NETCDF -eq 1 ]; then export FC='' export F90='' echo "cd `pwd`" - run_cmd "./configure --prefix=${LIB_DIR} CFLAGS=-fPIC CXXFLAGS=-fPIC LDFLAGS=-L${LIB_DIR}/lib CPPFLAGS=-I${LIB_DIR}/include > configure.log 2>&1" - run_cmd "make ${MAKE_ARGS} install > make_install.log 2>&1" + run_cmd "./configure --prefix=${LIB_DIR} CFLAGS=-fPIC CXXFLAGS=-fPIC LDFLAGS=-L${LIB_DIR}/lib CPPFLAGS=-I${LIB_DIR}/include > netcdf-c.configure.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > netcdf-c.make_install.log 2>&1" echo echo "Compiling NetCDF-CXX at `date`" tar -xzf ${TAR_DIR}/netcdf-cxx*.tar.gz -C ${LIB_DIR}/netcdf cd ${LIB_DIR}/netcdf/netcdf-cxx* echo "cd `pwd`" - run_cmd "./configure --prefix=${LIB_DIR} LDFLAGS=-L${LIB_DIR}/lib CPPFLAGS=-I${LIB_DIR}/include > configure.log 2>&1" - run_cmd "make ${MAKE_ARGS} install > make_install.log 2>&1" + run_cmd "./configure --prefix=${LIB_DIR} LDFLAGS=-L${LIB_DIR}/lib CPPFLAGS=-I${LIB_DIR}/include > netcdf-cxx.configure.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > netcdf-cxx.make_install.log 2>&1" fi # Compile FREETYPE @@ -550,9 +582,9 @@ if [ $COMPILE_FREETYPE -eq 1 ]; then tar -xzf ${TAR_DIR}/freetype*.tar.gz -C ${LIB_DIR}/freetype cd ${LIB_DIR}/freetype/freetype* echo "cd `pwd`" - run_cmd "./configure --prefix=${LIB_DIR} --with-png=yes > configure.log 2>&1" - run_cmd "make ${MAKE_ARGS} > make.log 2>&1" - run_cmd "make ${MAKE_ARGS} install > make_install.log 2>&1" + run_cmd "./configure --prefix=${LIB_DIR} --with-png=yes > freetype.configure.log 2>&1" + run_cmd "make ${MAKE_ARGS} > freetype.make.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > freetype.make_install.log 2>&1" fi @@ -568,9 +600,9 @@ if [ $COMPILE_CAIRO -eq 1 ]; then tar -xzf ${TAR_DIR}/pixman*.tar.gz -C ${LIB_DIR}/pixman cd ${LIB_DIR}/pixman/pixman* echo "cd `pwd`" - run_cmd "./configure --prefix=${LIB_DIR} > configure.log 2>&1" - run_cmd "make ${MAKE_ARGS} > make.log 2>&1" - run_cmd "make ${MAKE_ARGS} install > make_install.log 2>&1" + run_cmd "./configure --prefix=${LIB_DIR} > pixman.configure.log 2>&1" + run_cmd "make ${MAKE_ARGS} > pixman.make.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > pixman.make_install.log 2>&1" fi echo @@ -584,9 +616,9 @@ if [ $COMPILE_CAIRO -eq 1 ]; then export PKG_CONFIG_PATH=${LIB_DIR}/lib/pkgconfig/ fi echo "cd `pwd`" - run_cmd "./configure --prefix=${LIB_DIR} ax_cv_c_float_words_bigendian=no LDFLAGS=-L${LIB_DIR}/lib CPPFLAGS=-I${LIB_DIR}/include > configure.log 2>&1" - run_cmd "make ${MAKE_ARGS} > make.log 2>&1" - run_cmd "make ${MAKE_ARGS} install > make_install.log 2>&1" + run_cmd "./configure --prefix=${LIB_DIR} ax_cv_c_float_words_bigendian=no LDFLAGS=-L${LIB_DIR}/lib CPPFLAGS=-I${LIB_DIR}/include > cairo.configure.log 2>&1" + run_cmd "make ${MAKE_ARGS} > cairo.make.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > cairo.make_install.log 2>&1" fi # Compile MET @@ -636,7 +668,7 @@ export LDFLAGS="-Wl,--disable-new-dtags" # https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html # ${parameter:+word} # If parameter is null or unset, nothing is substituted, otherwise the expansion of word is substituted. -export LDFLAGS="${LDFLAGS} -Wl,-rpath,${LIB_DIR}/lib${ADDTL_DIR:+:$ADDTL_DIR}${LIB_DIR}/lib${MET_NETCDF:+:$MET_NETCDF/lib}${MET_HDF5:+:$MET_HDF5/lib}${MET_BUFRLIB:+:$MET_BUFRLIB}${MET_GRIB2CLIB:+:$MET_GRIB2CLIB}${MET_PYTHON_LIB:+:$MET_PYTHON_LIB}${MET_GSL:+:$MET_GSL/lib}" +export LDFLAGS="${LDFLAGS} -Wl,-rpath,${LIB_DIR}/lib${MET_NETCDF:+:$MET_NETCDF/lib}${MET_HDF5:+:$MET_HDF5/lib}${MET_BUFRLIB:+:$MET_BUFRLIB}${MET_GRIB2CLIB:+:$MET_GRIB2CLIB}${MET_PYTHON_LIB:+:$MET_PYTHON_LIB}${MET_GSL:+:$MET_GSL/lib}${ADDTL_DIR:+:$ADDTL_DIR}" export LDFLAGS="${LDFLAGS} -Wl,-rpath,${LIB_JASPER:+$LIB_JASPER}${LIB_LIBPNG:+:$LIB_PNG}${LIB_Z:+$LIB_Z}" export LDFLAGS="${LDFLAGS} ${LIB_JASPER:+-L$LIB_JASPER} ${LIB_LIBPNG:+-L$LIB_LIBPNG} ${MET_HDF5:+-L$MET_HDF5/lib} ${ADDTL_DIR:+-L$ADDTL_DIR}" export LIBS="${LIBS} -lhdf5_hl -lhdf5 -lz" @@ -674,9 +706,9 @@ fi configure_cmd="${configure_cmd} ${OPT_ARGS}" echo "cd `pwd`" -run_cmd "${configure_cmd} > configure.log 2>&1" -run_cmd "make ${MAKE_ARGS} > make.log 2>&1" -run_cmd "make ${MAKE_ARGS} install > make_install.log 2>&1" -run_cmd "make ${MAKE_ARGS} test > make_test.log 2>&1" +run_cmd "${configure_cmd} > met.configure.log 2>&1" +run_cmd "make ${MAKE_ARGS} > met.make.log 2>&1" +run_cmd "make ${MAKE_ARGS} install > met.make_install.log 2>&1" +run_cmd "make ${MAKE_ARGS} test > met.make_test.log 2>&1" echo "Finished compiling at `date`" diff --git a/internal/test_unit/bin/unit_test.sh b/internal/test_unit/bin/unit_test.sh index eff6bc65da..caf28047ab 100755 --- a/internal/test_unit/bin/unit_test.sh +++ b/internal/test_unit/bin/unit_test.sh @@ -67,6 +67,7 @@ UNIT_XML="unit_ascii2nc.xml \ unit_plot_tc.xml \ unit_tc_rmw.xml \ unit_rmw_analysis.xml \ + unit_tc_diag.xml \ unit_tc_gen.xml \ unit_met_test_scripts.xml \ unit_modis.xml \ diff --git a/internal/test_unit/config/Ascii2NcConfig_aeronet b/internal/test_unit/config/Ascii2NcConfig_aeronet index 8a1b00f9b9..5bcaa96adc 100644 --- a/internal/test_unit/config/Ascii2NcConfig_aeronet +++ b/internal/test_unit/config/Ascii2NcConfig_aeronet @@ -34,12 +34,15 @@ message_type_map = [ { key = "FM-12 SYNOP"; val = "ADPSFC"; }, { key = "FM-13 SHIP"; val = "SFCSHP"; }, { key = "FM-15 METAR"; val = "ADPSFC"; }, + { key = "FM-16 SPECI"; val = "ADPSFC"; }, { key = "FM-18 BUOY"; val = "SFCSHP"; }, + { key = "FM-18X BUOY"; val = "SFCSHP"; }, { key = "FM-281 QSCAT"; val = "ASCATW"; }, { key = "FM-32 PILOT"; val = "ADPUPA"; }, { key = "FM-35 TEMP"; val = "ADPUPA"; }, { key = "FM-88 SATOB"; val = "SATWND"; }, - { key = "FM-97 ACARS"; val = "AIRCFT"; } + { key = "FM-97 ACARS"; val = "AIRCFT"; }, + { key = "FM-97 AMDAR"; val = "AIRCFT"; } ]; // diff --git a/internal/test_unit/config/Ascii2NcConfig_rain_01H_sum b/internal/test_unit/config/Ascii2NcConfig_rain_01H_sum index 160d93fd5f..0f389c0ad6 100644 --- a/internal/test_unit/config/Ascii2NcConfig_rain_01H_sum +++ b/internal/test_unit/config/Ascii2NcConfig_rain_01H_sum @@ -37,12 +37,15 @@ message_type_map = [ { key = "FM-12 SYNOP"; val = "ADPSFC"; }, { key = "FM-13 SHIP"; val = "SFCSHP"; }, { key = "FM-15 METAR"; val = "ADPSFC"; }, + { key = "FM-16 SPECI"; val = "ADPSFC"; }, { key = "FM-18 BUOY"; val = "SFCSHP"; }, + { key = "FM-18X BUOY"; val = "SFCSHP"; }, { key = "FM-281 QSCAT"; val = "ASCATW"; }, { key = "FM-32 PILOT"; val = "ADPUPA"; }, { key = "FM-35 TEMP"; val = "ADPUPA"; }, { key = "FM-88 SATOB"; val = "SATWND"; }, - { key = "FM-97 ACARS"; val = "AIRCFT"; } + { key = "FM-97 ACARS"; val = "AIRCFT"; }, + { key = "FM-97 AMDAR"; val = "AIRCFT"; } ]; // diff --git a/internal/test_unit/config/TCDiagConfig_ian b/internal/test_unit/config/TCDiagConfig_ian new file mode 100644 index 0000000000..8c9d199f62 --- /dev/null +++ b/internal/test_unit/config/TCDiagConfig_ian @@ -0,0 +1,144 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// TC-Diag configuration file. +// +// For additional information, please see the MET User's Guide. +// +//////////////////////////////////////////////////////////////////////////////// + +// +// Filter input track data lines. +// + +// +// Model +// +model = [ "GFSO" ]; + +// +// Storm identifier +// +storm_id = "AL092022"; + +// +// Basin +// +basin = ""; + +// +// Cyclone number +// +cyclone = ""; + +// +// Model initialization time +// +init_inc = "20220924_00"; + +// +// Subset by the valid time +// +valid_beg = ""; +valid_end = ""; +valid_inc = []; +valid_exc = []; + +// +// Subset by the valid hour and lead time. +// +valid_hour = []; +lead = [ "0", "6", "12", "18", "24" ]; + +//////////////////////////////////////////////////////////////////////////////// + +// +// Python diagnostic scripts to be run +// May be set separately in each "domain_info" entry +// +diag_script = [ "MET_BASE/python/tc_diag/compute_tc_diagnostics.py" ]; + +// +// Domain-specific cylindrical coordinate transformation +// +domain_info = [ + { + domain = "parent"; + n_range = 150; + n_azimuth = 8; + delta_range_km = 10.0; + } +]; + +//////////////////////////////////////////////////////////////////////////////// + +// +// Data censoring and conversion +// May be set separately in each "data.field" entry +// +// censor_thresh = []; +// censor_val = []; +// convert(x) = x; +// + +// +// Data fields +// +data = { + + // If empty, the field is processed for all domains + domain = []; + + // Pressure levels to be used, unless overridden below + level = [ "P1000", "P925", "P850", "P700", "P500", + "P400", "P300", "P250", "P200", "P150", + "P100" ]; + + field = [ + { name = "TMP"; }, + { name = "UGRD"; }, + { name = "VGRD"; }, + { name = "RH"; }, + { name = "HGT"; }, + { name = "PRMSL"; level = "Z0"; }, + { name = "PWAT"; level = "L0"; }, + { name = "TMP"; level = "Z0"; }, + { name = "TMP"; level = "Z2"; }, + { name = "RH"; level = "Z2"; }, + { name = "UGRD"; level = "Z10"; }, + { name = "VGRD"; level = "Z10"; } + ]; +} + +//////////////////////////////////////////////////////////////////////////////// + +// +// Regridding options +// +regrid = { + method = NEAREST; + width = 1; + vld_thresh = 0.5; + shape = SQUARE; +} + +// +// Vortex removal flag +// +vortex_removal = FALSE; + +//////////////////////////////////////////////////////////////////////////////// + +// +// Flags to control output files +// +nc_rng_azi_flag = TRUE; +nc_diag_flag = FALSE; +cira_diag_flag = FALSE; + +//////////////////////////////////////////////////////////////////////////////// + +tmp_dir = "/tmp"; +output_prefix = ""; +version = "V11.1.0"; + +//////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/TCPairsConfig_CONSENSUS b/internal/test_unit/config/TCPairsConfig_CONSENSUS index 0793bf3a45..4229974317 100644 --- a/internal/test_unit/config/TCPairsConfig_CONSENSUS +++ b/internal/test_unit/config/TCPairsConfig_CONSENSUS @@ -187,11 +187,6 @@ watch_warn = { time_offset = -14400; } -// -// Diagnostics to be extracted -// -diag_name = []; - // // Modify basin names to make them consistent across ATCF input files. // diff --git a/internal/test_unit/xml/unit_tc_diag.xml b/internal/test_unit/xml/unit_tc_diag.xml new file mode 100644 index 0000000000..c21287f201 --- /dev/null +++ b/internal/test_unit/xml/unit_tc_diag.xml @@ -0,0 +1,41 @@ + + + + + + + + +]> + + + + + + &TEST_DIR; + true + + + mkdir -p &OUTPUT_DIR;/tc_diag; \ + echo "&DATA_DIR_MODEL;/grib2/gfs/gfs.0p25.2022092400.f000.grib2 \ + &DATA_DIR_MODEL;/grib2/gfs/gfs.0p25.2022092400.f006.grib2 \ + &DATA_DIR_MODEL;/grib2/gfs/gfs.0p25.2022092400.f012.grib2 \ + &DATA_DIR_MODEL;/grib2/gfs/gfs.0p25.2022092400.f018.grib2 \ + &DATA_DIR_MODEL;/grib2/gfs/gfs.0p25.2022092400.f024.grib2" \ + > &OUTPUT_DIR;/tc_diag/gfs_2022092400_file_list; \ + &MET_BIN;/tc_diag + \ + -deck &DATA_DIR;/adeck/aal092022_OFCL_SHIP_AVNO.dat \ + -data parent GFSO &OUTPUT_DIR;/tc_diag/gfs_2022092400_file_list \ + -config &CONFIG_DIR;/TCDiagConfig_ian \ + -outdir &OUTPUT_DIR;/tc_diag \ + -v 2 + + + &OUTPUT_DIR;/tc_diag/tc_diag_AL092022_GFSO_2022092400_cyl_grid_parent.nc + + + + + diff --git a/scripts/python/Makefile.am b/scripts/python/Makefile.am index c3b7b20042..a6ed5af4c3 100644 --- a/scripts/python/Makefile.am +++ b/scripts/python/Makefile.am @@ -22,7 +22,8 @@ SUBDIRS = \ examples \ met \ pyembed \ - utility + utility \ + tc_diag ## Example of how to Install outside of $(pkgdatadir) ## scriptsrootdir = $(prefix)/share/scripts @@ -30,10 +31,4 @@ SUBDIRS = \ pythonscriptsdir = $(pkgdatadir)/python -#EXTRA_DIST = ${top_DATA} \ -# sample_fcst \ -# sample_obs \ -# python \ -# copyright_notice.txt - MAINTAINERCLEANFILES = Makefile.in diff --git a/scripts/python/Makefile.in b/scripts/python/Makefile.in index 5ff5daed23..99855cad22 100644 --- a/scripts/python/Makefile.in +++ b/scripts/python/Makefile.in @@ -330,15 +330,10 @@ SUBDIRS = \ examples \ met \ pyembed \ - utility + utility \ + tc_diag pythonscriptsdir = $(pkgdatadir)/python - -#EXTRA_DIST = ${top_DATA} \ -# sample_fcst \ -# sample_obs \ -# python \ -# copyright_notice.txt MAINTAINERCLEANFILES = Makefile.in all: all-recursive diff --git a/scripts/python/pyembed/Makefile.am b/scripts/python/pyembed/Makefile.am index ca8a3cb66e..7f821119d8 100644 --- a/scripts/python/pyembed/Makefile.am +++ b/scripts/python/pyembed/Makefile.am @@ -25,11 +25,13 @@ pyembed_DATA = \ read_tmp_dataplane.py \ read_tmp_ascii.py \ read_tmp_point_nc.py \ + read_tmp_tc_diag.py \ set_python_env.py \ write_tmp_dataplane.py \ write_tmp_point.py \ write_tmp_point_nc.py \ - write_tmp_mpr.py + write_tmp_mpr.py \ + write_tmp_tc_diag.py EXTRA_DIST = ${pyembed_DATA} diff --git a/scripts/python/pyembed/Makefile.in b/scripts/python/pyembed/Makefile.in index bd0848e94e..077334a8f3 100644 --- a/scripts/python/pyembed/Makefile.in +++ b/scripts/python/pyembed/Makefile.in @@ -361,11 +361,13 @@ pyembed_DATA = \ read_tmp_dataplane.py \ read_tmp_ascii.py \ read_tmp_point_nc.py \ + read_tmp_tc_diag.py \ set_python_env.py \ write_tmp_dataplane.py \ write_tmp_point.py \ write_tmp_point_nc.py \ - write_tmp_mpr.py + write_tmp_mpr.py \ + write_tmp_tc_diag.py EXTRA_DIST = ${pyembed_DATA} MAINTAINERCLEANFILES = Makefile.in diff --git a/scripts/python/pyembed/read_tmp_tc_diag.py b/scripts/python/pyembed/read_tmp_tc_diag.py new file mode 100644 index 0000000000..0828da3c82 --- /dev/null +++ b/scripts/python/pyembed/read_tmp_tc_diag.py @@ -0,0 +1,15 @@ +######################################################################## +# +# Reads temporary file into memory. +# +# usage: /path/to/python read_tmp_tc_diag.py tc_diag.tmp +# +######################################################################## + +import sys + +# PYTHON path for met.tc_diag is added by write_tmp_dataplane.py +from met.tc_diag import tc_diag + +# read NetCDF file +tc_diag = tc_diag.read_diag(sys.argv[1]) diff --git a/scripts/python/pyembed/write_tmp_tc_diag.py b/scripts/python/pyembed/write_tmp_tc_diag.py new file mode 100644 index 0000000000..aec1120430 --- /dev/null +++ b/scripts/python/pyembed/write_tmp_tc_diag.py @@ -0,0 +1,18 @@ +######################################################################## +# +# usage: /path/to/python write_tmp_tc_diag.py \ +# tmp_output_filename .py +# +######################################################################## + +import sys +try: + from python_embedding import pyembed_tools +except: + from pyembed.python_embedding import pyembed_tools + +if __name__ == '__main__': + argv_org = sys.argv[:] + tmp_filename = sys.argv[1] + met_in = pyembed_tools.call_python(sys.argv) + pyembed_tools.write_tmp_tc_diag(tmp_filename, met_in.tc_diag) diff --git a/scripts/python/tc_diag/Makefile.am b/scripts/python/tc_diag/Makefile.am new file mode 100644 index 0000000000..e61802cbf1 --- /dev/null +++ b/scripts/python/tc_diag/Makefile.am @@ -0,0 +1,33 @@ +## Makefile.am -- Process this file with automake to produce Makefile.in +## Copyright (C) 2000, 2006 Gary V. Vaughan +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +## MA 02110-1301, USA. + +# SUBDIRS = include + + +## Example of how to Install outside of $(pkgdatadir) +## scriptsrootdir = $(prefix)/share/scripts +## pythonutilitydir = ${scriptsrootdir}/utility + +pythontc_diagdir = $(pkgdatadir)/python/tc_diag + +pythontc_diag_DATA = \ + compute_tc_diagnostics.py + +EXTRA_DIST = ${pythontc_diag_DATA} + +MAINTAINERCLEANFILES = Makefile.in diff --git a/scripts/python/tc_diag/Makefile.in b/scripts/python/tc_diag/Makefile.in new file mode 100644 index 0000000000..aa22e5d013 --- /dev/null +++ b/scripts/python/tc_diag/Makefile.in @@ -0,0 +1,521 @@ +# Makefile.in generated by automake 1.16.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2018 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# SUBDIRS = include + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = scripts/python/tc_diag +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pythontc_diagdir)" +DATA = $(pythontc_diag_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUFRLIB_NAME = @BUFRLIB_NAME@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FC_LIBS = @FC_LIBS@ +FFLAGS = @FFLAGS@ +FLIBS = @FLIBS@ +GREP = @GREP@ +GRIB2CLIB_NAME = @GRIB2CLIB_NAME@ +GRIB2_LIBS = @GRIB2_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MET_BUFR = @MET_BUFR@ +MET_BUFRLIB = @MET_BUFRLIB@ +MET_CAIRO = @MET_CAIRO@ +MET_CAIROINC = @MET_CAIROINC@ +MET_CAIROLIB = @MET_CAIROLIB@ +MET_FREETYPE = @MET_FREETYPE@ +MET_FREETYPEINC = @MET_FREETYPEINC@ +MET_FREETYPELIB = @MET_FREETYPELIB@ +MET_GRIB2C = @MET_GRIB2C@ +MET_GRIB2CINC = @MET_GRIB2CINC@ +MET_GRIB2CLIB = @MET_GRIB2CLIB@ +MET_GSL = @MET_GSL@ +MET_GSLINC = @MET_GSLINC@ +MET_GSLLIB = @MET_GSLLIB@ +MET_HDF = @MET_HDF@ +MET_HDF5 = @MET_HDF5@ +MET_HDF5INC = @MET_HDF5INC@ +MET_HDF5LIB = @MET_HDF5LIB@ +MET_HDFEOS = @MET_HDFEOS@ +MET_HDFEOSINC = @MET_HDFEOSINC@ +MET_HDFEOSLIB = @MET_HDFEOSLIB@ +MET_HDFINC = @MET_HDFINC@ +MET_HDFLIB = @MET_HDFLIB@ +MET_NETCDF = @MET_NETCDF@ +MET_NETCDFINC = @MET_NETCDFINC@ +MET_NETCDFLIB = @MET_NETCDFLIB@ +MET_PYTHON_BIN_EXE = @MET_PYTHON_BIN_EXE@ +MET_PYTHON_CC = @MET_PYTHON_CC@ +MET_PYTHON_LD = @MET_PYTHON_LD@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PYTHON_LIBS = @PYTHON_LIBS@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +pythontc_diagdir = $(pkgdatadir)/python/tc_diag +pythontc_diag_DATA = \ + compute_tc_diagnostics.py + +EXTRA_DIST = ${pythontc_diag_DATA} +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign scripts/python/tc_diag/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign scripts/python/tc_diag/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-pythontc_diagDATA: $(pythontc_diag_DATA) + @$(NORMAL_INSTALL) + @list='$(pythontc_diag_DATA)'; test -n "$(pythontc_diagdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pythontc_diagdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pythontc_diagdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pythontc_diagdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pythontc_diagdir)" || exit $$?; \ + done + +uninstall-pythontc_diagDATA: + @$(NORMAL_UNINSTALL) + @list='$(pythontc_diag_DATA)'; test -n "$(pythontc_diagdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pythontc_diagdir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(pythontc_diagdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pythontc_diagDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pythontc_diagDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am distclean distclean-generic distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-pythontc_diagDATA \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am uninstall-pythontc_diagDATA + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/scripts/python/tc_diag/compute_tc_diagnostics.py b/scripts/python/tc_diag/compute_tc_diagnostics.py new file mode 100644 index 0000000000..14fff6f746 --- /dev/null +++ b/scripts/python/tc_diag/compute_tc_diagnostics.py @@ -0,0 +1,177 @@ +import os +import sys + +########################################### + +print("Python Script:\t" + repr(sys.argv[0])) + + ## + ## input file specified on the command line + ## + +if len(sys.argv) != 2: + print("ERROR: compute_tc_diagnostics.py -> Must specify exactly one input file.") + sys.exit(1) + +# Read the input file +input_file = os.path.expandvars(sys.argv[1]) + +try: + print("Input File:\t" + repr(input_file)) +except NameError: + print("Can't find the input file") + +# Diagnostics dictionary +tc_diag = { + 'MAXWIND': 9999, + 'RMW': 9999, + 'MIN_SLP': 9999, + 'SHR_MAG': 9999, + 'SHR_HDG': 9999, + 'STM_SPD': 9999, + 'STM_HDG': 9999, + 'SST': 9999, + 'OHC': 9999, + 'TPW': 9999, + 'LAND': 9999, + '850TANG': 9999, + '850VORT': 9999, + '200DVRG': 9999, + 'T_SURF': 9999, + 'R_SURF': 9999, + 'P_SURF': 9999, + 'U_SURF': 9999, + 'V_SURF': 9999, + 'T_1000': 9999, + 'R_1000': 9999, + 'Z_1000': 9999, + 'U_1000': 9999, + 'V_1000': 9999, + 'T_0975': 9999, + 'R_0975': 9999, + 'Z_0975': 9999, + 'U_0975': 9999, + 'V_0975': 9999, + 'T_0950': 9999, + 'R_0950': 9999, + 'Z_0950': 9999, + 'U_0950': 9999, + 'V_0950': 9999, + 'T_0925': 9999, + 'R_0925': 9999, + 'Z_0925': 9999, + 'U_0925': 9999, + 'V_0925': 9999, + 'T_0900': 9999, + 'R_0900': 9999, + 'Z_0900': 9999, + 'U_0900': 9999, + 'V_0900': 9999, + 'T_0850': 9999, + 'R_0850': 9999, + 'Z_0850': 9999, + 'U_0850': 9999, + 'V_0850': 9999, + 'T_0800': 9999, + 'R_0800': 9999, + 'Z_0800': 9999, + 'U_0800': 9999, + 'V_0800': 9999, + 'T_0750': 9999, + 'R_0750': 9999, + 'Z_0750': 9999, + 'U_0750': 9999, + 'V_0750': 9999, + 'T_0700': 9999, + 'R_0700': 9999, + 'Z_0700': 9999, + 'U_0700': 9999, + 'V_0700': 9999, + 'T_0650': 9999, + 'R_0650': 9999, + 'Z_0650': 9999, + 'U_0650': 9999, + 'V_0650': 9999, + 'T_0600': 9999, + 'R_0600': 9999, + 'Z_0600': 9999, + 'U_0600': 9999, + 'V_0600': 9999, + 'T_0550': 9999, + 'R_0550': 9999, + 'Z_0550': 9999, + 'U_0550': 9999, + 'V_0550': 9999, + 'T_0500': 9999, + 'R_0500': 9999, + 'Z_0500': 9999, + 'U_0500': 9999, + 'V_0500': 9999, + 'T_0450': 9999, + 'R_0450': 9999, + 'Z_0450': 9999, + 'U_0450': 9999, + 'V_0450': 9999, + 'T_0400': 9999, + 'R_0400': 9999, + 'Z_0400': 9999, + 'U_0400': 9999, + 'V_0400': 9999, + 'T_0350': 9999, + 'R_0350': 9999, + 'Z_0350': 9999, + 'U_0350': 9999, + 'V_0350': 9999, + 'T_0300': 9999, + 'R_0300': 9999, + 'Z_0300': 9999, + 'U_0300': 9999, + 'V_0300': 9999, + 'T_0250': 9999, + 'R_0250': 9999, + 'Z_0250': 9999, + 'U_0250': 9999, + 'V_0250': 9999, + 'T_0200': 9999, + 'R_0200': 9999, + 'Z_0200': 9999, + 'U_0200': 9999, + 'V_0200': 9999, + 'T_0150': 9999, + 'R_0150': 9999, + 'Z_0150': 9999, + 'U_0150': 9999, + 'V_0150': 9999, + 'T_0100': 9999, + 'R_0100': 9999, + 'Z_0100': 9999, + 'U_0100': 9999, + 'V_0100': 9999, + 'T_0070': 9999, + 'R_0070': 9999, + 'Z_0070': 9999, + 'U_0070': 9999, + 'V_0070': 9999, + 'T_0050': 9999, + 'R_0050': 9999, + 'Z_0050': 9999, + 'U_0050': 9999, + 'V_0050': 9999, + 'T_0030': 9999, + 'R_0030': 9999, + 'Z_0030': 9999, + 'U_0030': 9999, + 'V_0030': 9999, + 'T_0020': 9999, + 'R_0020': 9999, + 'Z_0020': 9999, + 'U_0020': 9999, + 'V_0020': 9999, + 'T_0010': 9999, + 'R_0010': 9999, + 'Z_0010': 9999, + 'U_0010': 9999, + 'V_0010': 9999, + 'TGRD': 9999 +} + diff --git a/src/basic/vx_cal/time_array.cc b/src/basic/vx_cal/time_array.cc index 0cc068d350..5430220f98 100644 --- a/src/basic/vx_cal/time_array.cc +++ b/src/basic/vx_cal/time_array.cc @@ -389,6 +389,30 @@ return; //////////////////////////////////////////////////////////////////////// +void TimeArray::add_const(unixtime u, int n) + +{ + +extend(Nelements + n); + +int j; + +for (j=0; j "; + if(description) cs << description << " "; + cs << "is provided in BETA status for MET " << met_version << ".\n"; + cs << "Please see the release notes of future MET versions for updates."; + mlog << Warning << "\n" << cs << "\n\n"; + + return; +} + + +//////////////////////////////////////////////////////////////////////// + + bool match_met_version(const char * check_version) { // diff --git a/src/basic/vx_util/string_fxns.h b/src/basic/vx_util/string_fxns.h index 78846a4297..47b16ed027 100644 --- a/src/basic/vx_util/string_fxns.h +++ b/src/basic/vx_util/string_fxns.h @@ -6,23 +6,19 @@ // ** P.O.Box 3000, Boulder, Colorado, 80307-3000, USA // *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* - - //////////////////////////////////////////////////////////////////////// - #ifndef __STRING_FXNS_H__ #define __STRING_FXNS_H__ - //////////////////////////////////////////////////////////////////////// - #include "concat_string.h" - //////////////////////////////////////////////////////////////////////// +extern void print_beta_warning(const char *description, + const char *method_name=nullptr); extern bool match_met_version(const char *); @@ -61,10 +57,6 @@ extern int parse_thresh_index(const char *str); //////////////////////////////////////////////////////////////////////// - #endif // __STRING_FXNS_H__ - //////////////////////////////////////////////////////////////////////// - - diff --git a/src/libcode/vx_data2d/var_info.cc b/src/libcode/vx_data2d/var_info.cc index f074b9bc53..1a36210d3d 100644 --- a/src/libcode/vx_data2d/var_info.cc +++ b/src/libcode/vx_data2d/var_info.cc @@ -242,6 +242,27 @@ void VarInfo::dump(ostream &out) const { /////////////////////////////////////////////////////////////////////////////// +ConcatString VarInfo::magic_time_str() const { + ConcatString cs(MagicStr); + + // Report timing information when specified + if(Init != 0) { + cs << ", InitTime = " << unix_to_yyyymmdd_hhmmss(Init); + } + + if(Valid != 0) { + cs << ", ValidTime = " << unix_to_yyyymmdd_hhmmss(Valid); + } + + if(!is_bad_data(Lead)) { + cs << ", LeadTime = " << sec_to_hhmmss(Lead); + } + + return(cs); +} + +/////////////////////////////////////////////////////////////////////////////// + void VarInfo::set_req_name(const char *str) { ReqName = str; return; diff --git a/src/libcode/vx_data2d/var_info.h b/src/libcode/vx_data2d/var_info.h index e990c587a2..de47e09e60 100644 --- a/src/libcode/vx_data2d/var_info.h +++ b/src/libcode/vx_data2d/var_info.h @@ -105,6 +105,7 @@ class VarInfo virtual GrdFileType file_type() const = 0; ConcatString magic_str() const; + ConcatString magic_time_str() const; ConcatString req_name() const; ConcatString name() const; ConcatString units() const; diff --git a/src/libcode/vx_data2d_factory/var_info_factory.cc b/src/libcode/vx_data2d_factory/var_info_factory.cc index a716e44f69..d82a74a8ad 100644 --- a/src/libcode/vx_data2d_factory/var_info_factory.cc +++ b/src/libcode/vx_data2d_factory/var_info_factory.cc @@ -136,3 +136,17 @@ VarInfo * VarInfoFactory::new_var_info(ConcatString s) { } /////////////////////////////////////////////////////////////////////////////// + +VarInfo * VarInfoFactory::new_copy(const VarInfo *vi_in) { + + if(!vi_in) return ( nullptr ); + + VarInfo *vi_copy = new_var_info(vi_in->file_type()); + + *vi_copy = *vi_in; + + return(vi_copy); + +} + +/////////////////////////////////////////////////////////////////////////////// diff --git a/src/libcode/vx_data2d_factory/var_info_factory.h b/src/libcode/vx_data2d_factory/var_info_factory.h index 2f95d3ac4e..747fb9d19a 100644 --- a/src/libcode/vx_data2d_factory/var_info_factory.h +++ b/src/libcode/vx_data2d_factory/var_info_factory.h @@ -25,6 +25,7 @@ class VarInfoFactory public: static VarInfo *new_var_info(GrdFileType t); static VarInfo *new_var_info(ConcatString s); + static VarInfo *new_copy(const VarInfo *); }; /////////////////////////////////////////////////////////////////////////////// diff --git a/src/libcode/vx_grid/tcrmw_grid.h b/src/libcode/vx_grid/tcrmw_grid.h index 771b497bf9..98b0d4debc 100644 --- a/src/libcode/vx_grid/tcrmw_grid.h +++ b/src/libcode/vx_grid/tcrmw_grid.h @@ -74,9 +74,9 @@ class TcrmwGrid : public RotatedLatLonGrid { int azimuth_n () const; double range_max_km () const; - double range_delta_km () const; // Range_Max_km/(Range_n - 1) + double range_delta_km () const; // Range_Max_km/Range_n - double azimuth_delta_deg () const; // 360.0/(Azimuth_n - 1) + double azimuth_delta_deg () const; // 360.0/Azimuth_n double lat_center_deg () const; double lon_center_deg () const; @@ -122,9 +122,9 @@ inline int TcrmwGrid::azimuth_n () const { return ( Azimuth_n ); } inline double TcrmwGrid::range_max_km () const { return ( Range_max_km ); } -inline double TcrmwGrid::range_delta_km () const { return ( Range_max_km/(Range_n - 1.0) ); } +inline double TcrmwGrid::range_delta_km () const { return ( Range_max_km/Range_n ); } -inline double TcrmwGrid::azimuth_delta_deg () const { return ( 360.0/(Azimuth_n - 1.0) ); } +inline double TcrmwGrid::azimuth_delta_deg () const { return ( 360.0/Azimuth_n ); } inline double TcrmwGrid::lat_center_deg () const { return ( Lat_Center_Deg ); } inline double TcrmwGrid::lon_center_deg () const { return ( Lon_Center_Deg ); } diff --git a/src/libcode/vx_nc_util/nc_utils.cc b/src/libcode/vx_nc_util/nc_utils.cc index 443caa837d..6350b6576a 100644 --- a/src/libcode/vx_nc_util/nc_utils.cc +++ b/src/libcode/vx_nc_util/nc_utils.cc @@ -380,7 +380,6 @@ bool get_cf_conventions(const netCDF::NcFile *nc, ConcatString& conventions_valu return has_attr; } - //////////////////////////////////////////////////////////////////////// ConcatString get_log_msg_for_att(const NcVarAtt *att) { @@ -734,7 +733,6 @@ bool get_global_att(const NcFile *nc, const ConcatString &att_name, //////////////////////////////////////////////////////////////////////// - bool get_global_att(const NcFile *nc, const ConcatString& att_name, int &att_val, bool error_out) { static const char *method_name = "\nget_global_att(int) -> "; @@ -875,7 +873,6 @@ void add_att(NcVar *var, const string &att_name, const double att_val) { var->putAtt(att_name, NcType::nc_DOUBLE, att_val); } - //////////////////////////////////////////////////////////////////////// int get_var_names(NcFile *nc, StringArray *var_names) { @@ -2592,6 +2589,7 @@ void copy_nc_att_short(NcVar *var_to, NcVarAtt *from_att) { } } +//////////////////////////////////////////////////////////////////////// NcVar *copy_nc_var(NcFile *to_nc, NcVar *from_var, const int deflate_level, const bool all_attrs) { @@ -2824,7 +2822,7 @@ void copy_nc_data_int(NcVar *var_from, NcVar *var_to, int data_size) { //////////////////////////////////////////////////////////////////////// void copy_nc_data_short(NcVar *var_from, NcVar *var_to, int data_size) { - const string method_name = "copy_nc_data_double"; + //const string method_name = "copy_nc_data_double"; short *data = new short[data_size]; var_from->getVar(data); var_to->putVar(data); @@ -2836,28 +2834,43 @@ void copy_nc_data_short(NcVar *var_from, NcVar *var_to, int data_size) { //////////////////////////////////////////////////////////////////////// +void copy_nc_data_string(NcVar *var_from, NcVar *var_to, int data_size) { + //const string method_name = "copy_nc_data_string"; + string *data = new string[data_size]; + var_from->getVar(data); + var_to->putVar(data); + // mlog << Error << "\n" << method_name << " -> error writing the variable " + // << GET_NC_NAME_P(var_to) << " to the netCDF file\n\n"; + // exit(1); + delete[] data; +} + +//////////////////////////////////////////////////////////////////////// + void copy_nc_var_data(NcVar *var_from, NcVar *var_to) { const string method_name = "copy_nc_var_data()"; int data_size = get_data_size(var_from); int dataType = GET_NC_TYPE_ID_P(var_from); + switch (dataType) { - case NC_DOUBLE: - copy_nc_data_double(var_from, var_to, data_size); - break; - - case NC_FLOAT: - copy_nc_data_float(var_from, var_to, data_size); - break; - case NC_SHORT: - copy_nc_data_short(var_from, var_to, data_size); - break; - case NC_INT: - copy_nc_data_int(var_from, var_to, data_size); - break; - - case NC_CHAR: - copy_nc_data_char(var_from, var_to, data_size); - break; + case NC_DOUBLE: + copy_nc_data_double(var_from, var_to, data_size); + break; + case NC_FLOAT: + copy_nc_data_float(var_from, var_to, data_size); + break; + case NC_SHORT: + copy_nc_data_short(var_from, var_to, data_size); + break; + case NC_INT: + copy_nc_data_int(var_from, var_to, data_size); + break; + case NC_CHAR: + copy_nc_data_char(var_from, var_to, data_size); + break; + case NC_STRING: + copy_nc_data_string(var_from, var_to, data_size); + break; default: mlog << Error << "\n" << method_name << " -> " diff --git a/src/libcode/vx_python3_utils/python3_util.h b/src/libcode/vx_python3_utils/python3_util.h index e81dfe260d..33a5ed63b3 100644 --- a/src/libcode/vx_python3_utils/python3_util.h +++ b/src/libcode/vx_python3_utils/python3_util.h @@ -12,6 +12,8 @@ #include +#include "vx_log.h" + //////////////////////////////////////////////////////////////////////// diff --git a/src/libcode/vx_series_data/series_data.cc b/src/libcode/vx_series_data/series_data.cc index 21d3a32f0e..d7a0e587d9 100644 --- a/src/libcode/vx_series_data/series_data.cc +++ b/src/libcode/vx_series_data/series_data.cc @@ -23,22 +23,33 @@ void get_series_entry(int i_series, VarInfo* data_info, const StringArray& search_files, const GrdFileType type, DataPlane& dp, Grid& grid) { + int i; + bool found; mlog << Debug(3) << "Processing series entry " << i_series + 1 << ": " - << data_info->magic_str() << "\n"; - - ConcatString filename; - filename = search_files[i_series]; + << data_info->magic_time_str() << "\n"; // Initialize dp.clear(); - // Error out if requested data is not found in the i-th file - if(!read_single_entry(data_info, filename, type, dp, grid)) { + // Search for data, beginning with the i_series index + for(i=0,found=false; i " - << "Could not find data for " << data_info->magic_str() - << " in file: " << filename << "\n\n"; + << "Could not find data for " << data_info->magic_time_str() + << " in file list:\n:" << write_css(search_files) << "\n\n"; exit(1); } diff --git a/src/libcode/vx_shapedata/mode_conf_info.cc b/src/libcode/vx_shapedata/mode_conf_info.cc index eec28a0445..af16067528 100644 --- a/src/libcode/vx_shapedata/mode_conf_info.cc +++ b/src/libcode/vx_shapedata/mode_conf_info.cc @@ -468,16 +468,16 @@ PlotInfo plot_info; // Parse the interest functions - centroid_dist_if = dict->lookup_pwl(conf_key_centroid_dist); - boundary_dist_if = dict->lookup_pwl(conf_key_boundary_dist); - convex_hull_dist_if = dict->lookup_pwl(conf_key_convex_hull_dist); - angle_diff_if = dict->lookup_pwl(conf_key_angle_diff); - aspect_diff_if = dict->lookup_pwl(conf_key_aspect_diff); - area_ratio_if = dict->lookup_pwl(conf_key_area_ratio); - int_area_ratio_if = dict->lookup_pwl(conf_key_int_area_ratio); - curvature_ratio_if = dict->lookup_pwl(conf_key_curvature_ratio); - complexity_ratio_if = dict->lookup_pwl(conf_key_complexity_ratio); - inten_perc_ratio_if = dict->lookup_pwl(conf_key_inten_perc_ratio); + centroid_dist_if = parse_interest_function(dict, conf_key_centroid_dist); + boundary_dist_if = parse_interest_function(dict, conf_key_boundary_dist); + convex_hull_dist_if = parse_interest_function(dict, conf_key_convex_hull_dist); + angle_diff_if = parse_interest_function(dict, conf_key_angle_diff); + aspect_diff_if = parse_interest_function(dict, conf_key_aspect_diff); + area_ratio_if = parse_interest_function(dict, conf_key_area_ratio); + int_area_ratio_if = parse_interest_function(dict, conf_key_int_area_ratio); + curvature_ratio_if = parse_interest_function(dict, conf_key_curvature_ratio); + complexity_ratio_if = parse_interest_function(dict, conf_key_complexity_ratio); + inten_perc_ratio_if = parse_interest_function(dict, conf_key_inten_perc_ratio); // Conf: total_interest_thresh @@ -487,7 +487,7 @@ PlotInfo plot_info; if(total_interest_thresh < 0 || total_interest_thresh > 1) { mlog << Error << "\nModeConfInfo::process_config() -> " - << "total_interest_thresh (" << total_interest_thresh + << "\"total_interest_thresh\" (" << total_interest_thresh << ") must be set between 0 and 1.\n\n"; exit(1); } @@ -644,6 +644,43 @@ return; //////////////////////////////////////////////////////////////////////// +PiecewiseLinear * ModeConfInfo::parse_interest_function(Dictionary * dict, const char * conf_key_if) + +{ + + // + // lookup piecewise linear interest function + // + +PiecewiseLinear * pwl_if = dict->lookup_pwl(conf_key_if); + + // + // range check the points + // + +for (int j=0; jn_points(); ++j) { + + if ( pwl_if->y(j) < 0 || pwl_if->y(j) > 1 ) { + + mlog << Error << "\nModeConfInfo::parse_interest_function() -> " + << "all \"" << conf_key_if << "\" interest function points (" + << pwl_if->x(j) << ", " << pwl_if->y(j) + << ") must be in the range of 0 and 1.\n\n"; + + exit(1); + + } + +} // for j + +return ( pwl_if ); + +} + + +//////////////////////////////////////////////////////////////////////// + + void ModeConfInfo::set_field_index(int k) { diff --git a/src/libcode/vx_shapedata/mode_conf_info.h b/src/libcode/vx_shapedata/mode_conf_info.h index 136ac0641d..c9c063477a 100644 --- a/src/libcode/vx_shapedata/mode_conf_info.h +++ b/src/libcode/vx_shapedata/mode_conf_info.h @@ -117,6 +117,8 @@ class ModeConfInfo { void read_fields (Mode_Field_Info * &, Dictionary * dict, GrdFileType, char _fo); + PiecewiseLinear * parse_interest_function(Dictionary * dict, const char * conf_key_if); + // // weights // diff --git a/src/libcode/vx_tc_util/gen_shape_info.cc b/src/libcode/vx_tc_util/gen_shape_info.cc index b912d3d387..633c559c7c 100644 --- a/src/libcode/vx_tc_util/gen_shape_info.cc +++ b/src/libcode/vx_tc_util/gen_shape_info.cc @@ -82,7 +82,8 @@ ConcatString GenShapeInfo::serialize() const { unix_to_yyyymmdd_hhmmss(IssueTime).text() : na_str) << "\"" << ", NPoints = " << Poly.n_points << ", Lat = " << Poly.y_min() << " to " << Poly.y_max() - << ", Lon = " << Poly.x_min() << " to " << Poly.x_max(); + << ", Lon = " << Poly.x_min() << " to " << Poly.x_max() + << ", NProb = " << ProbVal.n(); return(s); diff --git a/src/libcode/vx_tc_util/track_point.cc b/src/libcode/vx_tc_util/track_point.cc index 52849ceb10..31ee582835 100644 --- a/src/libcode/vx_tc_util/track_point.cc +++ b/src/libcode/vx_tc_util/track_point.cc @@ -199,6 +199,9 @@ void QuadInfo::set_wind(const ATCFTrackLine &l) { l.radius1(), l.radius2(), l.radius3(), l.radius4()); + // MET #2532 Derive ALVal from quadrants + if(is_bad_data(ALVal)) set_al_from_quad_vals(); + return; } @@ -273,6 +276,29 @@ void QuadInfo::set_quad_vals(QuadrantType ref_quad, return; } +//////////////////////////////////////////////////////////////////////// +// +// MET #2532: +// Compute the full circle value as the mean of the non-zero quadrants. +// +//////////////////////////////////////////////////////////////////////// + +void QuadInfo::set_al_from_quad_vals() { + double s = 0.0; + int n = 0; + + if(!is_bad_data(NEVal) || !is_bad_data(SEVal) || + !is_bad_data(SWVal) || !is_bad_data(NWVal)) { + if(NEVal > 0) { s += NEVal; n++; } + if(SEVal > 0) { s += SEVal; n++; } + if(SWVal > 0) { s += SWVal; n++; } + if(NWVal > 0) { s += NWVal; n++; } + ALVal = (n > 0 ? s/n : 0.0); + } + + return; +} + //////////////////////////////////////////////////////////////////////// bool QuadInfo::is_match_wind(const ATCFTrackLine &l) const { diff --git a/src/libcode/vx_tc_util/track_point.h b/src/libcode/vx_tc_util/track_point.h index f4acb29b6b..b6e4fb89be 100644 --- a/src/libcode/vx_tc_util/track_point.h +++ b/src/libcode/vx_tc_util/track_point.h @@ -64,6 +64,7 @@ class QuadInfo { void set_wind(const ATCFTrackLine &); void set_seas(const ATCFTrackLine &); void set_quad_vals(QuadrantType, int, int, int, int); + void set_al_from_quad_vals(); void set_intensity(int); void set_al_val(double); diff --git a/src/libcode/vx_tc_util/vx_tc_nc_util.cc b/src/libcode/vx_tc_util/vx_tc_nc_util.cc index 2cde15bce3..4c5297d8a1 100644 --- a/src/libcode/vx_tc_util/vx_tc_nc_util.cc +++ b/src/libcode/vx_tc_util/vx_tc_nc_util.cc @@ -17,78 +17,148 @@ using namespace netCDF; //////////////////////////////////////////////////////////////////////// -void write_tc_tracks(NcFile* nc_out, - const NcDim& track_point_dim, - const TrackInfoArray& tracks) { +void write_tc_track_lines(NcFile* nc_out, + const TrackInfo& track) { - TrackInfo track = tracks[0]; StringArray track_lines = track.track_lines(); - NcDim track_line_dim = add_dim(nc_out, "track_line", track_lines.n()); - - NcVar track_lines_var = nc_out->addVar( + NcDim track_line_dim = add_dim(nc_out, + "track_line", track_lines.n()); + NcVar track_line_var = nc_out->addVar( "TrackLines", ncString, track_line_dim); + vector counts; + counts.push_back(1); + + for(int i = 0; i < track_lines.n(); i++) { + vector offsets; + offsets.push_back(i); + string line = track_lines[i]; + const char* str = line.c_str(); + track_line_var.putVar(offsets, counts, &str); + } +} + +//////////////////////////////////////////////////////////////////////// + +void write_tc_track_lat_lon(NcFile* nc_out, + const NcDim& track_point_dim, + const TrackInfo& track) { + NcVar track_lat_var = nc_out->addVar( - "Lat", ncDouble, track_point_dim); - add_att(&track_lat_var, "long_name", "Track Point Latitude"); - add_att(&track_lat_var, "units", "degrees_east"); + "FullTrackLat", ncDouble, track_point_dim); + add_att(&track_lat_var, "long_name", "Full Track Point Latitude"); + add_att(&track_lat_var, "units", "degrees_north"); add_att(&track_lat_var, "standard_name", "latitude_track"); NcVar track_lon_var = nc_out->addVar( - "Lon", ncDouble, track_point_dim); - add_att(&track_lon_var, "long_name", "Track Point Longitude"); - add_att(&track_lon_var, "units", "degrees_north"); + "FullTrackLon", ncDouble, track_point_dim); + add_att(&track_lon_var, "long_name", "Full Track Point Longitude"); + add_att(&track_lon_var, "units", "degrees_east"); add_att(&track_lon_var, "standard_name", "longitude_track"); - NcVar track_mrd_var = nc_out->addVar( - "RMW", ncDouble, track_point_dim); - add_att(&track_mrd_var, "long_name", "Radius of Maximum Winds"); - add_att(&track_mrd_var, "units", "nautical_miles"); - add_att(&track_mrd_var, "standard_name", "radius_max_wind"); double* track_lat_data = new double[track.n_points()]; double* track_lon_data = new double[track.n_points()]; - double* track_mrd_data = new double[track.n_points()]; for(int i = 0; i < track.n_points(); i++) { - mlog << Debug(4) << track[i].serialize() << "\n"; + mlog << Debug(5) << track[i].serialize() << "\n"; track_lat_data[i] = track[i].lat(); track_lon_data[i] = track[i].lon(); - track_mrd_data[i] = track[i].mrd(); } vector offsets; + offsets.push_back(0); + vector counts; + counts.push_back(track.n_points()); - mlog << Debug(2) << "Writing " << track_lines.n() << " track lines.\n"; + track_lat_var.putVar(offsets, counts, track_lat_data); + track_lon_var.putVar(offsets, counts, track_lon_data); - for(int i = 0; i < track_lines.n(); i++) { - offsets.clear(); - offsets.push_back(i); - counts.clear(); - counts.push_back(1); - string line = track_lines[i]; - mlog << Debug(3) << line << "\n"; - const char* str = line.c_str(); - track_lines_var.putVar(offsets, counts, &str); + delete[] track_lat_data; + delete[] track_lon_data; +} + +//////////////////////////////////////////////////////////////////////// + +void write_tc_track_point(NcFile* nc_out, + const NcDim& valid_dim, + const TrackPoint& point) { + double v; + + vector offsets; + vector counts; + + offsets.push_back(0); + counts.push_back(1); + + // Write track point values for lat, lon, vmax, and mslp + + NcVar lat_var = nc_out->addVar( + "TrackLat", ncDouble, valid_dim); + add_att(&lat_var, "long_name", "Track Point Latitude"); + add_att(&lat_var, "units", "degrees_north"); + add_att(&lat_var, "standard_name", "latitude_track"); + v = point.lat(); + lat_var.putVar(offsets, counts, &v); + + NcVar lon_var = nc_out->addVar( + "TrackLon", ncDouble, valid_dim); + add_att(&lon_var, "long_name", "Track Point Longitude"); + add_att(&lon_var, "units", "degrees_east"); + add_att(&lon_var, "standard_name", "longitude_track"); + v = point.lon(); + lon_var.putVar(offsets, counts, &v); + + NcVar vmax_var = nc_out->addVar( + "TrackVMax", ncDouble, valid_dim); + add_att(&vmax_var, "long_name", "Maximum sustained wind speed"); + add_att(&vmax_var, "units", "kts"); + add_att(&vmax_var, "_FillValue", bad_data_double); + v = point.v_max(); + vmax_var.putVar(offsets, counts, &v); + + NcVar mslp_var = nc_out->addVar( + "TrackMSLP", ncDouble, valid_dim); + add_att(&mslp_var, "long_name", "Minimum sea level pressure"); + add_att(&mslp_var, "units", "millibars"); + add_att(&mslp_var, "_FillValue", bad_data_double); + v = point.mslp(); + mslp_var.putVar(offsets, counts, &v); + +} + +//////////////////////////////////////////////////////////////////////// + +void write_tc_rmw(NcFile* nc_out, + const NcDim& track_point_dim, + const TrackInfo& track) { + + NcVar track_mrd_var = nc_out->addVar( + "RMW", ncDouble, track_point_dim); + add_att(&track_mrd_var, "long_name", "Radius of Maximum Winds"); + add_att(&track_mrd_var, "units", "nautical_miles"); + add_att(&track_mrd_var, "standard_name", "radius_max_wind"); + + double* track_mrd_data = new double[track.n_points()]; + + for(int i = 0; i < track.n_points(); i++) { + track_mrd_data[i] = track[i].mrd(); } - offsets.clear(); + vector offsets; offsets.push_back(0); - counts.clear(); + vector counts; counts.push_back(track.n_points()); - track_lat_var.putVar(offsets, counts, track_lat_data); - track_lon_var.putVar(offsets, counts, track_lon_data); track_mrd_var.putVar(offsets, counts, track_mrd_data); - delete[] track_lat_data; - delete[] track_lon_data; delete[] track_mrd_data; } //////////////////////////////////////////////////////////////////////// + set get_pressure_level_strings( map > variable_levels) { @@ -201,7 +271,7 @@ void def_tc_pressure(NcFile* nc_out, // Define variable pressure_var = nc_out->addVar("pressure", ncDouble, pressure_dim); - // Set attributes + // Add attributes add_att(&pressure_var, "long_name", "pressure"); add_att(&pressure_var, "units", "millibars"); add_att(&pressure_var, "standard_name", "pressure"); @@ -239,9 +309,16 @@ void def_tc_range_azimuth(NcFile* nc_out, range_var = nc_out->addVar("range", ncDouble, range_dim); azimuth_var = nc_out->addVar("azimuth", ncDouble, azimuth_dim); - // Set attributes + // Add attributes add_att(&range_var, "long_name", "range"); - add_att(&range_var, "units", "fraction of RMW"); + + // Range is defined as a fraction of RMW or in kilometers + if(is_bad_data(rmw_scale)) { + add_att(&range_var, "units", "km"); + } + else { + add_att(&range_var, "units", "fraction of RMW"); + } add_att(&range_var, "standard_name", "range"); add_att(&range_var, "_FillValue", bad_data_double); @@ -252,7 +329,8 @@ void def_tc_range_azimuth(NcFile* nc_out, // Compute grid coordinates for (int i = 0; i < grid.range_n(); i++) { - range_data[i] = i * rmw_scale; + if(is_bad_data(rmw_scale)) range_data[i] = i * grid.range_delta_km(); + else range_data[i] = i * rmw_scale; } for (int j = 0; j < grid.azimuth_n(); j++) { azimuth_data[j] = j * grid.azimuth_delta_deg(); @@ -271,39 +349,146 @@ void def_tc_range_azimuth(NcFile* nc_out, //////////////////////////////////////////////////////////////////////// -void def_tc_time_lat_lon(NcFile* nc_out, +void def_tc_init_time(NcFile* nc_out, + NcVar& var_str, NcVar& var_ut) { + + // Initialization time, as a formatted string + var_str = nc_out->addVar("init_time", ncString); + add_att(&var_str, "long_name", "Initialization Time"); + add_att(&var_str, "units", "YYYYMMDD_HHMMSS"); + add_att(&var_str, "standard_name", "init_time"); + + // Initialization time, as a unixtime string + var_ut = nc_out->addVar("init_time_ut", ncString); + add_att(&var_ut, "long_name", "Init Time"); + add_att(&var_ut, "units", "unixtime"); + add_att(&var_ut, "standard_name", "init_time"); +} + +//////////////////////////////////////////////////////////////////////// + +void def_tc_valid_time(NcFile* nc_out, + const NcDim& track_point_dim, + NcVar& var_str, NcVar& var_ut) { + + // Valid time, as a formatted string + var_str = nc_out->addVar("valid_time", ncString, + track_point_dim); + add_att(&var_str, "long_name", "Valid Time"); + add_att(&var_str, "units", "YYYYMMDD_HHMMSS"); + add_att(&var_str, "standard_name", "valid_time"); + + // Valid time, as a unixtime string + var_ut = nc_out->addVar("valid_time_ut", ncString, + track_point_dim); + add_att(&var_ut, "long_name", "Valid Time"); + add_att(&var_ut, "units", "unixtime"); + add_att(&var_ut, "standard_name", "valid_time"); +} + +//////////////////////////////////////////////////////////////////////// + +void def_tc_lead_time(NcFile* nc_out, + const NcDim& track_point_dim, + NcVar& var_str, NcVar& var_sec) { + + // Lead time, as a formatted string + var_str = nc_out->addVar("lead_time", ncString, + track_point_dim); + add_att(&var_str, "long_name", "Lead Time"); + add_att(&var_str, "units", "HHMMSS"); + add_att(&var_str, "standard_name", "lead_time"); + + // Lead time, as an integer number of seconds + var_sec = nc_out->addVar("lead_time_sec", ncInt, + track_point_dim); + add_att(&var_sec, "long_name", "Lead Time"); + add_att(&var_sec, "units", "seconds"); + add_att(&var_sec, "standard_name", "lead_time"); +} + +//////////////////////////////////////////////////////////////////////// + +void def_tc_lat_lon(NcFile* nc_out, const NcDim& track_point_dim, const NcDim& range_dim, const NcDim& azimuth_dim, - NcVar& valid_time_var, NcVar& lat_var, NcVar& lon_var) { + NcVar& lat_var, NcVar& lon_var) { vector dims; dims.push_back(track_point_dim); dims.push_back(range_dim); dims.push_back(azimuth_dim); - valid_time_var = nc_out->addVar("valid_time", ncUint64, - track_point_dim); lat_var = nc_out->addVar("lat", ncDouble, dims); lon_var = nc_out->addVar("lon", ncDouble, dims); - // Set attributes - add_att(&valid_time_var, "long_name", "valid_time"); - add_att(&valid_time_var, "units", "yyyymmddhh"); - add_att(&valid_time_var, "standard_name", "valid_time"); - - add_att(&lat_var, "long_name", "latitude"); + // Add attributes + add_att(&lat_var, "long_name", "Latitude"); add_att(&lat_var, "units", "degrees_north"); add_att(&lat_var, "standard_name", "latitude"); - add_att(&lon_var, "long_name", "longitude"); + add_att(&lon_var, "long_name", "Longitude"); add_att(&lon_var, "units", "degrees_east"); add_att(&lon_var, "standard_name", "longitude"); } //////////////////////////////////////////////////////////////////////// -void write_tc_valid_time(NcFile* nc_out, - const int& i_point, const NcVar& var, - const long& valid_time) { +void write_tc_init_time(NcFile* nc_out, + const NcVar& var_str, const NcVar& var_ut, + const unixtime& ut) { + + ConcatString cs; + const char* str; + + // Initialization time, as a formatted string + unix_to_yyyymmdd_hhmmss(ut, cs); + str = cs.c_str(); + var_str.putVar(&str); + + // Initialization time, as a unixtime string + cs << cs_erase << ut; + str = cs.c_str(); + var_ut.putVar(&str); +} + +//////////////////////////////////////////////////////////////////////// + +void write_tc_valid_time(NcFile* nc_out, const int& i_point, + const NcVar& var_str, const NcVar& var_ut, + const unixtime& ut) { + + ConcatString cs; + const char* str; + + vector offsets; + vector counts; + + offsets.clear(); + offsets.push_back(i_point); + + counts.clear(); + counts.push_back(1); + + // Valid time, as a formatted string + unix_to_yyyymmdd_hhmmss(ut, cs); + str = cs.c_str(); + var_str.putVar(offsets, counts, &str); + + + // Valid time, as a unixtime string + cs << cs_erase << ut; + str = cs.c_str(); + var_ut.putVar(offsets, counts, &str); +} + +//////////////////////////////////////////////////////////////////////// + +void write_tc_lead_time(NcFile* nc_out, const int& i_point, + const NcVar& var_str, const NcVar& var_sec, + const int& sec) { + + ConcatString cs; + const char* str; vector offsets; vector counts; @@ -314,7 +499,13 @@ void write_tc_valid_time(NcFile* nc_out, counts.clear(); counts.push_back(1); - var.putVar(offsets, counts, &valid_time); + // Lead time, as a formatted string + sec_to_hhmmss(sec, cs); + str = cs.c_str(); + var_str.putVar(offsets, counts, &str); + + // Lead time, as an integer number of seconds + var_sec.putVar(offsets, counts, &sec); } //////////////////////////////////////////////////////////////////////// @@ -383,7 +574,7 @@ void def_tc_data(NcFile* nc_out, data_var = nc_out->addVar( var_name, ncDouble, dims); - // Set attributes + // Add attributes add_att(&data_var, "long_name", data_info->long_name_attr()); add_att(&data_var, "units", data_info->units_attr()); add_att(&data_var, "_FillValue", bad_data_double); @@ -405,7 +596,7 @@ void def_tc_data_3d(NcFile* nc_out, data_var = nc_out->addVar( data_info->name_attr(), ncDouble, dims); - // Set attributes + // Add attributes add_att(&data_var, "long_name", data_info->long_name_attr()); add_att(&data_var, "units", data_info->units_attr()); add_att(&data_var, "_FillValue", bad_data_double); @@ -429,7 +620,7 @@ void def_tc_azi_mean_data(NcFile* nc_out, data_var = nc_out->addVar(var_name, ncDouble, dims); - // Set attributes + // Add attributes add_att(&data_var, "long_name", data_info->long_name_attr()); add_att(&data_var, "units", data_info->units_attr()); add_att(&data_var, "_FillValue", bad_data_double); @@ -542,32 +733,28 @@ extern void write_tc_pressure_level_data( map pressure_level_indices, const string& level_str, const int& i_point, const NcVar& var, const double* data) { - vector offsets; - vector counts; + write_tc_pressure_level_data(nc_out, grid, i_point, + pressure_level_indices[level_str], var, data); +} + +//////////////////////////////////////////////////////////////////////// + +extern void write_tc_pressure_level_data( + NcFile* nc_out, const TcrmwGrid& grid, + const int& i_point, const int& i_level, + const NcVar& var, const double* data) { vector offsets_3d; vector counts_3d; double* data_rev; - int i_level = pressure_level_indices[level_str]; - - offsets.clear(); - offsets.push_back(i_point); - offsets.push_back(0); - offsets.push_back(0); - offsets_3d.clear(); offsets_3d.push_back(i_point); offsets_3d.push_back(i_level); offsets_3d.push_back(0); offsets_3d.push_back(0); - counts.clear(); - counts.push_back(1); - counts.push_back(grid.range_n()); - counts.push_back(grid.azimuth_n()); - counts_3d.clear(); counts_3d.push_back(1); counts_3d.push_back(1); diff --git a/src/libcode/vx_tc_util/vx_tc_nc_util.h b/src/libcode/vx_tc_util/vx_tc_nc_util.h index d909cffe83..981d55e08e 100644 --- a/src/libcode/vx_tc_util/vx_tc_nc_util.h +++ b/src/libcode/vx_tc_util/vx_tc_nc_util.h @@ -23,8 +23,17 @@ //////////////////////////////////////////////////////////////////////// -extern void write_tc_tracks(netCDF::NcFile*, - const netCDF::NcDim&, const TrackInfoArray&); +extern void write_tc_track_lines(netCDF::NcFile*, + const TrackInfo&); + +extern void write_tc_track_lat_lon(netCDF::NcFile*, + const netCDF::NcDim&, const TrackInfo&); + +extern void write_tc_track_point(netCDF::NcFile*, + const netCDF::NcDim&, const TrackPoint&); + +extern void write_tc_rmw(netCDF::NcFile*, + const netCDF::NcDim&, const TrackInfo&); extern std::set get_pressure_level_strings( std::map >); @@ -47,9 +56,18 @@ extern void def_tc_pressure(netCDF::NcFile*, extern void def_tc_range_azimuth(netCDF::NcFile*, const netCDF::NcDim&, const netCDF::NcDim&, const TcrmwGrid&, double); -extern void def_tc_time_lat_lon(netCDF::NcFile*, +extern void def_tc_init_time(netCDF::NcFile*, + netCDF::NcVar&, netCDF::NcVar&); + +extern void def_tc_valid_time(netCDF::NcFile*, + const netCDF::NcDim&, netCDF::NcVar&, netCDF::NcVar&); + +extern void def_tc_lead_time(netCDF::NcFile*, + const netCDF::NcDim&, netCDF::NcVar&, netCDF::NcVar&); + +extern void def_tc_lat_lon(netCDF::NcFile*, const netCDF::NcDim&, const netCDF::NcDim&, const netCDF::NcDim&, - netCDF::NcVar&, netCDF::NcVar&, netCDF::NcVar&); + netCDF::NcVar&, netCDF::NcVar&); extern void def_tc_variables(netCDF::NcFile*, std::map >, @@ -69,8 +87,19 @@ extern void def_tc_azi_mean_data(netCDF::NcFile*, const netCDF::NcDim&, const netCDF::NcDim&, netCDF::NcVar&, VarInfo*); +extern void write_tc_init_time(netCDF::NcFile*, + const netCDF::NcVar&, const netCDF::NcVar&, + const unixtime&); + extern void write_tc_valid_time(netCDF::NcFile*, - const int&, const netCDF::NcVar&, const long&); + const int&, + const netCDF::NcVar&, const netCDF::NcVar&, + const unixtime&); + +extern void write_tc_lead_time(netCDF::NcFile*, + const int&, + const netCDF::NcVar&, const netCDF::NcVar&, + const int&); extern void write_tc_data(netCDF::NcFile*, const TcrmwGrid&, const int&, const netCDF::NcVar&, const double*); @@ -85,6 +114,9 @@ extern void write_tc_pressure_level_data(netCDF::NcFile*, const TcrmwGrid&, std::map, const std::string&, const int&, const netCDF::NcVar&, const double*); +extern void write_tc_pressure_level_data(netCDF::NcFile*, const TcrmwGrid&, + const int&, const int&, const netCDF::NcVar&, const double*); + //////////////////////////////////////////////////////////////////////// #endif // __VX_TC_NC_UTIL_H__ diff --git a/src/tools/tc_utils/Makefile.am b/src/tools/tc_utils/Makefile.am index 31ba943541..bbb74c967a 100644 --- a/src/tools/tc_utils/Makefile.am +++ b/src/tools/tc_utils/Makefile.am @@ -24,4 +24,8 @@ SUBDIRS = tc_dland \ rmw_analysis \ tc_stat +if ENABLE_PYTHON + SUBDIRS += tc_diag +endif + MAINTAINERCLEANFILES = Makefile.in diff --git a/src/tools/tc_utils/Makefile.in b/src/tools/tc_utils/Makefile.in index 97a28db892..63280f6d5e 100644 --- a/src/tools/tc_utils/Makefile.in +++ b/src/tools/tc_utils/Makefile.in @@ -87,6 +87,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +@ENABLE_PYTHON_TRUE@am__append_1 = tc_diag subdir = src/tools/tc_utils ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac @@ -151,7 +152,8 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) +DIST_SUBDIRS = tc_dland tc_pairs tc_stat tc_gen tc_rmw rmw_analysis \ + tc_diag am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ @@ -324,14 +326,8 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -SUBDIRS = tc_dland \ - tc_pairs \ - tc_stat \ - tc_gen \ - tc_rmw \ - rmw_analysis \ - tc_stat - +SUBDIRS = tc_dland tc_pairs tc_stat tc_gen tc_rmw rmw_analysis tc_stat \ + $(am__append_1) MAINTAINERCLEANFILES = Makefile.in all: all-recursive diff --git a/src/tools/tc_utils/tc_diag/.gitignore b/src/tools/tc_utils/tc_diag/.gitignore new file mode 100644 index 0000000000..7087a92ed6 --- /dev/null +++ b/src/tools/tc_utils/tc_diag/.gitignore @@ -0,0 +1,6 @@ +tc_diag +*.o +*.a +.deps +Makefile +*.dSYM diff --git a/src/tools/tc_utils/tc_diag/Makefile.am b/src/tools/tc_utils/tc_diag/Makefile.am new file mode 100644 index 0000000000..c10b2a9752 --- /dev/null +++ b/src/tools/tc_utils/tc_diag/Makefile.am @@ -0,0 +1,49 @@ +## @start 1 +## Makefile.am -- Process this file with automake to produce Makefile.in +## @end 1 + +MAINTAINERCLEANFILES = Makefile.in + +# Include the project definitions + +include ${top_srcdir}/Make-include + +# The program + +bin_PROGRAMS = tc_diag +tc_diag_SOURCES = tc_diag.cc \ + python_tc_diag.cc \ + tc_diag_conf_info.cc +tc_diag_CPPFLAGS = ${MET_CPPFLAGS} +tc_diag_LDFLAGS = ${MET_LDFLAGS} +tc_diag_LDADD = -lvx_stat_out \ + -lvx_statistics \ + -lvx_analysis_util \ + -lvx_series_data \ + -lvx_tc_util \ + -lvx_data2d_factory \ + -lvx_data2d_nc_met \ + -lvx_data2d_grib $(GRIB2_LIBS) \ + -lvx_data2d_nc_pinterp \ + $(PYTHON_LIBS) \ + -lvx_data2d_nccf \ + -lvx_statistics \ + -lvx_data2d \ + -lvx_nc_util \ + -lvx_regrid \ + -lvx_grid \ + -lvx_config \ + -lvx_gsl_prob \ + -lvx_cal \ + -lvx_nav \ + -lvx_util_math \ + -lvx_util \ + -lvx_math \ + -lvx_color \ + -lvx_log \ + -lm -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas \ + $(FLIBS) + +EXTRA_DIST = tc_diag_conf_info.h \ + python_tc_diag.h \ + tc_diag.h diff --git a/src/tools/tc_utils/tc_diag/Makefile.in b/src/tools/tc_utils/tc_diag/Makefile.in new file mode 100644 index 0000000000..7ab9727490 --- /dev/null +++ b/src/tools/tc_utils/tc_diag/Makefile.in @@ -0,0 +1,734 @@ +# Makefile.in generated by automake 1.16.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2018 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = tc_diag$(EXEEXT) +subdir = src/tools/tc_utils/tc_diag +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_tc_diag_OBJECTS = tc_diag-tc_diag.$(OBJEXT) \ + tc_diag-python_tc_diag.$(OBJEXT) \ + tc_diag-tc_diag_conf_info.$(OBJEXT) +tc_diag_OBJECTS = $(am_tc_diag_OBJECTS) +am__DEPENDENCIES_1 = +tc_diag_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +tc_diag_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(tc_diag_LDFLAGS) \ + $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/tc_diag-python_tc_diag.Po \ + ./$(DEPDIR)/tc_diag-tc_diag.Po \ + ./$(DEPDIR)/tc_diag-tc_diag_conf_info.Po +am__mv = mv -f +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +SOURCES = $(tc_diag_SOURCES) +DIST_SOURCES = $(tc_diag_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUFRLIB_NAME = @BUFRLIB_NAME@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FC_LIBS = @FC_LIBS@ +FFLAGS = @FFLAGS@ +FLIBS = @FLIBS@ +GREP = @GREP@ +GRIB2CLIB_NAME = @GRIB2CLIB_NAME@ +GRIB2_LIBS = @GRIB2_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MET_BUFR = @MET_BUFR@ +MET_BUFRLIB = @MET_BUFRLIB@ +MET_CAIRO = @MET_CAIRO@ +MET_CAIROINC = @MET_CAIROINC@ +MET_CAIROLIB = @MET_CAIROLIB@ +MET_FREETYPE = @MET_FREETYPE@ +MET_FREETYPEINC = @MET_FREETYPEINC@ +MET_FREETYPELIB = @MET_FREETYPELIB@ +MET_GRIB2C = @MET_GRIB2C@ +MET_GRIB2CINC = @MET_GRIB2CINC@ +MET_GRIB2CLIB = @MET_GRIB2CLIB@ +MET_GSL = @MET_GSL@ +MET_GSLINC = @MET_GSLINC@ +MET_GSLLIB = @MET_GSLLIB@ +MET_HDF = @MET_HDF@ +MET_HDF5 = @MET_HDF5@ +MET_HDF5INC = @MET_HDF5INC@ +MET_HDF5LIB = @MET_HDF5LIB@ +MET_HDFEOS = @MET_HDFEOS@ +MET_HDFEOSINC = @MET_HDFEOSINC@ +MET_HDFEOSLIB = @MET_HDFEOSLIB@ +MET_HDFINC = @MET_HDFINC@ +MET_HDFLIB = @MET_HDFLIB@ +MET_NETCDF = @MET_NETCDF@ +MET_NETCDFINC = @MET_NETCDFINC@ +MET_NETCDFLIB = @MET_NETCDFLIB@ +MET_PYTHON_BIN_EXE = @MET_PYTHON_BIN_EXE@ +MET_PYTHON_CC = @MET_PYTHON_CC@ +MET_PYTHON_LD = @MET_PYTHON_LD@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +OPENMP_CFLAGS = @OPENMP_CFLAGS@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PYTHON_LIBS = @PYTHON_LIBS@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +MAINTAINERCLEANFILES = Makefile.in +tc_diag_SOURCES = tc_diag.cc \ + python_tc_diag.cc \ + tc_diag_conf_info.cc + +tc_diag_CPPFLAGS = ${MET_CPPFLAGS} +tc_diag_LDFLAGS = ${MET_LDFLAGS} +tc_diag_LDADD = -lvx_stat_out \ + -lvx_statistics \ + -lvx_analysis_util \ + -lvx_series_data \ + -lvx_tc_util \ + -lvx_data2d_factory \ + -lvx_data2d_nc_met \ + -lvx_data2d_grib $(GRIB2_LIBS) \ + -lvx_data2d_nc_pinterp \ + $(PYTHON_LIBS) \ + -lvx_data2d_nccf \ + -lvx_statistics \ + -lvx_data2d \ + -lvx_nc_util \ + -lvx_regrid \ + -lvx_grid \ + -lvx_config \ + -lvx_gsl_prob \ + -lvx_cal \ + -lvx_nav \ + -lvx_util_math \ + -lvx_util \ + -lvx_math \ + -lvx_color \ + -lvx_log \ + -lm -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas \ + $(FLIBS) + +EXTRA_DIST = tc_diag_conf_info.h \ + python_tc_diag.h \ + tc_diag.h + +all: all-am + +.SUFFIXES: +.SUFFIXES: .cc .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/tools/tc_utils/tc_diag/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/tools/tc_utils/tc_diag/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +tc_diag$(EXEEXT): $(tc_diag_OBJECTS) $(tc_diag_DEPENDENCIES) $(EXTRA_tc_diag_DEPENDENCIES) + @rm -f tc_diag$(EXEEXT) + $(AM_V_CXXLD)$(tc_diag_LINK) $(tc_diag_OBJECTS) $(tc_diag_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc_diag-python_tc_diag.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc_diag-tc_diag.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc_diag-tc_diag_conf_info.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +tc_diag-tc_diag.o: tc_diag.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tc_diag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tc_diag-tc_diag.o -MD -MP -MF $(DEPDIR)/tc_diag-tc_diag.Tpo -c -o tc_diag-tc_diag.o `test -f 'tc_diag.cc' || echo '$(srcdir)/'`tc_diag.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tc_diag-tc_diag.Tpo $(DEPDIR)/tc_diag-tc_diag.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tc_diag.cc' object='tc_diag-tc_diag.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tc_diag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tc_diag-tc_diag.o `test -f 'tc_diag.cc' || echo '$(srcdir)/'`tc_diag.cc + +tc_diag-tc_diag.obj: tc_diag.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tc_diag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tc_diag-tc_diag.obj -MD -MP -MF $(DEPDIR)/tc_diag-tc_diag.Tpo -c -o tc_diag-tc_diag.obj `if test -f 'tc_diag.cc'; then $(CYGPATH_W) 'tc_diag.cc'; else $(CYGPATH_W) '$(srcdir)/tc_diag.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tc_diag-tc_diag.Tpo $(DEPDIR)/tc_diag-tc_diag.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tc_diag.cc' object='tc_diag-tc_diag.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tc_diag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tc_diag-tc_diag.obj `if test -f 'tc_diag.cc'; then $(CYGPATH_W) 'tc_diag.cc'; else $(CYGPATH_W) '$(srcdir)/tc_diag.cc'; fi` + +tc_diag-python_tc_diag.o: python_tc_diag.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tc_diag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tc_diag-python_tc_diag.o -MD -MP -MF $(DEPDIR)/tc_diag-python_tc_diag.Tpo -c -o tc_diag-python_tc_diag.o `test -f 'python_tc_diag.cc' || echo '$(srcdir)/'`python_tc_diag.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tc_diag-python_tc_diag.Tpo $(DEPDIR)/tc_diag-python_tc_diag.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='python_tc_diag.cc' object='tc_diag-python_tc_diag.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tc_diag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tc_diag-python_tc_diag.o `test -f 'python_tc_diag.cc' || echo '$(srcdir)/'`python_tc_diag.cc + +tc_diag-python_tc_diag.obj: python_tc_diag.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tc_diag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tc_diag-python_tc_diag.obj -MD -MP -MF $(DEPDIR)/tc_diag-python_tc_diag.Tpo -c -o tc_diag-python_tc_diag.obj `if test -f 'python_tc_diag.cc'; then $(CYGPATH_W) 'python_tc_diag.cc'; else $(CYGPATH_W) '$(srcdir)/python_tc_diag.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tc_diag-python_tc_diag.Tpo $(DEPDIR)/tc_diag-python_tc_diag.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='python_tc_diag.cc' object='tc_diag-python_tc_diag.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tc_diag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tc_diag-python_tc_diag.obj `if test -f 'python_tc_diag.cc'; then $(CYGPATH_W) 'python_tc_diag.cc'; else $(CYGPATH_W) '$(srcdir)/python_tc_diag.cc'; fi` + +tc_diag-tc_diag_conf_info.o: tc_diag_conf_info.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tc_diag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tc_diag-tc_diag_conf_info.o -MD -MP -MF $(DEPDIR)/tc_diag-tc_diag_conf_info.Tpo -c -o tc_diag-tc_diag_conf_info.o `test -f 'tc_diag_conf_info.cc' || echo '$(srcdir)/'`tc_diag_conf_info.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tc_diag-tc_diag_conf_info.Tpo $(DEPDIR)/tc_diag-tc_diag_conf_info.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tc_diag_conf_info.cc' object='tc_diag-tc_diag_conf_info.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tc_diag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tc_diag-tc_diag_conf_info.o `test -f 'tc_diag_conf_info.cc' || echo '$(srcdir)/'`tc_diag_conf_info.cc + +tc_diag-tc_diag_conf_info.obj: tc_diag_conf_info.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tc_diag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tc_diag-tc_diag_conf_info.obj -MD -MP -MF $(DEPDIR)/tc_diag-tc_diag_conf_info.Tpo -c -o tc_diag-tc_diag_conf_info.obj `if test -f 'tc_diag_conf_info.cc'; then $(CYGPATH_W) 'tc_diag_conf_info.cc'; else $(CYGPATH_W) '$(srcdir)/tc_diag_conf_info.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tc_diag-tc_diag_conf_info.Tpo $(DEPDIR)/tc_diag-tc_diag_conf_info.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tc_diag_conf_info.cc' object='tc_diag-tc_diag_conf_info.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tc_diag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tc_diag-tc_diag_conf_info.obj `if test -f 'tc_diag_conf_info.cc'; then $(CYGPATH_W) 'tc_diag_conf_info.cc'; else $(CYGPATH_W) '$(srcdir)/tc_diag_conf_info.cc'; fi` + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f ./$(DEPDIR)/tc_diag-python_tc_diag.Po + -rm -f ./$(DEPDIR)/tc_diag-tc_diag.Po + -rm -f ./$(DEPDIR)/tc_diag-tc_diag_conf_info.Po + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f ./$(DEPDIR)/tc_diag-python_tc_diag.Po + -rm -f ./$(DEPDIR)/tc_diag-tc_diag.Po + -rm -f ./$(DEPDIR)/tc_diag-tc_diag_conf_info.Po + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ + distclean distclean-compile distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-binPROGRAMS install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-binPROGRAMS + +.PRECIOUS: Makefile + + +# Include the project definitions + +include ${top_srcdir}/Make-include + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/tools/tc_utils/tc_diag/python_tc_diag.cc b/src/tools/tc_utils/tc_diag/python_tc_diag.cc new file mode 100644 index 0000000000..997f5c6de6 --- /dev/null +++ b/src/tools/tc_utils/tc_diag/python_tc_diag.cc @@ -0,0 +1,334 @@ +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* +// ** Copyright UCAR (c) 1992 - 2023 +// ** University Corporation for Atmospheric Research (UCAR) +// ** National Center for Atmospheric Research (NCAR) +// ** Research Applications Lab (RAL) +// ** P.O.Box 3000, Boulder, Colorado, 80307-3000, USA +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* + +//////////////////////////////////////////////////////////////////////// + +using namespace std; + +#include + +#include "vx_config.h" +#include "vx_python3_utils.h" +#include "vx_log.h" + +#include "global_python.h" +#include "wchar_argv.h" + +//////////////////////////////////////////////////////////////////////// + +extern GlobalPython GP; // this needs external linkage + +//////////////////////////////////////////////////////////////////////// + +static const char * user_ppath = 0; +static const char write_tmp_diag [] = "MET_BASE/python/pyembed/write_tmp_tc_diag.py"; +static const char read_tmp_diag [] = "pyembed.read_tmp_tc_diag"; // NO ".py" suffix +static const char tc_diag_dict_name [] = "tc_diag"; + +//////////////////////////////////////////////////////////////////////// + +static bool straight_python_tc_diag(const ConcatString &script_name, + const ConcatString &tmp_file_name, + map &diag_map); + +static bool tmp_nc_tc_diag(const ConcatString &script_name, + const ConcatString &tmp_file_name, + map &diag_map); + +static void diag_map_from_python_dict( + PyObject *diag_dict, + map &diag_map); + +//////////////////////////////////////////////////////////////////////// + +bool python_tc_diag(const ConcatString &script_name, + const ConcatString &tmp_file_name, + map &diag_map) { + bool status = false; + + // Check for MET_PYTHON_EXE + if ((user_ppath = getenv(user_python_path_env)) != 0 ) { + status = tmp_nc_tc_diag(script_name, + tmp_file_name, diag_map); + } + // Use compiled python instance + else { + status = straight_python_tc_diag(script_name, + tmp_file_name, diag_map); + } + + return(status); +} + +//////////////////////////////////////////////////////////////////////// + +bool straight_python_tc_diag(const ConcatString &script_name, + const ConcatString &tmp_file_name, + map &diag_map) { + const char *method_name = "straight_python_tc_diag()"; + + mlog << Debug(3) << "Running Python diagnostics script (" + << script_name << " " << tmp_file_name << ").\n"; + + // Prepare arguments + StringArray arg_sa = script_name.split(" "); + arg_sa.add(tmp_file_name); + Wchar_Argv wa; + wa.set(arg_sa); + + // Reload the module if GP has already been initialized + bool do_reload = GP.is_initialized; + + GP.initialize(); + + if(PyErr_Occurred()) { + PyErr_Print(); + mlog << Warning << "\n" << method_name << " -> " + << "an error occurred initializing python\n\n"; + return(false); + } + + // Set the arguments + run_python_string("import os"); + run_python_string("import sys"); + + ConcatString command; + command << cs_erase + << "sys.path.append(\"" + << script_name.dirname() + << "\")"; + + run_python_string(command.text()); + + if(arg_sa.n() > 0) { + PySys_SetArgv(wa.wargc(), wa.wargv()); + } + + // Import the python script as a module + ConcatString script_base = script_name.basename(); + script_base.chomp(".py"); + + PyObject *module_obj = PyImport_ImportModule(script_base.c_str()); + + // Reload the module, if needed + if(do_reload) { + module_obj = PyImport_ReloadModule(module_obj); + } + + if(PyErr_Occurred()) { + PyErr_Print(); + mlog << Warning << "\n" << method_name << " -> " + << "an error occurred importing module \"" + << script_name << "\"\n\n"; + return(false); + } + + if(!module_obj) { + mlog << Warning << "\n" << method_name << " -> " + << "error running Python script \"" + << script_name << "\"\n\n"; + return(false); + } + + // Get the namespace for the module (as a dictionary) + PyObject *module_dict_obj = PyModule_GetDict(module_obj); + PyObject *key_obj = PyUnicode_FromString(tc_diag_dict_name); + PyObject *data_obj = PyDict_GetItem (module_dict_obj, key_obj); + + if(!data_obj || !PyDict_Check(data_obj)) { + mlog << Warning << "\n" << method_name << " -> " + << "trouble reading data from \"" + << script_name << "\"\n\n"; + return(false); + } + + // Populate the diagnostics map + diag_map_from_python_dict(data_obj, diag_map); + + return(true); +} + +//////////////////////////////////////////////////////////////////////// + +bool tmp_nc_tc_diag(const ConcatString &script_name, + const ConcatString &tmp_file_name, + map &diag_map) { + const char *method_name = "tmp_nc_tc_diag()"; + int i, status; + ConcatString command; + ConcatString path; + ConcatString tmp_nc_path; + const char * tmp_dir = 0; + Wchar_Argv wa; + + // TODO: Implement read/write temp tc_diag python functionality + mlog << Error << "\n" << method_name << " -> " + << "not yet fully implemented ... exiting!\n\n"; + exit(1); + + mlog << Debug(3) << "Calling " << user_ppath + << " to run Python diagnostics script (" + << script_name << " " << tmp_file_name << ").\n"; + + // Create a temp file + tmp_dir = getenv ("MET_TMP_DIR"); + if(!tmp_dir) tmp_dir = default_tmp_dir; + + path << cs_erase + << tmp_dir << '/' + << tmp_nc_base_name; + + tmp_nc_path = make_temp_file_name(path.text(), 0); + + // Construct the system command + command << cs_erase + << user_ppath << ' ' // user's path to python + << replace_path(write_tmp_diag) << ' ' // write_tmp_diag.py + << tmp_nc_path << ' ' // tmp_nc output filename + << script_name << ' ' // python script name + << tmp_file_name; // input temp NetCDF file + + mlog << Debug(4) << "Writing temporary Python dataplane file:\n\t" + << command << "\n"; + + status = system(command.text()); + + if(status) { + mlog << Error << "\n" << method_name << " -> " + << "command \"" << command.text() << "\" failed ... status = " + << status << "\n\n"; + exit(1); + } + + // Reload the module if GP has already been initialized + bool do_reload = GP.is_initialized; + + GP.initialize(); + + if(PyErr_Occurred()) { + PyErr_Print(); + mlog << Warning << "\n" << method_name << " -> " + << "an error occurred initializing python\n\n"; + return(false); + } + + // Prepare arguments to read input + StringArray arg_sa; + arg_sa.add(read_tmp_diag); + arg_sa.add(tmp_nc_path); + wa.set(arg_sa); + + PySys_SetArgv (wa.wargc(), wa.wargv()); + + mlog << Debug(4) << "Reading temporary Python diagnostics file: " + << tmp_nc_path << "\n"; + + // Import the python wrapper script as a module + path = read_tmp_diag; + path = path.basename(); + path.chomp(".py"); + + PyObject * module_obj = PyImport_ImportModule(path.c_str()); + + // Reload the module, if needed + if(do_reload) { + module_obj = PyImport_ReloadModule (module_obj); + } + + if(PyErr_Occurred()) { + PyErr_Print(); + mlog << Warning << "\n" << method_name << " -> " + << "an error occurred importing module " + << '\"' << path << "\"\n\n"; + return(false); + } + + if(!module_obj) { + mlog << Warning << "\n" << method_name << " -> " + << "error running Python script\n\n"; + return(false); + } + + // Get the namespace for the module (as a dictionary) + PyObject *module_dict_obj = PyModule_GetDict(module_obj); + PyObject *key_obj = PyUnicode_FromString(tc_diag_dict_name); + PyObject *data_obj = PyDict_GetItem(module_dict_obj, key_obj); + + if(!data_obj || !PyDict_Check(data_obj)) { + mlog << Warning << "\n" << method_name << " -> " + << "trouble reading data from \"" + << script_name << "\"\n\n"; + exit(1); + } + + // Populate the diagnostics map + diag_map_from_python_dict(data_obj, diag_map); + + // Cleanup + remove_temp_file(tmp_nc_path); + + return(true); +} + +//////////////////////////////////////////////////////////////////////// + +void diag_map_from_python_dict(PyObject *diag_dict, + map &diag_map) { + const char *method_name = "diag_map_from_python_dict()"; + PyObject *key_obj = 0; + PyObject *val_obj = 0; + int status; + double val; + long pos; + + // Initialize + pos = 0; + + // Loop through the dictionary entries + while((status = PyDict_Next(diag_dict, &pos, &key_obj, &val_obj)) != 0) { + + // All keys must be strings + if(!PyUnicode_Check(key_obj)) { + mlog << Error << "\n" << method_name << " -> " + << "key is not a string!\n\n"; + exit(1); + } + + // Parse key as a string and value as a number + string key_str = PyUnicode_AsUTF8(key_obj); + if(PyLong_Check(val_obj)) { + val = (double) PyLong_AsLong(val_obj); + } + else if(PyFloat_Check(val_obj)) { + val = PyFloat_AsDouble(val_obj); + } + else { + mlog << Error << "\n" << method_name << " -> " + << "TC diagnostic \"" << key_str + << "\" not specified as a numeric Python data type!\n\n"; + exit(1); + } + + // Check for duplicates + if(diag_map.count(key_str) > 0) { + mlog << Warning << "\n" << method_name << " -> " + << "ignoring duplicate entry for TC diagnostic \"" + << key_str << "\" = " << val << "!\n\n"; + } + // Store key/value pair in the dictionary + else { + mlog << Debug(5) << "Storing TC diagnostic \"" + << key_str << "\" = " << val << "\n"; + diag_map[key_str] = val; + } + } // end while + + return; +} + +//////////////////////////////////////////////////////////////////////// diff --git a/src/tools/tc_utils/tc_diag/python_tc_diag.h b/src/tools/tc_utils/tc_diag/python_tc_diag.h new file mode 100644 index 0000000000..dc1383267b --- /dev/null +++ b/src/tools/tc_utils/tc_diag/python_tc_diag.h @@ -0,0 +1,32 @@ +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* +// ** Copyright UCAR (c) 1992 - 2023 +// ** University Corporation for Atmospheric Research (UCAR) +// ** National Center for Atmospheric Research (NCAR) +// ** Research Applications Lab (RAL) +// ** P.O.Box 3000, Boulder, Colorado, 80307-3000, USA +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* + +//////////////////////////////////////////////////////////////////////// + +#ifndef __PYTHON_TC_DIAG__ +#define __PYTHON_TC_DIAG__ + +//////////////////////////////////////////////////////////////////////// + +extern "C" { + +#include "Python.h" + +} + +//////////////////////////////////////////////////////////////////////// + +extern bool python_tc_diag(const ConcatString &script_name, + const ConcatString &tmp_file_name, + std::map &diag_map); + +//////////////////////////////////////////////////////////////////////// + +#endif /* __PYTHON_TC_DIAG__ */ + +//////////////////////////////////////////////////////////////////////// diff --git a/src/tools/tc_utils/tc_diag/tc_diag.cc b/src/tools/tc_utils/tc_diag/tc_diag.cc new file mode 100644 index 0000000000..ae459a5f81 --- /dev/null +++ b/src/tools/tc_utils/tc_diag/tc_diag.cc @@ -0,0 +1,1698 @@ +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* +// ** Copyright UCAR (c) 1992 - 2023 +// ** University Corporation for Atmospheric Research (UCAR) +// ** National Center for Atmospheric Research (NCAR) +// ** Research Applications Lab (RAL) +// ** P.O.Box 3000, Boulder, Colorado, 80307-3000, USA +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* + +//////////////////////////////////////////////////////////////////////// +// +// Filename: tc_diag.cc +// +// Description: +// +// Mod# Date Name Description +// ---- ---- ---- ----------- +// 000 09/27/22 Halley Gotway New +// +//////////////////////////////////////////////////////////////////////// + +using namespace std; + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +using namespace netCDF; + +#ifdef _OPENMP + #include "omp.h" +#endif + +#include "main.h" +#include "tc_diag.h" +#include "python_tc_diag.h" + +#include "series_data.h" + +#include "vx_grid.h" +#include "vx_regrid.h" +#include "vx_tc_util.h" +#include "vx_nc_util.h" +#include "vx_tc_nc_util.h" +#include "vx_data2d_nc_met.h" +#include "vx_util.h" +#include "vx_log.h" +#include "vx_math.h" + +#include "met_file.h" + +//////////////////////////////////////////////////////////////////////// + +static void usage(); +static void process_command_line(int, char**); +static void get_file_type(); + +static void process_tracks(TrackInfoArray&); +static void get_atcf_files(const StringArray&, + const StringArray&, + StringArray&, + StringArray&); +static void process_track_files(const StringArray&, + const StringArray&, + TrackInfoArray&); +static void process_track_points(const TrackInfoArray &); +static void process_fields(const TrackInfoArray &, + const unixtime, int, + const string &, + const DomainInfo &); +static void process_out_files(const TrackInfoArray &); + +static void merge_tmp_files(const vector); +static void copy_coord_vars(NcFile *to_nc, NcFile *from_nc); +static void copy_time_vars(NcFile *to_nc, NcFile *from_nc, int); + +static bool is_keeper(const ATCFLineBase *); +static void set_deck(const StringArray&); +static void set_atcf_source(const StringArray&, + StringArray&, + StringArray&); +static void set_data(const StringArray&); +static void set_config(const StringArray&); +static void set_outdir(const StringArray&); + +static void setup_out_files(const TrackInfoArray &); +static ConcatString get_out_key(const TrackInfo &); +static ConcatString get_tmp_key(const TrackInfo &, + const TrackPoint &, + const string &); + +static ConcatString build_tmp_file_name(const TrackInfo *, + const TrackPoint *, + const string &); +static ConcatString build_out_file_name(const TrackInfo *, + const char *); + +static void write_tc_storm(NcFile *, const char *, + const char *, const char *); + +static void write_tc_times(NcFile *, const NcDim &, + const TrackInfo *, + const TrackPoint *); + +static void compute_lat_lon(TcrmwGrid&, double *, double *); + +//////////////////////////////////////////////////////////////////////// + +// +// TODO after the MET version 11.1.0 release: +// - Python diagnostics: +// - Incorporate CIRA python diagnostics scripts. +// - Read resulting Xarray dataset in memory. +// - Write CIRA ASCII and NetCDF diagnostics output files. +// - Add support for $MET_PYTHON_EXE. +// - Input data: +// - Instead of reading DataPlanes one at a time, +// read them all at once or perhaps in groups +// (e.g. all pressure levels). +// - Parellelize the processing of valid times. +// - Add support for vortex removal. Print a WARNING if +// the Diag Track differs from the Tech Id for the data +// files and vortex removal has not been requested. +// - NetCDF cylindrical coordinates output: +// - get_var_names() returns a multimap that is sorted by +// the order of the variable names. This reorders the vars +// in the NetCDF cyl coord output. Would prefer that reordering +// not happen. +// - Consider adding support for the "regrid" dictionary to +// control cyl coord regridding step is done. +// + +int met_main(int argc, char *argv[]) { + + // Print beta status warning + print_beta_warning("The TC-Diag tool"); + + // Process command line arguments + process_command_line(argc, argv); + + // Process the track data + TrackInfoArray tracks; + process_tracks(tracks); + + // Setup output files for each track + setup_out_files(tracks); + + // Process the gridded data + process_track_points(tracks); + + // Process the output files + process_out_files(tracks); + + return(0); +} + +//////////////////////////////////////////////////////////////////////// + +const string get_tool_name() { + return "tc_diag"; +} + +//////////////////////////////////////////////////////////////////////// + +void usage() { + + cout << "\n*** Model Evaluation Tools (MET" << met_version + << ") ***\n\n" + << "Usage: " << program_name << "\n" + << "\t-data domain tech_id_list [ file_1 ... file_n | data_file_list ]\n" + << "\t-deck file\n" + << "\t-config file\n" + << "\t[-outdir path]\n" + << "\t[-log file]\n" + << "\t[-v level]\n\n" + + << "\twhere\t\"-data domain tech_id_list [ file_1 ... file_n | data_file_list ]\"\n" + + << "\t\t\tSpecifies a domain name, a comma-separated list of ATCF tech ID's, " + << "\t\t\tand a list of gridded data files or an ASCII file containing " + << "\t\t\ta list of files to be used.\n" + << "\t\t\tSpecify \"-data\" once for each data source (required).\n" + + << "\t\t\"-deck source\" is the ATCF format data source " + << "(required).\n" + + << "\t\t\"-config file\" is a TCDiagConfig file to be used " + << "(required).\n" + + << "\t\t\"-outdir path\" overrides the default output directory " + << "(" << out_dir << ") (optional).\n" + + << "\t\t\"-log file\" outputs log messages to the specified " + << "file (optional).\n" + + << "\t\t\"-v level\" overrides the default level of logging (" + << mlog.verbosity_level() << ") (optional).\n\n" << flush; + + exit(1); +} + +//////////////////////////////////////////////////////////////////////// + +void process_command_line(int argc, char **argv) { + CommandLine cline; + ConcatString default_config_file; + + // Default output directory + out_dir = replace_path(default_out_dir); + + // Default output prefix + out_prefix = replace_path(default_out_prefix); + + // Print usage statement for no arguments + if(argc <= 1) usage(); + + // Parse command line into tokens + cline.set(argc, argv); + + // Set usage function + cline.set_usage(usage); + + // Add function calls for arguments + cline.add(set_data, "-data", -1); + cline.add(set_deck, "-deck", -1); + cline.add(set_config, "-config", 1); + cline.add(set_outdir, "-outdir", 1); + + // Parse command line + cline.parse(); + + // Check for required arguments + if(data_opt_map.size() == 0 || + deck_source.n() == 0 || + config_file.empty()) { + mlog << Error << "\nThe \"-data\", \"-deck\", and \"-config\" " + << "command line arguments are required!\n\n"; + usage(); + } + + // Create default config file name + default_config_file = replace_path(default_config_filename); + + // List config files + mlog << Debug(1) + << "Config File Default: " << default_config_file << "\n" + << "Config File User: " << config_file << "\n"; + + // Read config files + conf_info.read_config(default_config_file.c_str(), config_file.c_str()); + + // Get data file type from input files + get_file_type(); + + // Process the configuration + conf_info.process_config(file_type, data_opt_map); + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void get_file_type() { + Met2dDataFileFactory mtddf_factory; + Met2dDataFile *mtddf = (Met2dDataFile *) 0; + int i; + + // Build one long list of input data files + StringArray file_list; + map::iterator it; + for(it = data_opt_map.begin(); it != data_opt_map.end(); it++) { + file_list.add(it->second.data_files); + } + + // Get data file type from config + GrdFileType conf_file_type = + parse_conf_file_type(conf_info.conf.lookup_dictionary(conf_key_data)); + + // Find the first file that actually exists + for(i=0; i " + << "No valid data files found.\n\n"; + exit(1); + } + + // Read first valid file + if(!(mtddf = mtddf_factory.new_met_2d_data_file( + file_list[i].c_str(), conf_file_type))) { + mlog << Error << "\nget_file_type() -> " + << "Trouble reading data file \"" + << file_list[i] << "\"\n\n"; + exit(1); + } + + // Store the actual file type + file_type = mtddf->file_type(); + + // Clean up + if(mtddf) { delete mtddf; mtddf = (Met2dDataFile *) 0; } + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void process_tracks(TrackInfoArray& tracks) { + StringArray files, files_model_suffix; + TimeArray init_ta; + int i; + + // Get list of track files + get_atcf_files(deck_source, deck_model_suffix, + files, files_model_suffix); + + mlog << Debug(2) << "Processing " << files.n() + << " track data file(s).\n"; + + process_track_files(files, files_model_suffix, tracks); + + // Get list of unique track initialization times + for(i=0; i 1) { + mlog << Error << "\nprocess_tracks() -> " + << "set the \"init_inc\" config option to select one of the " + << init_ta.n() << " track initialization times between " + << unix_to_yyyymmddhh(init_ta.min()) << " and " + << unix_to_yyyymmddhh(init_ta.max()) << ".\n\n"; + exit(1); + } + + return; +} + +//////////////////////////////////////////////////////////////////////// +// +// Automated Tropical cyclone Forecasting System +// https://www.nrlmry.navy.mil/atcf_web/docs/ATCF-FAQ.html +// +//////////////////////////////////////////////////////////////////////// + +void get_atcf_files(const StringArray& source, + const StringArray& model_suffix, + StringArray& files, + StringArray& files_model_suffix) { + + StringArray cur_source, cur_files; + + if(source.n() != model_suffix.n()) { + mlog << Error << "\nget_atcf_files() -> " + << "the source and suffix arrays must be equal length!\n\n"; + exit(1); + } + + // Initialize + files.clear(); + files_model_suffix.clear(); + + // Build list of files from all sources + for(int i = 0; i < source.n(); i++) { + cur_source.clear(); + cur_source.add(source[i]); + cur_files = get_filenames(cur_source, NULL, atcf_suffix); + + for(int j = 0; j < cur_files.n(); j++) { + files.add(cur_files[j]); + files_model_suffix.add(model_suffix[i]); + } + } + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void process_track_files(const StringArray& files, + const StringArray& model_suffix, + TrackInfoArray& tracks) { + int i, cur_read, cur_add, tot_read, tot_add; + LineDataFile f; + ConcatString cs; + ATCFTrackLine line; + + // Initialize + tracks.clear(); + + // Initialize counts + tot_read = tot_add = 0; + + // Process input ATCF files + for(i=0; i " + << "unable to open file \"" << files[i] << "\"\n\n"; + exit(1); + } + + // Initialize counts + cur_read = cur_add = 0; + + // Read each line + while(f >> line) { + + // Increment line counts + cur_read++; + tot_read++; + + // Add model suffix, if specified + if(model_suffix[i].length() > 0) { + cs << cs_erase << line.technique() << model_suffix[i]; + line.set_technique(cs); + } + + // Check the keep status + if(!is_keeper(&line)) continue; + + // Attempt to add current line to TrackInfoArray + if(tracks.add(line, true, false)) { + cur_add++; + tot_add++; + } + } + + // Dump out current number of lines + mlog << Debug(4) + << "[File " << i + 1 << " of " << files.n() + << "] Used " << cur_add << " of " << cur_read + << " lines read from file \n\"" << files[i] << "\"\n"; + + // Close current file + f.close(); + + } // End loop over files + + // Check for no matching tracks + if(tracks.n() == 0) { + mlog << Error << "\nprocess_track_files() -> " + << "no tracks retained! Adjust the config file " + << "filtering options to select a single track.\n\n"; + exit(1); + } + + return; +} + +//////////////////////////////////////////////////////////////////////// +// +// Check if the ATCFLineBase should be kept +// +//////////////////////////////////////////////////////////////////////// + +bool is_keeper(const ATCFLineBase * line) { + bool keep = true; + ConcatString cs; + + // Check model + if(conf_info.model.n() > 0 && + !conf_info.model.has(line->technique())) { + cs << "model " << line->technique() << " not in " << write_css(conf_info.model); + keep = false; + } + + // Check storm id + else if(conf_info.storm_id.nonempty() && + conf_info.storm_id != line->storm_id()) { + cs << "storm_id " << line->storm_id() << " != " << conf_info.storm_id; + keep = false; + } + + // Check basin + else if(conf_info.basin.nonempty() && + conf_info.basin != line->basin()) { + cs << "basin " << line->basin() << " != " << conf_info.basin; + keep = false; + } + + // Check cyclone + else if(conf_info.cyclone.nonempty() && + conf_info.cyclone != line->cyclone_number()) { + cs << "cyclone " << line->cyclone_number() << " != " << conf_info.cyclone; + keep = false; + } + + // Check initialization time + else if(conf_info.init_inc != (unixtime) 0 && + conf_info.init_inc != line->warning_time()) { + cs << "init_inc " << unix_to_yyyymmddhh(line->warning_time()) + << " != " << unix_to_yyyymmddhh(conf_info.init_inc); + keep = false; + } + + // Check valid time + else if((conf_info.valid_beg > 0 && + conf_info.valid_beg > line->valid()) || + (conf_info.valid_end > 0 && + conf_info.valid_end < line->valid()) || + (conf_info.valid_inc.n() > 0 && + !conf_info.valid_inc.has(line->valid())) || + (conf_info.valid_exc.n() > 0 && + conf_info.valid_exc.has(line->valid()))) { + cs << "valid_time " << unix_to_yyyymmddhh(line->valid()); + keep = false; + } + + // Check valid hour + else if(conf_info.valid_hour.n() > 0 && + !conf_info.valid_hour.has(line->valid_hour())) { + cs << "valid_hour " << line->valid_hour(); + keep = false; + } + + // Check lead time + else if(conf_info.lead_time.n() > 0 && + !conf_info.lead_time.has(line->lead())){ + cs << "lead_time " << sec_to_hhmmss(line->lead()); + keep = false; + } + + if(!keep) { + mlog << Debug(4) << "Skipping track line for " << cs << ":\n" + << line->get_line() << "\n"; + } + + // Return the keep status + return(keep); +} + +//////////////////////////////////////////////////////////////////////// + +void set_deck(const StringArray& a) { + set_atcf_source(a, deck_source, deck_model_suffix); +} + +//////////////////////////////////////////////////////////////////////// + +void set_atcf_source(const StringArray& a, + StringArray& source, + StringArray& model_suffix) { + StringArray sa; + ConcatString cs, suffix; + + // Check for optional suffix sub-argument + for(int i = 0; i < a.n(); i++) { + if(a[i] == "suffix") { + cs = a[i]; + sa = cs.split("="); + if(sa.n() != 2) { + mlog << Error << "\nset_atcf_source() -> " + << "the model suffix must be specified as " + << "\"suffix=string\".\n\n"; + } + else { + suffix = sa[1]; + } + } + } + + // Parse remaining sources + for(int i = 0; i < a.n(); i++) { + if( a[i] == "suffix" ) continue; + source.add(a[i]); + model_suffix.add(suffix); + } + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void set_data(const StringArray& a) { + + // Check for enough arguments + // e.g. -data parent GFSO,AEMN gfs_file_list + if(a.n() < 3) { + mlog << Error << "\nset_data() -> " + << "each \"-data\" command line option must specify a domain name, " + << "a comma-separated list of ATCF tech ID's, and the corresponding " + << "gridded data files.\n\n"; + usage(); + } + + // Store current -data options + DataOptInfo info; + + // First argument is the domain name + string domain = a[0]; + + // Second argument is a comma-separated list of tech ID's + info.tech_ids.parse_css(a[1]); + + // Remaining arguments are gridded data files or file lists + StringArray sa; + for(int i=2; i 0) { + mlog << Error << "\nsetup_out_files()-> " + << "found multiple tracks for key \"" + << key << "\"!\n\n"; + exit(1); + } + + // Add new map entry + out_file_map[key] = out_info; + + mlog << Debug(3) << "Preparing output files for " + << key << " track.\n"; + + // Store the track + out_file_map[key].trk_ptr = &tracks[i]; + + // NetCDF diagnostics output + if(conf_info.nc_diag_flag) { + out_file_map[key].nc_diag_file = + build_out_file_name(out_file_map[key].trk_ptr, "_diag.nc"); + out_file_map[key].nc_diag_out = + out_file_map[key].setup_nc_file(out_file_map[key].nc_diag_file); + } + + // CIRA diagnostics output + if(conf_info.cira_diag_flag) { + out_file_map[key].cira_diag_file = + build_out_file_name(out_file_map[key].trk_ptr, "_diag.txt"); + out_file_map[key].cira_diag_out = new ofstream; + out_file_map[key].cira_diag_out->open(out_file_map[key].cira_diag_file); + + if(!(*out_file_map[key].cira_diag_out)) { + mlog << Error << "\nsetup_out_files()-> " + << "can't open the output file \"" + << out_file_map[key].cira_diag_file + << "\" for writing!\n\n"; + exit(1); + } + + // Fixed width + out_file_map[key].cira_diag_out->setf(ios::fixed); + } + } // end for i + + return; +} + +//////////////////////////////////////////////////////////////////////// + +ConcatString get_out_key(const TrackInfo &track) { + ConcatString cs; + + cs << track.storm_id() << "_" + << track.technique() << "_" + << unix_to_yyyymmddhh(track.init()); + + return(cs); +} + +//////////////////////////////////////////////////////////////////////// + +ConcatString get_tmp_key(const TrackInfo &track, + const TrackPoint &point, + const string &domain) { + ConcatString cs; + + cs << track.storm_id() << "_" + << track.technique() << "_" + << unix_to_yyyymmddhh(track.init()) << "_f" + << point.lead() /sec_per_hour << "_" + << domain; + + return(cs); +} + +//////////////////////////////////////////////////////////////////////// + +ConcatString build_tmp_file_name(const TrackInfo *trk_ptr, + const TrackPoint *pnt_ptr, + const string &domain) { + ConcatString cs; + + // Build the temp file name with the program name, + // track/timing information, and domain name + + cs << conf_info.tmp_dir + << "/tmp_" << program_name << "_" + << get_tmp_key(*trk_ptr, *pnt_ptr, domain); + + return(make_temp_file_name(cs.text(), ".nc")); +} + +//////////////////////////////////////////////////////////////////////// + +ConcatString build_out_file_name(const TrackInfo *trk_ptr, + const char *suffix) { + ConcatString cs; + + // Build the output file name + cs << out_dir << "/" << program_name; + + // Append the output prefix, if defined + if(conf_info.output_prefix.nonempty()) { + cs << "_" << conf_info.output_prefix; + } + + // Append the track information + cs << "_" << get_out_key(*trk_ptr); + + // Append the suffix + cs << suffix; + + return(cs); +} + +//////////////////////////////////////////////////////////////////////// + +void write_tc_storm(NcFile *nc_out, const char *storm_id, + const char *model, const char *domain) { + + // Add the storm id + if(storm_id) { + NcVar sid_var = nc_out->addVar("storm_id", ncString); + sid_var.putVar(&storm_id); + } + + // Add the model + if(model) { + NcVar mdl_var = nc_out->addVar("model", ncString); + mdl_var.putVar(&model); + } + + // Add the domain name + if(domain) { + NcVar dmn_var = nc_out->addVar("domain", ncString); + dmn_var.putVar(&domain); + } + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void write_tc_times(NcFile *nc_out, const NcDim &vld_dim, + const TrackInfo *trk_ptr, + const TrackPoint *pnt_ptr) { + + // Check pointer + if(!trk_ptr) { + mlog << Error << "\nwrite_tc_times() -> " + << "null track pointer!\n\n"; + exit(1); + } + + NcVar init_str_var, init_ut_var; + NcVar vld_str_var, vld_ut_var; + NcVar lead_str_var, lead_sec_var; + + // Define and write the track initialization time + def_tc_init_time(nc_out, init_str_var, init_ut_var); + write_tc_init_time(nc_out, init_str_var, init_ut_var, + trk_ptr->init()); + + // Define valid and lead times + def_tc_valid_time(nc_out, vld_dim, vld_str_var, vld_ut_var); + def_tc_lead_time(nc_out, vld_dim, lead_str_var, lead_sec_var); + + // Write valid and lead times for a single point + if(pnt_ptr) { + write_tc_valid_time(nc_out, 0, vld_str_var, vld_ut_var, + pnt_ptr->valid()); + write_tc_lead_time(nc_out, 0, lead_str_var, lead_sec_var, + pnt_ptr->lead()); + } + // Write valid and lead times for all track points + else { + for(int i_pnt=0; i_pntn_points(); i_pnt++) { + write_tc_valid_time(nc_out, i_pnt, vld_str_var, vld_ut_var, + (*trk_ptr)[i_pnt].valid()); + write_tc_lead_time(nc_out, i_pnt, lead_str_var, lead_sec_var, + (*trk_ptr)[i_pnt].lead()); + } + } + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void compute_lat_lon(TcrmwGrid& grid, + double *lat_arr, double *lon_arr) { + + // Compute lat and lon coordinate arrays + for(int ir=0; ir::iterator dom_it; + + // Build list of unique valid times + TimeArray valid_ta; + for(i=0,n_pts=0; i 0) { + mlog << Error << "\nprocess_track_points()-> " + << "found multiple temp file entries for key \"" + << tmp_key << "\"!\n\n"; + exit(1); + } + + // Add new map entry + tmp_file_map[tmp_key] = tmp_info; + + // Setup a temp file for the current point + tmp_file_map[tmp_key].open(&tracks[k], + &tracks[k][i_pnt], + conf_info.domain_info[j], + conf_info.pressure_levels); + + } // end for k + } // end for j + } // end for i + +// TODO: Work on this parallel code + +//#pragma omp parallel default(none) \ +// shared(mlog, conf_info, tracks, valid_ta) \ +// private(i, dom_it) +// { + + // Parallel: Loop over the unique valid times +//#pragma omp for schedule (static) +//#pragma omp parallel for + for(i=0; iset_valid(vld_ut); + + // Find data for this track point + get_series_entry(i_vld, vi, + di.data_files, file_type, + data_dp, grid_dp); + + // Do coordinate transformation for each track point + for(j=0; j domain_tmp_file_list; + + // Loop over tracks + for(int i_trk=0; i_trk " + << "no output file map entry found for key \"" + << out_key << "\"!\n\n"; + exit(1); + } + + // Loop over domains + for(int i_dom=0; i_dom " + << "no temporary file map entry found for key \"" + << tmp_key << "\"!\n\n"; + exit(1); + } + + // Update list of domain-specific temp files + domain_tmp_file_list.push_back(&tmp_file_map[tmp_key]); + + // Store the diagnostics for each track point + out_file_map[out_key].add_diag_map(tmp_file_map[tmp_key].diag_map, i_pnt); + + } // end for i_pnt + + // Write NetCDF range-azimuth output + if(conf_info.nc_rng_azi_flag) { + merge_tmp_files(domain_tmp_file_list); + } + + } // end for i_dom + + // Write NetCDF diagnostics output + if(conf_info.nc_diag_flag) { + out_file_map[out_key].write_nc_diag(); + } + + // Finish the output for this track + out_file_map[out_key].clear(); + + } // end for i_trk + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void merge_tmp_files(const vector tmp_files) { + NcFile *nc_out = (NcFile *) 0; + + // Loop over temp files + for(int i_tmp=0; i_tmpdomain << ".nc"; + file_name = build_out_file_name( + tmp_files[i_tmp]->trk_ptr, + suffix_cs.c_str()); + + mlog << Debug(1) << "Writing output file: " + << file_name << "\n"; + + nc_out = open_ncfile(file_name.c_str(), true); + + if(IS_INVALID_NC_P(nc_out)) { + mlog << Error << "\nmerge_tmp_files() -> " + << "trouble opening output NetCDF file " + << file_name << "\n\n"; + exit(1); + } + + // Add global attributes + write_netcdf_global(nc_out, file_name.c_str(), program_name); + + // Write track info + write_tc_storm(nc_out, + tmp_files[i_tmp]->trk_ptr->storm_id().c_str(), + tmp_files[i_tmp]->trk_ptr->technique().c_str(), + nullptr); + + // Write the track lines + write_tc_track_lines(nc_out, + *(tmp_files[i_tmp]->trk_ptr)); + + // Define the time dimension + NcDim vld_dim = add_dim(nc_out, "time", + tmp_files[i_tmp]->trk_ptr->n_points()); + + // Write timing info for the entire track + write_tc_times(nc_out, vld_dim, + tmp_files[i_tmp]->trk_ptr, nullptr); + + // Copy coordinate variables + copy_coord_vars(nc_out, tmp_files[i_tmp]->tmp_out); + + } // end if !nc_out + + // Copy time variables + copy_time_vars(nc_out, tmp_files[i_tmp]->tmp_out, i_tmp); + + } // end for i_tmp + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void copy_coord_vars(NcFile *to_nc, NcFile *from_nc) { + + // Get the input variable names + StringArray var_names; + get_var_names(from_nc, &var_names); + + // Loop over the variables + for(int i=0; i dims; + for(j=0; jaddVar(var_names[i], ncDouble, dims); + copy_nc_atts(&from_var, &new_var); + } + + // Write data for the current time + NcVar to_var = get_var(to_nc, var_names[i].c_str()); + + vector offsets; + vector counts; + + int buf_size = 1; + + for(j=0; jclose(); + delete nc_diag_out; + nc_diag_out = (NcFile *) 0; + } + nc_diag_file.clear(); + + // Write CIRA diagnostics file + if(cira_diag_out) { + + mlog << Debug(1) << "Writing output file: " + << cira_diag_file << "\n"; + + // Write the output + *cira_diag_out << cira_diag_at; + + // Close the output file + cira_diag_out->close(); + delete cira_diag_out; + cira_diag_out = (ofstream *) 0; + } + cira_diag_file.clear(); + cira_diag_at.clear(); + + return; +} + +//////////////////////////////////////////////////////////////////////// + +NcFile *OutFileInfo::setup_nc_file(const string &out_file) { + + if(!trk_ptr) return(nullptr); + + // Open the output NetCDF file + NcFile *nc_out = open_ncfile(out_file.c_str(), true); + + if(IS_INVALID_NC_P(nc_out)) { + mlog << Error << "\nOutFileInfo::setup_nc_file() -> " + << "trouble opening output NetCDF file " + << out_file << "\n\n"; + exit(1); + } + + // Add global attributes + write_netcdf_global(nc_out, out_file.c_str(), program_name); + + // Define dimension + vld_dim = add_dim(nc_out, "time", + trk_ptr->n_points()); + + // Write track info + write_tc_storm(nc_out, + trk_ptr->storm_id().c_str(), + trk_ptr->technique().c_str(), + nullptr); + + // Write timing info for the entire track + write_tc_times(nc_out, vld_dim, + trk_ptr, nullptr); + + return(nc_out); +} + +//////////////////////////////////////////////////////////////////////// + +void OutFileInfo::add_diag_map(const map &tmp_diag_map, + int i_pnt) { + + // Track pointer must be set + if(!trk_ptr) { + mlog << Error << "\nOutFileInfo::add_diag_map() -> " + << "track pointer not set!\n\n"; + exit(1); + } + + // Check the range + if(i_pnt < 0 || i_pnt >= trk_ptr->n_points()) { + mlog << Error << "\nOutFileInfo::add_diag_map() -> " + << "track point index (" << i_pnt + << ") range check error!\n\n"; + exit(1); + } + + // Loop over the input diagnostics map + map::const_iterator it; + for(it = tmp_diag_map.begin(); it != tmp_diag_map.end(); it++) { + + // Add new diagnostics array entry, if needed + if(diag_map.count(it->first) == 0) { + NumArray empty_na; + empty_na.set_const(bad_data_double, + trk_ptr->n_points()); + diag_map[it->first] = empty_na; + } + + // Store the diagnostic value for the track point + diag_map[it->first].set(i_pnt, it->second); + } + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void OutFileInfo::write_nc_diag() { + + // Setup dimensions + vector dims; + dims.push_back(vld_dim); + + vector offsets; + offsets.push_back(0); + + vector counts; + counts.push_back(get_dim_size(&vld_dim)); + + // Write the diagnostics for each lead time + map::iterator it; + for(it = diag_map.begin(); it != diag_map.end(); it++) { + NcVar diag_var = nc_diag_out->addVar(it->first, ncDouble, dims); + add_att(&diag_var, fill_value_att_name, bad_data_double); + diag_var.putVar(offsets, counts, it->second.buf()); + } + + return; +} + +//////////////////////////////////////////////////////////////////////// +// +// Code for class TmpFileInfo +// +//////////////////////////////////////////////////////////////////////// + +TmpFileInfo::TmpFileInfo() { + init_from_scratch(); +} + +//////////////////////////////////////////////////////////////////////// + +TmpFileInfo::~TmpFileInfo() { + clear(); +} + +//////////////////////////////////////////////////////////////////////// + +void TmpFileInfo::init_from_scratch() { + + // Initialize pointers + trk_ptr = (TrackInfo *) 0; + pnt_ptr = (TrackPoint *) 0; + tmp_out = (NcFile *) 0; + + clear(); + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void TmpFileInfo::open(const TrackInfo *t_ptr, + const TrackPoint *p_ptr, + const DomainInfo &di, + const set &prs_lev) { + + // Set pointers + trk_ptr = t_ptr; + pnt_ptr = p_ptr; + domain = di.domain; + + // Open the temp file + tmp_file = build_tmp_file_name(trk_ptr, pnt_ptr, domain); + + mlog << Debug(3) << "Creating temp file: " << tmp_file << "\n"; + + setup_nc_file(di, prs_lev); + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void TmpFileInfo::close() { + + // Write NetCDF temp file + if(tmp_out) { + + mlog << Debug(3) << "Writing temp file: " + << tmp_file << "\n"; + + delete tmp_out; + tmp_out = (NcFile *) 0; + } + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void TmpFileInfo::clear() { + + trk_ptr = (TrackInfo *) 0; + pnt_ptr = (TrackPoint *) 0; + + diag_map.clear(); + + grid_out.clear(); + ra_grid.clear(); + + pressure_levels.clear(); + + domain.clear(); + + // Delete the temp file + if(tmp_out) { + + remove_temp_file(tmp_file); + + tmp_out = (NcFile *) 0; + } + tmp_file.clear(); + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void TmpFileInfo::setup_nc_file(const DomainInfo &di, + const set &prs_lev) { + + // Open the output NetCDF file + tmp_out = open_ncfile(tmp_file.c_str(), true); + + if(IS_INVALID_NC_P(tmp_out)) { + mlog << Error << "\nTmpFileInfo::setup_nc_file() -> " + << "trouble opening output NetCDF file " + << tmp_file << "\n\n"; + exit(1); + } + + // Add global attributes + write_netcdf_global(tmp_out, tmp_file.c_str(), program_name); + + // Define latitude and longitude arrays + TcrmwData d = di.data; + int nra = d.range_n * d.azimuth_n; + double *lat_arr = new double[nra]; + double *lon_arr = new double[nra]; + + // Set grid center + d.lat_center = pnt_ptr->lat(); + d.lon_center = -1.0*pnt_ptr->lon(); // degrees east to west + d.range_max_km = di.delta_range_km * d.range_n; + + // Instantiate the grid + grid_out.set(d); + ra_grid.set_from_data(d); + + mlog << Debug(3) + << "Defining cylindrical coordinates for (Lat, Lon) = (" + << pnt_ptr->lat() << ", " << pnt_ptr->lon() << "), Range = " + << ra_grid.range_n() << " every " << ra_grid.range_delta_km() + << ra_grid.range_n() << " every " << ra_grid.range_delta_km() + << "km, Azimuth = " << ra_grid.azimuth_n() << "\n"; + + // Write track info + write_tc_storm(tmp_out, + trk_ptr->storm_id().c_str(), + trk_ptr->technique().c_str(), + di.domain.c_str()); + + // Write the track lines + write_tc_track_lines(tmp_out, *trk_ptr); + + // Define dimensions + trk_dim = add_dim(tmp_out, "track_point", + trk_ptr->n_points()); + vld_dim = add_dim(tmp_out, "time", 1); + rng_dim = add_dim(tmp_out, "range", + (long) ra_grid.range_n()); + azi_dim = add_dim(tmp_out, "azimuth", + (long) ra_grid.azimuth_n()); + + // Write the track locations + write_tc_track_lat_lon(tmp_out, trk_dim, *trk_ptr); + + // Write timing info for this TrackPoint + write_tc_times(tmp_out, vld_dim, trk_ptr, pnt_ptr); + + // Define range and azimuth coordinate variables + def_tc_range_azimuth(tmp_out, + rng_dim, azi_dim, + ra_grid, bad_data_double); + + // Pressure dimension and values (same for all temp files) + pressure_levels = prs_lev; + if(pressure_levels.size() > 0) { + prs_dim = add_dim(tmp_out, "pressure", + (long) pressure_levels.size()); + def_tc_pressure(tmp_out, prs_dim, pressure_levels); + } + + // Define latitude and longitude + NcVar lat_var, lon_var; + def_tc_lat_lon(tmp_out, vld_dim, rng_dim, azi_dim, + lat_var, lon_var); + + // Compute lat and lon coordinate arrays + compute_lat_lon(ra_grid, lat_arr, lon_arr); + + // Write coordinate arrays + write_tc_data(tmp_out, ra_grid, 0, lat_var, lat_arr); + write_tc_data(tmp_out, ra_grid, 0, lon_var, lon_arr); + + // Write track point values + write_tc_track_point(tmp_out, vld_dim, *pnt_ptr); + + // Clean up + if(lat_arr) { delete[] lat_arr; lat_arr = (double *) 0; } + if(lon_arr) { delete[] lon_arr; lon_arr = (double *) 0; } + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void TmpFileInfo::write_nc_data(const VarInfo *vi, const DataPlane &dp_in, + const Grid &grid_in) { + DataPlane dp_out; + RegridInfo ri; + + // Use default regridding options + ri.method = InterpMthd_Nearest; + ri.width = 1; + ri.vld_thresh = 1.0; + ri.shape = GridTemplateFactory::GridTemplate_Square; + + // Do the cylindrical coordinate transformation + dp_out = met_regrid(dp_in, grid_in, grid_out, ri); + + // Logic for pressure level data + bool is_prs = (vi->level().type() == LevelType_Pres); + + // Setup dimensions + vector dims; + dims.push_back(vld_dim); + if(is_prs) dims.push_back(prs_dim); + dims.push_back(rng_dim); + dims.push_back(azi_dim); + + // Create the output variable name + ConcatString var_name; + var_name << vi->name_attr(); + if(!is_prs) { + var_name << "_" << vi->level_attr(); + } + + // Add new variable, if needed + if(!has_var(tmp_out, var_name.c_str())) { + NcVar new_var = tmp_out->addVar(var_name, ncDouble, dims); + add_att(&new_var, long_name_att_name, vi->long_name_attr()); + add_att(&new_var, units_att_name, vi->units_attr()); + add_att(&new_var, fill_value_att_name, bad_data_double); + } + + // Get the current variable + NcVar cur_var = get_var(tmp_out, var_name.c_str()); + + // Write pressure level data + if(is_prs) { + + // Find pressure level index + int i_level = pressure_levels.size() - 1; + for(set::iterator it = pressure_levels.begin(); + it != pressure_levels.end(); ++it, --i_level) { + if(is_eq(vi->level().lower(), *it)) break; + } + + write_tc_pressure_level_data(tmp_out, ra_grid, + 0, i_level, cur_var, dp_out.data()); + } + // Write single level data + else { + write_tc_data_rev(tmp_out, ra_grid, + 0, cur_var, dp_out.data()); + } + + return; +} + +//////////////////////////////////////////////////////////////////////// diff --git a/src/tools/tc_utils/tc_diag/tc_diag.h b/src/tools/tc_utils/tc_diag/tc_diag.h new file mode 100644 index 0000000000..2c79d5f8b2 --- /dev/null +++ b/src/tools/tc_utils/tc_diag/tc_diag.h @@ -0,0 +1,201 @@ +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* +// ** Copyright UCAR (c) 1992 - 2023 +// ** University Corporation for Atmospheric Research (UCAR) +// ** National Center for Atmospheric Research (NCAR) +// ** Research Applications Lab (RAL) +// ** P.O.Box 3000, Boulder, Colorado, 80307-3000, USA +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* + +//////////////////////////////////////////////////////////////////////// +// +// Filename: tc_diag.h +// +// Description: +// +// Mod# Date Name Description +// ---- ---- ---- ----------- +// 000 09/27/22 Halley Gotway New +// +//////////////////////////////////////////////////////////////////////// + +#ifndef __TC_DIAG_H__ +#define __TC_DIAG_H__ + +//////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "tc_diag_conf_info.h" + +#include "vx_data2d_factory.h" +#include "vx_tc_util.h" +#include "vx_grid.h" +#include "vx_util.h" + +//////////////////////////////////////////////////////////////////////// +// +// Constants +// +//////////////////////////////////////////////////////////////////////// + +// Program name +static const char* program_name = "tc_diag"; + +// ATCF file suffix +static const char* atcf_suffix = ".dat"; + +// Default configuration file name +static const char* default_config_filename = + "MET_BASE/config/TCDiagConfig_default"; + +// Default output directory +static const char* default_out_dir = "."; + +// Default output prefix +static const char* default_out_prefix = ""; + +//////////////////////////////////////////////////////////////////////// +// +// Variables for Command Line Arguments +// +//////////////////////////////////////////////////////////////////////// + +// Input files +static std::map data_opt_map; +static StringArray deck_source, deck_model_suffix; +static ConcatString config_file; +static TCDiagConfInfo conf_info; +static GrdFileType file_type = FileType_None; + +// Optional arguments +static ConcatString out_dir; +static ConcatString out_prefix; + +//////////////////////////////////////////////////////////////////////// +// +// Variables for Output Files +// +//////////////////////////////////////////////////////////////////////// + +class OutFileInfo { + + private: + + void init_from_scratch(); + + public: + + OutFileInfo(); + ~OutFileInfo(); + + ////////////////////////////////////////////////////////////////// + + // Track information + const TrackInfo *trk_ptr; // not allocated + + // Mapping of diagnostic names to values for each track point + std::map diag_map; + + // NetCDF Diagnostics output + ConcatString nc_diag_file; + netCDF::NcFile *nc_diag_out; + + // NetCDF Dimensions + netCDF::NcDim vld_dim; + + // CIRA Diagnostics output + ConcatString cira_diag_file; + std::ofstream *cira_diag_out; + AsciiTable cira_diag_at; + + void clear(); + + netCDF::NcFile *setup_nc_file(const string &); + void add_diag_map(const std::map &, int); + void write_nc_diag(); +}; + +static std::map out_file_map; + +//////////////////////////////////////////////////////////////////////// +// +// Variables for Temp Files +// +//////////////////////////////////////////////////////////////////////// + +class TmpFileInfo { + + private: + + void init_from_scratch(); + + public: + + TmpFileInfo(); + ~TmpFileInfo(); + + ////////////////////////////////////////////////////////////////// + + // Track information + const TrackInfo *trk_ptr; // not allocated + const TrackPoint *pnt_ptr; // not allocated + + // Mapping of diagnostic names to values + std::map diag_map; + + // Range azimuth grid + Grid grid_out; + TcrmwGrid ra_grid; + + // Pressure levels + std::set pressure_levels; + + // Domain name + std::string domain; + + // NetCDF Cylindrical Coordinates output + ConcatString tmp_file; + netCDF::NcFile *tmp_out; + + // NetCDF Dimensions + netCDF::NcDim trk_dim; + netCDF::NcDim vld_dim; + netCDF::NcDim rng_dim; + netCDF::NcDim azi_dim; + netCDF::NcDim prs_dim; + + void open(const TrackInfo *, const TrackPoint *, + const DomainInfo &, + const std::set &); + void close(); + + void clear(); + + void setup_nc_file(const DomainInfo &, + const std::set &); + + void write_nc_data(const VarInfo *, const DataPlane &, + const Grid &); +}; + +static std::map tmp_file_map; + +//////////////////////////////////////////////////////////////////////// + +#endif // __TC_DIAG_H__ + +//////////////////////////////////////////////////////////////////////// diff --git a/src/tools/tc_utils/tc_diag/tc_diag_conf_info.cc b/src/tools/tc_utils/tc_diag/tc_diag_conf_info.cc new file mode 100644 index 0000000000..62c8f374c8 --- /dev/null +++ b/src/tools/tc_utils/tc_diag/tc_diag_conf_info.cc @@ -0,0 +1,452 @@ +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* +// ** Copyright UCAR (c) 1992 - 2023 +// ** University Corporation for Atmospheric Research (UCAR) +// ** National Center for Atmospheric Research (NCAR) +// ** Research Applications Lab (RAL) +// ** P.O.Box 3000, Boulder, Colorado, 80307-3000, USA +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* + +//////////////////////////////////////////////////////////////////////// + +using namespace std; + +#include +#include +#include +#include +#include +#include +#include + +#include "tc_diag_conf_info.h" + +#include "vx_log.h" + +//////////////////////////////////////////////////////////////////////// +// +// Code for struct DataOptInfo +// +//////////////////////////////////////////////////////////////////////// + +void DataOptInfo::clear() { + + tech_ids.clear(); + data_files.clear(); + + return; +} + +//////////////////////////////////////////////////////////////////////// + +DataOptInfo & DataOptInfo::operator+=(const DataOptInfo &info) { + + tech_ids.add(info.tech_ids); + data_files.add(info.data_files); + + return(*this); +} + +//////////////////////////////////////////////////////////////////////// +// +// Code for class DomainInfo +// +//////////////////////////////////////////////////////////////////////// + +DomainInfo::DomainInfo() { + + init_from_scratch(); +} + +//////////////////////////////////////////////////////////////////////// + +DomainInfo::~DomainInfo() { + + clear(); +} + +//////////////////////////////////////////////////////////////////////// + +void DomainInfo::init_from_scratch() { + + clear(); + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void DomainInfo::clear() { + + tech_ids.clear(); + data_files.clear(); + domain.clear(); + + data.name = (const char *) 0; + data.range_n = bad_data_int; + data.azimuth_n = bad_data_int; + data.range_max_km = bad_data_double; + data.lat_center = bad_data_double; + data.lon_center = bad_data_double; + + delta_range_km = bad_data_double; + + var_info_ptr.clear(); + diag_script.clear(); + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void DomainInfo::parse_domain_info(Dictionary &dict) { + + // Initialize + clear(); + + // Note: tech_ids and data_files are specified on the + // command line rather than in the config file + + // Conf: domain + domain = dict.lookup_string(conf_key_domain); + + // Hard-code the name + data.name = "TCDIAG"; + + // Conf: n_range + data.range_n = dict.lookup_int(conf_key_n_range); + + // Conf: azimuth_n + data.azimuth_n = dict.lookup_int(conf_key_n_azimuth); + + // Conf: delta_range + delta_range_km = dict.lookup_double(conf_key_delta_range); + + // Conf: diag_script + diag_script = dict.lookup_string_array(conf_key_diag_script); + + // Expand MET_BASE + for(int i=0; i dmap) { + int i, j; + StringArray sa; + Dictionary *dict = (Dictionary *) 0; + VarInfoFactory vi_factory; + + // Conf: version + check_met_version(conf.lookup_string(conf_key_version).c_str()); + + // Conf: model + model = conf.lookup_string_array(conf_key_model); + + // Conf: storm_id + storm_id = conf.lookup_string(conf_key_storm_id); + + // Conf: basin + basin = conf.lookup_string(conf_key_basin); + + // Conf: cyclone + cyclone = conf.lookup_string(conf_key_cyclone); + + // Conf: init_inc + init_inc = conf.lookup_unixtime(conf_key_init_inc); + + // Conf: valid_beg, valid_end + valid_beg = conf.lookup_unixtime(conf_key_valid_beg); + valid_end = conf.lookup_unixtime(conf_key_valid_end); + + // Conf: valid_inc + sa = conf.lookup_string_array(conf_key_valid_inc); + for(i=0; i " + << "the \"" << conf_key_data_field + << "\" config file entry cannot be empty!\n\n"; + exit(1); + } + + // Process each field + for(i=0; iset_dict(i_dict); + var_info.push_back(vi); + + // Unique list of requested pressure levels + if(vi->level().type() == LevelType_Pres) { + if(vi->level().lower() != vi->level().upper()) { + mlog << Error << "\nTCDiagConfInfo::process_config() -> " + << "only individual pressure levels are supported, " + << "not ranges (" << vi->level().req_name() + << ").\n\n"; + exit(1); + } + pressure_levels.insert(vi->level().lower()); + } + + // Conf: field.domain + sa = i_dict.lookup_string_array(conf_key_domain); + + // Store domain-specific VarInfo pointers + for(j=0; j " + << "the \"" << conf_key_nc_diag_flag << "\" and \"" + << conf_key_cira_diag_flag + << "\" config entries cannot both be false.\n\n"; + exit(1); + } + */ + + // TODO: Remove this check for MET version 12.0.0 + if(nc_diag_flag || cira_diag_flag) { + mlog << Warning << "\nResetting the \"" + << conf_key_nc_diag_flag << "\" and \"" << conf_key_cira_diag_flag + << "\" configuration options to false since they are not supported" + << " for MET " << met_version << ".\n" + << "Additional outputs will be added in future MET versions.\n\n"; + nc_diag_flag = cira_diag_flag = false; + } + + // Conf: tmp_dir + tmp_dir = parse_conf_tmp_dir(&conf); + + // Conf: output_prefix + output_prefix = conf.lookup_string(conf_key_output_prefix); + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void TCDiagConfInfo::parse_domain_info(map dmap) { + Dictionary *dict = (Dictionary *) 0; + int i, j; + bool found; + + // Conf: domain_info + dict = conf.lookup_array(conf_key_domain_info); + + if(!dict) { + mlog << Error << "\nTCDiagConfInfo::parse_domain_info() -> " + << "array lookup failed for key \"" << conf_key_domain_info + << "\"\n\n"; + exit(1); + } + + // Parse each grid info object + for(i=0; in_entries(); i++) { + DomainInfo di; + + // Parse the current domain info + di.parse_domain_info(*((*dict)[i]->dict_value())); + + // Store the domain-specifc data files + if(dmap.count(di.domain) > 0) { + di.tech_ids = dmap[di.domain].tech_ids; + di.data_files = dmap[di.domain].data_files; + } + else { + mlog << Error << "\nTCDiagConfInfo::parse_domain_info() -> " + << "no \"-data " << di.domain << "\" command line option provided for the \"" + << conf_key_domain_info << "." << conf_key_domain << "\" = \"" << di.domain + << "\" config file entry!\n\n"; + exit(1); + } + + // Check for duplicate entries + for(j=0; i " + << "multiple \"" << conf_key_domain_info + << "\" entries found for domain \"" << di.domain << "\"!\n\n"; + exit(1); + } + } + + // Store new entry + domain_info.push_back(di); + } + + // Make sure all -data domains appear in the config file + map::iterator it; + for(it = dmap.begin(); it != dmap.end(); it++) { + + for(i=0, found=false; ifirst == domain_info[i].domain) { + found = true; + break; + } + } // end for i + + if(!found) { + mlog << Error << "\nTCDiagConfInfo::parse_domain_info() -> " + << "no \"" << conf_key_domain_info << "." << conf_key_domain << "\" = \"" + << it->first << "\" config file entry provided for the \"-data " + << it->first << "\" command line option!\n\n"; + exit(1); + } + } + + return; +} + +//////////////////////////////////////////////////////////////////////// diff --git a/src/tools/tc_utils/tc_diag/tc_diag_conf_info.h b/src/tools/tc_utils/tc_diag/tc_diag_conf_info.h new file mode 100644 index 0000000000..3c2d0b5132 --- /dev/null +++ b/src/tools/tc_utils/tc_diag/tc_diag_conf_info.h @@ -0,0 +1,157 @@ +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* +// ** Copyright UCAR (c) 1992 - 2023 +// ** University Corporation for Atmospheric Research (UCAR) +// ** National Center for Atmospheric Research (NCAR) +// ** Research Applications Lab (RAL) +// ** P.O.Box 3000, Boulder, Colorado, 80307-3000, USA +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* + +//////////////////////////////////////////////////////////////////////// + +#ifndef __TC_DIAG_CONF_INFO_H__ +#define __TC_DIAG_CONF_INFO_H__ + +//////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +#include "vx_config.h" +#include "vx_data2d_factory.h" +#include "vx_data2d.h" +#include "vx_util.h" + +//////////////////////////////////////////////////////////////////////// + +// Struct for the -data command line options +struct DataOptInfo { + + StringArray tech_ids; // ATCF Tech ID(s) corresponding to this data source + StringArray data_files; // Gridded data file(s) + + void clear(); + + DataOptInfo & operator+=(const DataOptInfo &); +}; + +//////////////////////////////////////////////////////////////////////// + +class DomainInfo { + + private: + + void init_from_scratch(); + + public: + + DomainInfo(); + ~DomainInfo(); + + // ATCF Tech ID's + StringArray tech_ids; + + // Domain data files + StringArray data_files; + + // Domain name + string domain; + + // TcrmwData struct for creating a TcrmwGrid object + TcrmwData data; + double delta_range_km; + + // Vector of VarInfo pointers (not allocated) + std::vector var_info_ptr; + + // Diagnostic scripts to be run + StringArray diag_script; + + ////////////////////////////////////////////////////////////////// + + void clear(); + + void parse_domain_info(Dictionary &); + void set_data_files(const StringArray &); + + int get_n_data() const; +}; + +//////////////////////////////////////////////////////////////////////// + +inline int DomainInfo::get_n_data() const { return var_info_ptr.size(); } + +//////////////////////////////////////////////////////////////////////// + +class TCDiagConfInfo { + + private: + + void init_from_scratch(); + + public: + + TCDiagConfInfo(); + ~TCDiagConfInfo(); + + ////////////////////////////////////////////////////////////////// + + // TCDiag configuration object + MetConfig conf; + + // Track line filtering criteria + StringArray model; + ConcatString storm_id; + ConcatString basin; + ConcatString cyclone; + unixtime init_inc; + unixtime valid_beg, valid_end; + TimeArray valid_inc, valid_exc; + NumArray valid_hour; + NumArray lead_time; + + // Vector of VarInfo objects from data.field (allocated) + std::vector var_info; + + // Pressure level values from the config file + std::set pressure_levels; + + // Vector of DomainInfo + std::vector domain_info; + + // Vortext removal settings + bool vortex_removal_flag; + + // Directory for temporary files + ConcatString tmp_dir; + + // String to customize output file name + ConcatString output_prefix; + + // Output file options + bool nc_rng_azi_flag; + bool nc_diag_flag; + bool cira_diag_flag; + + ////////////////////////////////////////////////////////////////// + + void clear(); + + void read_config(const char *, const char *); + void process_config(GrdFileType, + std::map); + + void parse_domain_info(std::map); + + int get_n_domain() const; +}; + +//////////////////////////////////////////////////////////////////////// + +inline int TCDiagConfInfo::get_n_domain() const { return domain_info.size(); } + +//////////////////////////////////////////////////////////////////////// + +#endif /* __TC_DIAG_CONF_INFO_H__ */ + +//////////////////////////////////////////////////////////////////////// diff --git a/src/tools/tc_utils/tc_gen/tc_gen.cc b/src/tools/tc_utils/tc_gen/tc_gen.cc index a1d6e0a4a9..f666ebab7b 100644 --- a/src/tools/tc_utils/tc_gen/tc_gen.cc +++ b/src/tools/tc_utils/tc_gen/tc_gen.cc @@ -25,7 +25,7 @@ // 008 05/02/22 Halley Gotway MET #2148 Fix init_hour and lead misses // 009 07/06/22 Howard Soh METplus-Internal #19 Rename main to met_main // 010 09/28/22 Prestopnik MET #2227 Remove using namespace std and netCDF from header files -// +// 011 05/25/23 Halley Gotway MET #2552 Update parsing of gtwo probability lead times // //////////////////////////////////////////////////////////////////////// @@ -86,7 +86,8 @@ static void process_edecks (const StringArray &, const StringArray &, ProbInfoArray &); static void process_shapes (const StringArray &, - GenShapeInfoArray &); + GenShapeInfoArray &, + int &); static void get_genesis_pairs (const TCGenVxOpt &, const ConcatString &, @@ -516,7 +517,7 @@ void score_genesis_prob(const GenesisInfoArray &best_ga, //////////////////////////////////////////////////////////////////////// void score_genesis_shape(const GenesisInfoArray &best_ga) { - int i, j, total_probs; + int i, j, total_probs, max_n_prob; StringArray shape_files; GenShapeInfoArray shapes_all, shapes_subset; ProbGenPCTInfo probgen_pct; @@ -530,11 +531,11 @@ void score_genesis_shape(const GenesisInfoArray &best_ga) { << "Processing " << shape_files.n() << " shapefile(s) matching the \"" << gen_shp_reg_exp << "\" regular expression.\n"; - process_shapes(shape_files, shapes_all); + process_shapes(shape_files, shapes_all, max_n_prob); // Setup output files based on the maximum number of filters // and lead times possible - setup_txt_files(conf_info.n_vx(), max_n_shape_prob, 0); + setup_txt_files(conf_info.n_vx(), max_n_prob, 0); // Process each verification filter for(i=0; in_records; + // Get the subrecord names, ignoring case + rec_names = dbf_file.subrecord_names(); + rec_names.set_ignore_case(true); + // Check expected shape types const ShapeType shape_type = (ShapeType) (shp_file.header()->shape_type); if(shape_type != shape_type_polygon) { @@ -1650,7 +1658,7 @@ void process_shapes(const StringArray &files, // Check for end-of-file if(shp_file.at_eof()) { - mlog << Error << "\nrocess_shapes() -> " + mlog << Error << "\nprocess_shapes() -> " << "hit shp file EOF before reading all records!\n\n"; exit(1); } @@ -1658,32 +1666,37 @@ void process_shapes(const StringArray &files, // Read the current shape and metadata shp_file >> poly_rec; poly_rec.toggle_longitudes(); - sa = dbf_file.subrecord_values(j); + rec_values = dbf_file.subrecord_values(j); // Initialize GenShapeInfo gsi.clear(); gsi.set_time(file_ut); - gsi.set_basin(string_to_basin_abbr(sa[0]).c_str()); gsi.set_poly(poly_rec); - // Parse probabilities from the subrecord values - for(k=0; k " + << "the first field name (" << rec_names[0] + << ") is not \"BASIN\", as expected.\n\n"; + exit(1); + } + gsi.set_basin(string_to_basin_abbr(rec_values[0]).c_str()); + + // Parse probabilities from the subrecord names and values + for(k=0; k= max_n_shape_prob) { - mlog << Warning << "\nprocess_shapes() -> " - << "unexpected number of shapefile probabilities (" - << gsi.n_prob() << ") in record " << j+1 - << " of file \"" << dbf_file_name - << "\"!\n\n"; - continue; - } + // Parse the lead day from the field name + lead_day = stoi(rec_names[k].substr(4)); + + mlog << Debug(5) << "Parsed " << rec_values[0] << " basin " + << lead_day << " day " << rec_values[k] + << " genesis probability shape.\n"; // Store the probability info - gsi.add_prob(shape_prob_lead_hr[gsi.n_prob()]*sec_per_hour, - atoi(sa[k].c_str())/100.0); + gsi.add_prob(lead_day*sec_per_day, + atoi(rec_values[k].c_str())/100.0); } } // end for k @@ -1691,6 +1704,9 @@ void process_shapes(const StringArray &files, if(shapes.add(gsi, true)) { mlog << Debug(5) << "Add new " << gsi.serialize() << "\n"; total_probs += gsi.n_prob(); + if(gsi.n_prob() > max_n_prob) { + max_n_prob = gsi.n_prob(); + } } } // end for j diff --git a/src/tools/tc_utils/tc_gen/tc_gen.h b/src/tools/tc_utils/tc_gen/tc_gen.h index 745956ac0d..5f1c4cc80c 100644 --- a/src/tools/tc_utils/tc_gen/tc_gen.h +++ b/src/tools/tc_utils/tc_gen/tc_gen.h @@ -81,11 +81,7 @@ static const char *txt_file_abbr[n_txt] = { // Cyclone numbers > 50 are for testing or invests static const int max_best_cyclone_number = 50; -// 2, 5, and 7 days shapefile probabilities -static const int max_n_shape_prob = 3; -static const int shape_prob_lead_hr[max_n_shape_prob] = { - 48, 120, 168 -}; +// Maximum search time for genesis shapefile matches static const int shape_prob_search_sec = 168*sec_per_hour; //////////////////////////////////////////////////////////////////////// diff --git a/src/tools/tc_utils/tc_pairs/tc_pairs.cc b/src/tools/tc_utils/tc_pairs/tc_pairs.cc index df144e8172..03ff8616c0 100644 --- a/src/tools/tc_utils/tc_pairs/tc_pairs.cc +++ b/src/tools/tc_utils/tc_pairs/tc_pairs.cc @@ -37,6 +37,7 @@ // 013 09/28/22 Prestopnik MET #2227 Remove namespace std from header files // 014 10/06/22 Halley Gotway MET #392 Incorporate diagnostics // 015 02/20/23 Seth Linden MET #2429 Added option to prevent output of consensus track members +// 016 06/08/23 Halley Gotway MET #2532 Full circle winds are the mean of the non-zero quadrants // //////////////////////////////////////////////////////////////////////// diff --git a/src/tools/tc_utils/tc_rmw/tc_rmw.cc b/src/tools/tc_utils/tc_rmw/tc_rmw.cc index 4dd6a5f2dc..ffadd8277a 100644 --- a/src/tools/tc_utils/tc_rmw/tc_rmw.cc +++ b/src/tools/tc_utils/tc_rmw/tc_rmw.cc @@ -283,7 +283,9 @@ void process_tracks(TrackInfoArray& tracks) { process_track_files(files, files_model_suffix, tracks); - write_tc_tracks(nc_out, track_point_dim, tracks); + write_tc_track_lines (nc_out, tracks[0]); + write_tc_track_lat_lon(nc_out, track_point_dim, tracks[0]); + write_tc_rmw (nc_out, track_point_dim, tracks[0]); } //////////////////////////////////////////////////////////////////////// @@ -580,14 +582,22 @@ void setup_nc_file() { range_dim = add_dim(nc_out, "range", (long) tcrmw_grid.range_n()); azimuth_dim = add_dim(nc_out, "azimuth", (long) tcrmw_grid.azimuth_n()); + // Define init, lead, and valid time variables + def_tc_init_time(nc_out, + init_time_str_var, init_time_ut_var); + def_tc_valid_time(nc_out, track_point_dim, + valid_time_str_var, valid_time_ut_var); + def_tc_lead_time(nc_out, track_point_dim, + lead_time_str_var, lead_time_sec_var); + // Define range and azimuth dimensions def_tc_range_azimuth(nc_out, range_dim, azimuth_dim, tcrmw_grid, conf_info.rmw_scale); // Define latitude and longitude arrays - def_tc_time_lat_lon(nc_out, + def_tc_lat_lon(nc_out, track_point_dim, range_dim, azimuth_dim, - valid_time_var, lat_arr_var, lon_arr_var); + lat_arr_var, lon_arr_var); // Find all variable levels, long names, and units for(int i_var = 0; i_var < conf_info.get_n_data(); i_var++) { @@ -655,12 +665,16 @@ void process_fields(const TrackInfoArray& tracks) { mlog << Debug(2) << "Processing 1 track consisting of " << track.n_points() << " points.\n"; + // Write the track initialization time + write_tc_init_time(nc_out, + init_time_str_var, init_time_ut_var, + track.init()); + // Loop over track points for (int i_point = 0; i_point < track.n_points(); i_point++) { TrackPoint point = track[i_point]; unixtime valid_time = point.valid(); - long valid_yyyymmddhh = unix_to_long_yyyymmddhh(valid_time); mlog << Debug(3) << "[" << i_point+1 << " of " << track.n_points() << "] Processing track point valid at " @@ -687,9 +701,13 @@ void process_fields(const TrackInfoArray& tracks) { write_tc_data(nc_out, tcrmw_grid, i_point, lat_arr_var, lat_arr); write_tc_data(nc_out, tcrmw_grid, i_point, lon_arr_var, lon_arr); - // Write valid time + // Write valid and lead times write_tc_valid_time(nc_out, i_point, - valid_time_var, valid_yyyymmddhh); + valid_time_str_var, valid_time_ut_var, + valid_time); + write_tc_lead_time(nc_out, i_point, + lead_time_str_var, lead_time_sec_var, + point.lead()); for(int i_var = 0; i_var < conf_info.get_n_data(); i_var++) { diff --git a/src/tools/tc_utils/tc_rmw/tc_rmw.h b/src/tools/tc_utils/tc_rmw/tc_rmw.h index 125a6978cb..87e37b74be 100644 --- a/src/tools/tc_utils/tc_rmw/tc_rmw.h +++ b/src/tools/tc_utils/tc_rmw/tc_rmw.h @@ -102,9 +102,14 @@ static netCDF::NcDim range_dim; static netCDF::NcDim azimuth_dim; static netCDF::NcDim pressure_dim; static netCDF::NcDim track_point_dim; +static netCDF::NcVar init_time_str_var; +static netCDF::NcVar init_time_ut_var; +static netCDF::NcVar valid_time_str_var; +static netCDF::NcVar valid_time_ut_var; +static netCDF::NcVar lead_time_str_var; +static netCDF::NcVar lead_time_sec_var; static netCDF::NcVar lat_arr_var; static netCDF::NcVar lon_arr_var; -static netCDF::NcVar valid_time_var; static netCDF::NcVar data_var; static netCDF::NcVar wind_r_var; static netCDF::NcVar wind_a_var; diff --git a/src/tools/tc_utils/tc_rmw/tc_rmw_wind_converter.cc b/src/tools/tc_utils/tc_rmw/tc_rmw_wind_converter.cc index 0755bcdeb5..f94994b314 100644 --- a/src/tools/tc_utils/tc_rmw/tc_rmw_wind_converter.cc +++ b/src/tools/tc_utils/tc_rmw/tc_rmw_wind_converter.cc @@ -226,12 +226,12 @@ void wind_ne_to_ra(const TcrmwGrid& tcrmw_grid, double wind_r; double wind_t; if(is_bad_data(u) || is_bad_data(v)) { - mlog << Debug(3) << "wind_ne_to_ra: latlon:" << lat << "," << lon << " winds are missing\n"; + mlog << Debug(4) << "wind_ne_to_ra: latlon:" << lat << "," << lon << " winds are missing\n"; wind_r = bad_data_double; wind_t = bad_data_double; } else { tcrmw_grid.wind_ne_to_ra(lat, lon, u, v, wind_r, wind_t); - mlog << Debug(3) << "wind_ne_to_ra: latlon:" << lat << "," << lon << " uv:" << u << "," + mlog << Debug(4) << "wind_ne_to_ra: latlon:" << lat << "," << lon << " uv:" << u << "," << v << ", rt:" << wind_r << "," << wind_t <<"\n"; } wind_r_arr[i] = wind_r; From bc63fbf3d513e01d0e6e6b716fd24f4c32d4d8e7 Mon Sep 17 00:00:00 2001 From: John Halley Gotway Date: Thu, 15 Jun 2023 12:34:04 -0600 Subject: [PATCH 2/8] Per #2558, change TC-DIAG to TC-Diag and consistently use TC-DLand. --- docs/Users_Guide/data_io.rst | 2 +- docs/Users_Guide/met-tc_overview.rst | 6 +++--- docs/Users_Guide/overview.rst | 4 ++-- docs/Users_Guide/tc-diag.rst | 2 +- docs/Users_Guide/tc-dland.rst | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/Users_Guide/data_io.rst b/docs/Users_Guide/data_io.rst index 395b66a96d..7003a123a0 100644 --- a/docs/Users_Guide/data_io.rst +++ b/docs/Users_Guide/data_io.rst @@ -307,7 +307,7 @@ The following is a summary of the input and output formats for each of the tools * **Output**: One ASCII file containing 2D object attributes, four ASCII files containing 3D object attributes, and one NetCDF file containing object indices for the gridded simple and cluster object fields. -#. **TC-Dland Tool** +#. **TC-DLand Tool** * **Input**: One or more files containing the longitude (Degrees East) and latitude (Degrees North) of all the coastlines and islands considered to be a significant landmass. diff --git a/docs/Users_Guide/met-tc_overview.rst b/docs/Users_Guide/met-tc_overview.rst index 41ad7e5fc0..d17f3a993e 100644 --- a/docs/Users_Guide/met-tc_overview.rst +++ b/docs/Users_Guide/met-tc_overview.rst @@ -9,14 +9,14 @@ Introduction The purpose of this User's Guide is to provide basic information to the users of the Model Evaluation Tools - Tropical Cyclone (MET-TC) to enable users to apply MET-TC to their tropical cyclone datasets and evaluation studies. MET-TC is intended for use with model forecasts run through a vortex tracking software or with operational model forecasts in Automated Tropical Cyclone Forecast (ATCF) file format. -The following sections provide an overview of MET-TC and its components, as well as basic information on the software build. The required input, including file format and the MET-TC are discussed followed by a description of the TC-Dland tool, TC-Pairs, and TC-Stat tools. Each section covers the input, output and practical usage including a description of the configuration files. This is followed by a short overview of graphical utilities available within the MET-TC release. +The following sections provide an overview of MET-TC and its components, as well as basic information on the software build. The required input, including file format and the MET-TC are discussed followed by a description of the TC-DLand tool, TC-Pairs, and TC-Stat tools. Each section covers the input, output and practical usage including a description of the configuration files. This is followed by a short overview of graphical utilities available within the MET-TC release. MET-TC components ================= The MET tools used in the verification of Tropical Cyclones are referred to as MET-TC. These tools are shown across the bottom of the flowchart in :numref:`overview-figure`. The MET-TC tools are described in more detail in later sections. -The TC-Dland tool is used to generate a gridded file that determines the location of coastlines and islands, and is used as input to the TC-Pairs tool to determine the distance from land of a particular track point. The TC-Pairs tool matches pairs of input model data and BEST track (or any reference forecast) and calculates position errors. The TC-Stat tool uses the TC-Pairs output to perform filter and summary jobs over the matched pair dataset. The TC-Gen tool performs a categorical analysis for tropical cyclone genesis forecasts. The TC-RMW tool performs a coordinate transformation of gridded model data, centered on the storm's location. The RMW-Analysis tool aggregates TC-RMW output across multiple cases. +The TC-DLand tool is used to generate a gridded file that determines the location of coastlines and islands, and is used as input to the TC-Pairs tool to determine the distance from land of a particular track point. The TC-Pairs tool matches pairs of input model data and BEST track (or any reference forecast) and calculates position errors. The TC-Stat tool uses the TC-Pairs output to perform filter and summary jobs over the matched pair dataset. The TC-Gen tool performs a categorical analysis for tropical cyclone genesis forecasts. The TC-RMW tool performs a coordinate transformation of gridded model data, centered on the storm's location. The RMW-Analysis tool aggregates TC-RMW output across multiple cases. Input data format ================= @@ -112,4 +112,4 @@ If a user has gridded model output, the model data must be run through a vortex Output data format ================== -The MET package produces output in four basic file formats: STAT files, ASCII files, NetCDF files, and Postscript plots. The MET-TC tool produces output in TCSTAT, which stands for Tropical Cyclone - STAT. This output format consists of tabular ASCII data that can be easily read by many analysis tools and software packages, making the output from MET-TC very versatile. Like STAT, TCSTAT is a specialized ASCII format containing one record on each line. Currently, the only line type available in MET-TC is TCMPR (Tropical Cyclone Matched Pairs). As more line types are included in future releases, all line types will be included in a single TCSTAT file. MET-TC also outputs a NetCDF format file in the TC-Dland tool, as input to the TC-Pairs tool. +The MET package produces output in four basic file formats: STAT files, ASCII files, NetCDF files, and Postscript plots. The MET-TC tool produces output in TCSTAT, which stands for Tropical Cyclone - STAT. This output format consists of tabular ASCII data that can be easily read by many analysis tools and software packages, making the output from MET-TC very versatile. Like STAT, TCSTAT is a specialized ASCII format containing one record on each line. Currently, the only line type available in MET-TC is TCMPR (Tropical Cyclone Matched Pairs). As more line types are included in future releases, all line types will be included in a single TCSTAT file. MET-TC also outputs a NetCDF format file in the TC-DLand tool, as input to the TC-Pairs tool. diff --git a/docs/Users_Guide/overview.rst b/docs/Users_Guide/overview.rst index 9e7d26d882..78877ba752 100644 --- a/docs/Users_Guide/overview.rst +++ b/docs/Users_Guide/overview.rst @@ -9,7 +9,7 @@ Purpose and organization of the User's Guide The goal of this User's Guide is to provide basic information for users of the Model Evaluation Tools (MET) to enable them to apply MET to their datasets and evaluation studies. MET was originally designed for application to the post-processed output of the `Weather Research and Forecasting (WRF) `_ model. However, MET may also be used for the evaluation of forecasts from other models or applications, including the `Unified Forecast System (UFS) `_, and the `System for Integrated Modeling of the Atmosphere (SIMA) `_ if certain file format definitions (described in this document) are followed. -The MET User's Guide is organized as follows. :numref:`overview` provides an overview of MET and its components. :numref:`installation` contains basic information about how to get started with MET - including system requirements, required software (and how to obtain it), how to download MET, and information about compilers, libraries, and how to build the code. :numref:`data_io` - :numref:`masking` focuses on the data needed to run MET, including formats for forecasts, observations, and output. These sections also document the reformatting and masking tools available in MET. :numref:`point-stat` - :numref:`gsi_tools` focuses on the main statistics modules contained in MET, including the Point-Stat, Grid-Stat, Ensemble-Stat, Wavelet-Stat and GSI Diagnostic Tools. These sections include an introduction to the statistical verification methodologies utilized by the tools, followed by a section containing practical information, such as how to set up configuration files and the format of the output. :numref:`stat-analysis` and :numref:`series-analysis` focus on the analysis modules, Stat-Analysis and Series-Analysis, which aggregate the output statistics from the other tools across multiple cases. :numref:`mode` - :numref:`mode-td` describes a suite of object-based tools, including MODE, MODE-Analysis, and MODE-TD. :numref:`met-tc_overview` - :numref:`rmw-analysis` describes tools focused on tropical cyclones, including MET-TC Overview, TC-Dland, TC-Pairs, TC-Stat, TC-Gen, TC-RMW and RMW-Analysis. Finally, :numref:`plotting` includes plotting tools included in the MET release for checking and visualizing data, as well as some additional tools and information for plotting MET results. The appendices provide further useful information, including answers to some typical questions (:numref:`Appendix A, Section %s `) and links and information about map projections, grids, and polylines (:numref:`Appendix B, Section %s `). :numref:`Appendix C, Section %s ` and :numref:`Appendix D, Section %s ` provide more information about the verification measures and confidence intervals that are provided by MET. Sample code that can be used to perform analyses on the output of MET and create particular types of plots of verification results is posted on the `MET website `_). Note that the MET development group also accepts contributed analysis and plotting scripts which may be posted on the MET website for use by the community. It should be noted there are References (:numref:`refs`) in this User's Guide as well. +The MET User's Guide is organized as follows. :numref:`overview` provides an overview of MET and its components. :numref:`installation` contains basic information about how to get started with MET - including system requirements, required software (and how to obtain it), how to download MET, and information about compilers, libraries, and how to build the code. :numref:`data_io` - :numref:`masking` focuses on the data needed to run MET, including formats for forecasts, observations, and output. These sections also document the reformatting and masking tools available in MET. :numref:`point-stat` - :numref:`gsi_tools` focuses on the main statistics modules contained in MET, including the Point-Stat, Grid-Stat, Ensemble-Stat, Wavelet-Stat and GSI Diagnostic Tools. These sections include an introduction to the statistical verification methodologies utilized by the tools, followed by a section containing practical information, such as how to set up configuration files and the format of the output. :numref:`stat-analysis` and :numref:`series-analysis` focus on the analysis modules, Stat-Analysis and Series-Analysis, which aggregate the output statistics from the other tools across multiple cases. :numref:`mode` - :numref:`mode-td` describes a suite of object-based tools, including MODE, MODE-Analysis, and MODE-TD. :numref:`met-tc_overview` - :numref:`rmw-analysis` describes tools focused on tropical cyclones, including MET-TC Overview, TC-DLand, TC-Pairs, TC-Stat, TC-Gen, TC-RMW and RMW-Analysis. Finally, :numref:`plotting` includes plotting tools included in the MET release for checking and visualizing data, as well as some additional tools and information for plotting MET results. The appendices provide further useful information, including answers to some typical questions (:numref:`Appendix A, Section %s `) and links and information about map projections, grids, and polylines (:numref:`Appendix B, Section %s `). :numref:`Appendix C, Section %s ` and :numref:`Appendix D, Section %s ` provide more information about the verification measures and confidence intervals that are provided by MET. Sample code that can be used to perform analyses on the output of MET and create particular types of plots of verification results is posted on the `MET website `_). Note that the MET development group also accepts contributed analysis and plotting scripts which may be posted on the MET website for use by the community. It should be noted there are References (:numref:`refs`) in this User's Guide as well. The remainder of this section includes information about the context for MET development, as well as information on the design principles used in developing MET. In addition, this section includes an overview of the MET package and its specific modules. @@ -66,7 +66,7 @@ Results from the statistical analysis stage are output in ASCII, NetCDF and Post The Stat-Analysis and MODE-Analysis tools aggregate the output statistics from the previous steps across multiple cases. The Stat-Analysis tool reads the STAT output of Point-Stat, Grid-Stat, Ensemble-Stat, and Wavelet-Stat and can be used to filter the STAT data and produce aggregated continuous and categorical statistics. Stat-Analysis also reads matched pair data (i.e. MPR line type) via python embedding. The MODE-Analysis tool reads the ASCII output of the MODE tool and can be used to produce summary information about object location, size, and intensity (as well as other object characteristics) across one or more cases. -Tropical cyclone forecasts and observations are quite different than numerical model forecasts, and thus they have their own set of tools. These consist of TC-Dland, TC-Pairs, TC-Stat, TC-Gen, TC-RMW, and RMW-Analysis. The TC-Dland module calculates the distance to land from all locations on a specified grid. This information can be used in later modules to eliminate tropical cyclones that are over land from being included in the statistics. TC-Pairs matches up tropical cyclone forecasts and observations and writes all output to a file. In TC-Stat, these forecast / observation pairs are analyzed according to user preference to produce statistics. TC-Gen evaluates the performance of Tropical Cyclone genesis forecast using contingency table counts and statistics. TC-RMW performs a coordinate transformation for gridded model or analysis fields centered on the current storm location. RMW-Analysis filters and aggregates the output of TC-RMW across multiple cases. +Tropical cyclone forecasts and observations are quite different than numerical model forecasts, and thus they have their own set of tools. These consist of TC-DLand, TC-Pairs, TC-Stat, TC-Gen, TC-RMW, and RMW-Analysis. The TC-DLand module calculates the distance to land from all locations on a specified grid. This information can be used in later modules to eliminate tropical cyclones that are over land from being included in the statistics. TC-Pairs matches up tropical cyclone forecasts and observations and writes all output to a file. In TC-Stat, these forecast / observation pairs are analyzed according to user preference to produce statistics. TC-Gen evaluates the performance of Tropical Cyclone genesis forecast using contingency table counts and statistics. TC-RMW performs a coordinate transformation for gridded model or analysis fields centered on the current storm location. RMW-Analysis filters and aggregates the output of TC-RMW across multiple cases. The following sections of this MET User's Guide contain usage statements for each tool, which may be viewed if you type the name of the tool. Alternatively, the user can also type the name of the tool followed by **-help** to obtain the usage statement. Each tool also has a **-version** command line option associated with it so that the user can determine what version of the tool they are using. diff --git a/docs/Users_Guide/tc-diag.rst b/docs/Users_Guide/tc-diag.rst index f9cef3d479..460c048790 100644 --- a/docs/Users_Guide/tc-diag.rst +++ b/docs/Users_Guide/tc-diag.rst @@ -1,7 +1,7 @@ .. _tc-diag: ************ -TC-DIAG Tool +TC-Diag Tool ************ Introduction diff --git a/docs/Users_Guide/tc-dland.rst b/docs/Users_Guide/tc-dland.rst index 078d4d3a9e..c88ea33e0b 100644 --- a/docs/Users_Guide/tc-dland.rst +++ b/docs/Users_Guide/tc-dland.rst @@ -1,7 +1,7 @@ .. _tc-dland: ************* -TC-Dland Tool +TC-DLand Tool ************* Introduction From 0c8c0c801ce3b1e89b280c2e558cc7c9a899c0dd Mon Sep 17 00:00:00 2001 From: John Halley Gotway Date: Thu, 15 Jun 2023 12:49:17 -0600 Subject: [PATCH 3/8] Per #2558, update the flowchart for 11.1.0 and describe TC-Diag in the overview section. --- docs/Flowchart/MET_flowchart.pptx | Bin 397321 -> 422554 bytes docs/Flowchart/MET_flowchart_v11.1.0.png | Bin 0 -> 175220 bytes docs/Users_Guide/figure/overview-figure.png | Bin 171779 -> 175220 bytes docs/Users_Guide/overview.rst | 4 ++-- 4 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 docs/Flowchart/MET_flowchart_v11.1.0.png diff --git a/docs/Flowchart/MET_flowchart.pptx b/docs/Flowchart/MET_flowchart.pptx index cc386d57d25fefa5dd73ebeeb2bf4098cd9233db..cc62a9a96019ce04806a4ea1e1b3bdf1528ebf3d 100644 GIT binary patch delta 16588 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 delta 5314 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 AI{*Lx diff --git a/docs/Flowchart/MET_flowchart_v11.1.0.png b/docs/Flowchart/MET_flowchart_v11.1.0.png new file mode 100644 index 0000000000000000000000000000000000000000..b7b11f32c26125b3854fa2cd2a0e7308bf5baa8e GIT binary patch literal 175220 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%0DHx27D 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

=-0!VxXUbPbcKom1r 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 literal 0 HcmV?d00001 diff --git a/docs/Users_Guide/figure/overview-figure.png b/docs/Users_Guide/figure/overview-figure.png index 201e9b7a531fce948f8a3d1323a70a7090b14a77..b7b11f32c26125b3854fa2cd2a0e7308bf5baa8e 100644 GIT binary patch literal 175220 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%0DHx27D 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

=-0!VxXUbPbcKom1r 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 literal 171779 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

VyZ{l?)QfqzLL8JWhk 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 E2gm6?^8f$< diff --git a/docs/Users_Guide/overview.rst b/docs/Users_Guide/overview.rst index 78877ba752..dff4c81fc1 100644 --- a/docs/Users_Guide/overview.rst +++ b/docs/Users_Guide/overview.rst @@ -9,7 +9,7 @@ Purpose and organization of the User's Guide The goal of this User's Guide is to provide basic information for users of the Model Evaluation Tools (MET) to enable them to apply MET to their datasets and evaluation studies. MET was originally designed for application to the post-processed output of the `Weather Research and Forecasting (WRF) `_ model. However, MET may also be used for the evaluation of forecasts from other models or applications, including the `Unified Forecast System (UFS) `_, and the `System for Integrated Modeling of the Atmosphere (SIMA) `_ if certain file format definitions (described in this document) are followed. -The MET User's Guide is organized as follows. :numref:`overview` provides an overview of MET and its components. :numref:`installation` contains basic information about how to get started with MET - including system requirements, required software (and how to obtain it), how to download MET, and information about compilers, libraries, and how to build the code. :numref:`data_io` - :numref:`masking` focuses on the data needed to run MET, including formats for forecasts, observations, and output. These sections also document the reformatting and masking tools available in MET. :numref:`point-stat` - :numref:`gsi_tools` focuses on the main statistics modules contained in MET, including the Point-Stat, Grid-Stat, Ensemble-Stat, Wavelet-Stat and GSI Diagnostic Tools. These sections include an introduction to the statistical verification methodologies utilized by the tools, followed by a section containing practical information, such as how to set up configuration files and the format of the output. :numref:`stat-analysis` and :numref:`series-analysis` focus on the analysis modules, Stat-Analysis and Series-Analysis, which aggregate the output statistics from the other tools across multiple cases. :numref:`mode` - :numref:`mode-td` describes a suite of object-based tools, including MODE, MODE-Analysis, and MODE-TD. :numref:`met-tc_overview` - :numref:`rmw-analysis` describes tools focused on tropical cyclones, including MET-TC Overview, TC-DLand, TC-Pairs, TC-Stat, TC-Gen, TC-RMW and RMW-Analysis. Finally, :numref:`plotting` includes plotting tools included in the MET release for checking and visualizing data, as well as some additional tools and information for plotting MET results. The appendices provide further useful information, including answers to some typical questions (:numref:`Appendix A, Section %s `) and links and information about map projections, grids, and polylines (:numref:`Appendix B, Section %s `). :numref:`Appendix C, Section %s ` and :numref:`Appendix D, Section %s ` provide more information about the verification measures and confidence intervals that are provided by MET. Sample code that can be used to perform analyses on the output of MET and create particular types of plots of verification results is posted on the `MET website `_). Note that the MET development group also accepts contributed analysis and plotting scripts which may be posted on the MET website for use by the community. It should be noted there are References (:numref:`refs`) in this User's Guide as well. +The MET User's Guide is organized as follows. :numref:`overview` provides an overview of MET and its components. :numref:`installation` contains basic information about how to get started with MET - including system requirements, required software (and how to obtain it), how to download MET, and information about compilers, libraries, and how to build the code. :numref:`data_io` - :numref:`masking` focuses on the data needed to run MET, including formats for forecasts, observations, and output. These sections also document the reformatting and masking tools available in MET. :numref:`point-stat` - :numref:`gsi_tools` focuses on the main statistics modules contained in MET, including the Point-Stat, Grid-Stat, Ensemble-Stat, Wavelet-Stat and GSI Diagnostic Tools. These sections include an introduction to the statistical verification methodologies utilized by the tools, followed by a section containing practical information, such as how to set up configuration files and the format of the output. :numref:`stat-analysis` and :numref:`series-analysis` focus on the analysis modules, Stat-Analysis and Series-Analysis, which aggregate the output statistics from the other tools across multiple cases. :numref:`mode` - :numref:`mode-td` describes a suite of object-based tools, including MODE, MODE-Analysis, and MODE-TD. :numref:`met-tc_overview` - :numref:`rmw-analysis` describes tools focused on tropical cyclones, including MET-TC Overview, TC-DLand, TC-Diag, TC-Pairs, TC-Stat, TC-Gen, TC-RMW and RMW-Analysis. Finally, :numref:`plotting` includes plotting tools included in the MET release for checking and visualizing data, as well as some additional tools and information for plotting MET results. The appendices provide further useful information, including answers to some typical questions (:numref:`Appendix A, Section %s `) and links and information about map projections, grids, and polylines (:numref:`Appendix B, Section %s `). :numref:`Appendix C, Section %s ` and :numref:`Appendix D, Section %s ` provide more information about the verification measures and confidence intervals that are provided by MET. Sample code that can be used to perform analyses on the output of MET and create particular types of plots of verification results is posted on the `MET website `_). Note that the MET development group also accepts contributed analysis and plotting scripts which may be posted on the MET website for use by the community. It should be noted there are References (:numref:`refs`) in this User's Guide as well. The remainder of this section includes information about the context for MET development, as well as information on the design principles used in developing MET. In addition, this section includes an overview of the MET package and its specific modules. @@ -66,7 +66,7 @@ Results from the statistical analysis stage are output in ASCII, NetCDF and Post The Stat-Analysis and MODE-Analysis tools aggregate the output statistics from the previous steps across multiple cases. The Stat-Analysis tool reads the STAT output of Point-Stat, Grid-Stat, Ensemble-Stat, and Wavelet-Stat and can be used to filter the STAT data and produce aggregated continuous and categorical statistics. Stat-Analysis also reads matched pair data (i.e. MPR line type) via python embedding. The MODE-Analysis tool reads the ASCII output of the MODE tool and can be used to produce summary information about object location, size, and intensity (as well as other object characteristics) across one or more cases. -Tropical cyclone forecasts and observations are quite different than numerical model forecasts, and thus they have their own set of tools. These consist of TC-DLand, TC-Pairs, TC-Stat, TC-Gen, TC-RMW, and RMW-Analysis. The TC-DLand module calculates the distance to land from all locations on a specified grid. This information can be used in later modules to eliminate tropical cyclones that are over land from being included in the statistics. TC-Pairs matches up tropical cyclone forecasts and observations and writes all output to a file. In TC-Stat, these forecast / observation pairs are analyzed according to user preference to produce statistics. TC-Gen evaluates the performance of Tropical Cyclone genesis forecast using contingency table counts and statistics. TC-RMW performs a coordinate transformation for gridded model or analysis fields centered on the current storm location. RMW-Analysis filters and aggregates the output of TC-RMW across multiple cases. +Tropical cyclone forecasts and observations are quite different than numerical model forecasts, and thus they have their own set of tools. These consist of TC-DLand, TC-Diag, TC-Pairs, TC-Stat, TC-Gen, TC-RMW, and RMW-Analysis. The TC-DLand module calculates the distance to land from all locations on a specified grid. This information can be used in later modules to eliminate tropical cyclones that are over land from being included in the statistics. TC-Diag converts gridded model output into cylindrical coordinates for each storm location, calls Python scripts to compute storm-relative diagnostics, and writes ASCII output to be read by TC-Pairs. TC-Pairs matches up tropical cyclone forecasts and observations and writes all output to a file. In TC-Stat, these forecast / observation pairs are analyzed according to user preference to produce statistics. TC-Gen evaluates the performance of Tropical Cyclone genesis forecast using contingency table counts and statistics. TC-RMW performs a coordinate transformation for gridded model or analysis fields centered on the current storm location. RMW-Analysis filters and aggregates the output of TC-RMW across multiple cases. The following sections of this MET User's Guide contain usage statements for each tool, which may be viewed if you type the name of the tool. Alternatively, the user can also type the name of the tool followed by **-help** to obtain the usage statement. Each tool also has a **-version** command line option associated with it so that the user can determine what version of the tool they are using. From 13a72e42a1d3b3bc8d53b6434ae589f5c5a51b08 Mon Sep 17 00:00:00 2001 From: John Halley Gotway Date: Mon, 19 Jun 2023 16:38:55 -0600 Subject: [PATCH 4/8] Per #2558, update the user's guide chapter about TC-Diag --- data/config/TCDiagConfig_default | 2 +- docs/Users_Guide/met-tc_overview.rst | 6 +- docs/Users_Guide/tc-diag.rst | 307 +++++++++++++++------ internal/test_unit/config/TCDiagConfig_ian | 2 +- 4 files changed, 232 insertions(+), 85 deletions(-) diff --git a/data/config/TCDiagConfig_default b/data/config/TCDiagConfig_default index 2f4adaa86d..1660d8a09c 100644 --- a/data/config/TCDiagConfig_default +++ b/data/config/TCDiagConfig_default @@ -79,7 +79,7 @@ domain_info = [ // // Data censoring and conversion -// May be set separately in each diag_data "field" entry +// May be set separately in each data "field" array entry // // censor_thresh = []; // censor_val = []; diff --git a/docs/Users_Guide/met-tc_overview.rst b/docs/Users_Guide/met-tc_overview.rst index d17f3a993e..d7930b6a75 100644 --- a/docs/Users_Guide/met-tc_overview.rst +++ b/docs/Users_Guide/met-tc_overview.rst @@ -9,14 +9,14 @@ Introduction The purpose of this User's Guide is to provide basic information to the users of the Model Evaluation Tools - Tropical Cyclone (MET-TC) to enable users to apply MET-TC to their tropical cyclone datasets and evaluation studies. MET-TC is intended for use with model forecasts run through a vortex tracking software or with operational model forecasts in Automated Tropical Cyclone Forecast (ATCF) file format. -The following sections provide an overview of MET-TC and its components, as well as basic information on the software build. The required input, including file format and the MET-TC are discussed followed by a description of the TC-DLand tool, TC-Pairs, and TC-Stat tools. Each section covers the input, output and practical usage including a description of the configuration files. This is followed by a short overview of graphical utilities available within the MET-TC release. +The following sections provide an overview of MET-TC and its components, as well as basic information on the software build. The required input, including file format and the MET-TC are discussed followed by a description of the TC-DLand, TC-Diag, TC-Pairs, TC-Stat, TC-RMW, and RMW-Analysis tools. Each section covers the input, output and practical usage including a description of the configuration files. This is followed by a short overview of graphical utilities available within the MET-TC release. MET-TC components ================= The MET tools used in the verification of Tropical Cyclones are referred to as MET-TC. These tools are shown across the bottom of the flowchart in :numref:`overview-figure`. The MET-TC tools are described in more detail in later sections. -The TC-DLand tool is used to generate a gridded file that determines the location of coastlines and islands, and is used as input to the TC-Pairs tool to determine the distance from land of a particular track point. The TC-Pairs tool matches pairs of input model data and BEST track (or any reference forecast) and calculates position errors. The TC-Stat tool uses the TC-Pairs output to perform filter and summary jobs over the matched pair dataset. The TC-Gen tool performs a categorical analysis for tropical cyclone genesis forecasts. The TC-RMW tool performs a coordinate transformation of gridded model data, centered on the storm's location. The RMW-Analysis tool aggregates TC-RMW output across multiple cases. +Tropical cyclone forecasts and observations are quite different than numerical model forecasts, and thus they have their own set of tools. These consist of TC-DLand, TC-Diag, TC-Pairs, TC-Stat, TC-Gen, TC-RMW, and RMW-Analysis. The TC-DLand module calculates the distance to land from all locations on a specified grid. This information can be used in later modules to eliminate tropical cyclones that are over land from being included in the statistics. TC-Diag converts gridded model output into cylindrical coordinates for each storm location, calls Python scripts to compute storm-relative diagnostics, and writes ASCII output to be read by TC-Pairs. TC-Pairs matches up tropical cyclone forecasts and observations and writes all output to a file. In TC-Stat, these forecast / observation pairs are analyzed according to user preference to produce statistics. TC-Gen evaluates the performance of Tropical Cyclone genesis forecast using contingency table counts and statistics. TC-RMW performs a coordinate transformation for gridded model or analysis fields centered on the current storm location. RMW-Analysis filters and aggregates the output of TC-RMW across multiple cases. Input data format ================= @@ -112,4 +112,4 @@ If a user has gridded model output, the model data must be run through a vortex Output data format ================== -The MET package produces output in four basic file formats: STAT files, ASCII files, NetCDF files, and Postscript plots. The MET-TC tool produces output in TCSTAT, which stands for Tropical Cyclone - STAT. This output format consists of tabular ASCII data that can be easily read by many analysis tools and software packages, making the output from MET-TC very versatile. Like STAT, TCSTAT is a specialized ASCII format containing one record on each line. Currently, the only line type available in MET-TC is TCMPR (Tropical Cyclone Matched Pairs). As more line types are included in future releases, all line types will be included in a single TCSTAT file. MET-TC also outputs a NetCDF format file in the TC-DLand tool, as input to the TC-Pairs tool. +The MET package produces output in four basic file formats: STAT files, ASCII files, NetCDF files, and PostScript plots. The MET-TC tool produces output in TCSTAT, which stands for Tropical Cyclone - STAT. This output format consists of tabular ASCII data that can be easily read by many analysis tools and software packages, making the output from MET-TC very versatile. Like STAT, TCSTAT is a specialized ASCII format containing one record on each line. Currently, the only line type available in MET-TC is TCMPR (Tropical Cyclone Matched Pairs). As more line types are included in future releases, all line types will be included in a single TCSTAT file. The TC-DLand, TC-Diag, TC-RMW, and RMW-Analysis tools also write NetCDF files containing a variety of output data types. diff --git a/docs/Users_Guide/tc-diag.rst b/docs/Users_Guide/tc-diag.rst index 460c048790..77e117487b 100644 --- a/docs/Users_Guide/tc-diag.rst +++ b/docs/Users_Guide/tc-diag.rst @@ -7,7 +7,24 @@ TC-Diag Tool Introduction ============ -The TC-Diag tool compute Tropical Cyclone diagnostics. More details to be added. +.. note:: As of MET version 11.1.0, the TC-Diag tool is still in development. Each time it is run, the warning message listed below is printed. + +.. code-block:: none + + WARNING: + WARNING: The TC-Diag tool is provided in BETA status for MET V11.1.0. + WARNING: Please see the release notes of future MET versions for updates. + WARNING: + +The TC-Diag tool computes Tropical Cyclone diagnostics using ATCF track and gridded data inputs. TC-Diag is run once for each initialization time. The user provides ATCF track data, along with track filtering criteria as needed, to select one or more tracks to be processed. The user also provides gridded model data from which diagnostics should be computed. Gridded data can be provided for multiple concurrent storms, multiple models, and/or multiple domains (i.e. parent and nest) in a single run. + +TC-Diag first determines the list of valid times that appear in any one of the tracks. For each valid time, it processes all track points for that time. For each track point, it reads the gridded model fields requested in the configuration file and transforms them gridded data to a range-azimuth cyclindrical coordinates grid. For each domain, it writes the range-azimuth data to a temporary NetCDF file. TC-Diag then calls one or more Python diagnostics scripts, as specified in the configuration file, to compute tropical cyclone diagnostic values. The computed diagnostics values are retrieved from the Python script and stored in memory. + +After processing all valid times and all corresponding track points, the computed diagnostics are written to ASCII and/or NetCDF output files. If requested in the configuration file, the temporary range-azimuth cylindrical coordinates files are combined into a single NetCDF file and written to the output for each combination of model track and domain. + +The default Python diagnostics scripts included with the MET release provide the standard set of CIRA diagnostics. However, users can copy/modify the logic in those scripts as they see fit to refine and/or add to the diagnostics computed. + +.. _tc-diag_practical_info: Practical information ===================== @@ -20,10 +37,10 @@ The following sections describe the usage statement, required arguments, and opt .. code-block:: none Usage: tc_diag - -data file_1 ... file_n | data_file_list + -data domain tech_id_list [ file_1 ... file_n | data_file_list ] -deck file -config file - -out file + [-outdir path] [-log file] [-v level] @@ -32,17 +49,17 @@ tc_diag has required arguments and can accept several optional arguments. Required arguments for tc_diag ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -1. The **-data file_1 ... file_n | data_file_list** options specify the gridded data files or an ASCII file containing a list of files to be used. - -2. The **-deck source** argument is the ATCF format data source. +1. The **-data domain tech_id_list [ file_1 ... file_n | data_file_list ]** option specifies a domain name, a comma-separated list of ATCF tech ID's, and a list of gridded data files or an ASCII file containing a list of files to be used. Specify **-data** one for each gridded data source. -3. The **-config file** argument is the configuration file to be used. The contents of the configuration file are discussed below. +2. The **-deck source** option is the ATCF format track data source. -4. The **-out** argument is the NetCDF output file to be written. +3. The **-config file** option is the TCDiagConfig file to be used. The contents of the configuration file are discussed below. Optional arguments for tc_diag ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4. The **-outdir path** option overrides the default output directory (current working directory) with the output directory path provided. + 5. The **-log file** option directs output and errors to the specified log file. All messages will be written to that file as well as standard out and error. Thus, users can save the messages without having to redirect the output on the command line. The default behavior is no logfile. 6. The **-v level** option indicates the desired level of verbosity. The contents of "level" will override the default setting of 2. Setting the verbosity to 0 will make the tool run with no log messages, while increasing the verbosity above 1 will increase the amount of logging. @@ -52,8 +69,6 @@ tc_diag configuration file The default configuration file for the TC-Diag tool named **TCDiagConfig_default** can be found in the installed *share/met/config/* directory. It is encouraged for users to copy these default files before modifying their contents. The contents of the configuration file are described in the subsections below. -The TC-Diag tool should be configured to filter the input track data (**-deck**) down to the subset of tracks that correspond to the gridded data files provided (**-data**). The filtered tracks should contain data for only one initialization time but may contain tracks for multiple models. - _______________________ .. code-block:: none @@ -70,123 +85,255 @@ _______________________ valid_hour = []; lead = []; - censor_thresh = []; - censor_val = []; - convert(x) = x; - - data = { - field = [ - { - name = "PRMSL"; - level = ["L0"]; - }, - { - name = "TMP"; - level = ["P1000", "P500"]; - }, - { - name = "UGRD"; - level = ["P1000", "P500"]; - }, - { - name = "VGRD"; - level = ["P1000", "P500"]; - } - ]; - } - regrid = { ... } +The TC-Diag tool should be configured to filter the input track data (**-deck**) down to the subset of tracks that correspond to the gridded data files provided (**-data**). The filtered tracks should contain data for only *one initialization time* but may contain tracks for multiple models. -The configuration options listed above are common to many MET tools and are described in :numref:`config_options`. The name and level entries in the data dictionary define the data to be processed. The regrid dictionary defines if and how regridding will be performed. +The configuration options listed above are used to filter the input track data down to those that should be processed in the current run. These options are common to multiple MET tools and are described in :numref:`config_options_tc`. _______________________ .. code-block:: none - n_range = 100; - -The **n_range** parameter is the number of equally spaced range intervals in the range-azimuth grid. - -_______________________ + diag_script = [ "MET_BASE/python/tc_diag/compute_tc_diagnostics.py" ]; -.. code-block:: none + domain_info = [ + { + domain = "parent"; + n_range = 150; + n_azimuth = 8; + delta_range_km = 10.0; + }, + { + domain = "nest"; + n_range = 150; + n_azimuth = 8; + delta_range_km = 2.0; + } + ]; - n_azimuth = 180; +The **domain_info** entry is an array of dictionaries. Each dictionary consists of five entries. The **domain** entry is a user-specified string that provides a name for the domain. Each **domain** name must also appear in a **-deck** command line option, and the reverse is also true. -The **n_azimuth** parameter is the number of equally spaced azimuth intervals in the range-azimuth grid. The azimuthal grid spacing is 360 / **n_azimuth** degrees. +The **n_range** entry is an integer specifying the number of equally spaced range intervals in the range-azimuth grid to be used for this data source. -_______________________ +The **n_azimuth** entry is an integer specifying the number of equally spaced azimuth intervals in the range-azimuth grid to be used for this data source. The azimuthal grid spacing is 360 / **n_azimuth** degrees. -.. code-block:: none +The **delta_range_km** entry is a floating point value specifying the spacing of the range rings in kilometers. - max_range_km = 100.0; +The **diag_script** entry is an array of strings. Each string specifies the path to a Python script to be executed to compute diagnostics from the transformed cyclindrical coordinates data for this domain. While the **diag_script** entry can be specified separately for each **domain_info** array entry, specifying it once at a higher level of context, as seen above, allows the same setting to be applied to all array entries. When multiple Python diagnostics scripts are run, the union of the diagnostics computed are written to the output. -The **max_range_km** parameter specifies the maximum range of the range-azimuth grid, in kilometers. If this parameter is specified and not **rmw_scale**, the radial grid spacing will be **max_range_km / n_range**. +.. note:: As of MET version 11.1.0, no tropical cyclone diagnostics are actually computed or written to the output. _______________________ .. code-block:: none - delta_range_km = 10.0; + censor_thresh = []; + censor_val = []; + convert(x) = x; -The **delta_range_km** parameter specifies the spacing of the range rings, in kilometers. +These data censoring and conversion options are common to multiple MET tools and are described in :numref:`config_options`. They can be specified separately in each **data.field** array entry, described below. If provided, those operations are performed after reading the gridded data but prior to conveting to the cylindrical coordinate range-azimuth grid. _______________________ .. code-block:: none - rmw_scale = 0.2; + data = { -The **rmw_scale** parameter overrides the **max_range_km** parameter. When this is set the radial grid spacing will be **rmw_scale** in units of the RMW, which varies along the storm track. + // If empty, the field is processed for all domains + domain = []; -_______________________ - -.. code-block:: none + // Pressure levels to be used, unless overridden below + level = [ "P1000", "P925", "P850", "P700", "P500", + "P400", "P300", "P250", "P200", "P150", + "P100" ]; - compute_tangential_and_radial_winds = TRUE; - -The **compute_tangential_and_radial_winds** parameter is a flag controlling whether a conversion from U/V to Tangential/Radial winds is done or not. If set to TRUE, additional parameters are used, otherwise they are not. + field = [ + { name = "TMP"; }, + { name = "UGRD"; }, + { name = "VGRD"; }, + { name = "RH"; }, + { name = "HGT"; }, + { name = "PRMSL"; level = "Z0"; }, + { name = "PWAT"; level = "L0"; }, + { name = "TMP"; level = "Z0"; }, + { name = "TMP"; level = "Z2"; }, + { name = "RH"; level = "Z2"; }, + { name = "UGRD"; level = "Z10"; }, + { name = "VGRD"; level = "Z10"; } + ]; + } -_______________________ +The **data** entry is a dictionary that contains the **field** entry to define what gridded data should be processed. The **field** entry is an array of dictionaries. Each **field** dictionary consists of at least three entries. -.. code-block:: none +The **name** and **level** entries are common to multiple MET tools and are described in :numref:`config_options`. - u_wind_field_name = "UGRD"; - v_wind_field_name = "VGRD"; - -The **u_wind_field_name** and **v_wind_field_name** parameters identify which input data to use in converting to tangential/radial winds. The parameters are used only if **compute_tangential_and_radial_winds** is set to TRUE. +The **domain** entry is an array of strings. Each string specifies a domain name. If the **domain_info** domain name appears in this **domain** list, then this field will be read from that **domain_info** data source. If **domain** is set to an empty list, then this field will be read from all domain data sources. _______________________ .. code-block:: none - tangential_velocity_field_name = "VT"; - tangential_velocity_long_field_name = "Tangential Velocity"; + regrid = { ... } + +These **regrid** dictionary is common to multiple MET tools and is described in :numref:`config_options`. These regridding options control the transformation to cylindrical coordinates. - -The **tangential_velocity_field_name** and **tangential_velocity_long_field_name** parameters define the field names to give the output tangential velocity grid in the netCDF output file. The parameters are used only if **compute_tangential_and_radial_winds** is set to TRUE. +.. note:: As of MET version 11.1.0, the nearest neighbor regridding method is used rather than this configuration file option. _______________________ .. code-block:: none - radial_velocity_field_name = "VT"; - radial_velocity_long_field_name = "Radial Velocity"; + vortex_removel = FALSE; - -The **radial_velocity_field_name** and **radial_velocity_long_field_name** parameters define the field names to give the output radial velocity grid in the netCDF output file. The parameters are used only if **compute_radial_and_radial_winds** is set to TRUE. +These **vortex_removal** flag entry is a boolean specifying whether or not vortex removal logic should be applied. +.. note:: As of MET version 11.1.0, vortex removal logic is not yet supported. -tc_diag output file -------------------- +_______________________ -The NetCDF output file contains the following dimensions: +.. code-block:: none -1. *range* - the radial dimension of the range-azimuth grid + nc_rng_azi_flag = TRUE; + nc_diag_flag = FALSE; + cira_diag_flag = FALSE; -2. *azimuth* - the azimuthal dimension of the range-azimuth grid +These three flag entries are booleans specifying what output data types should be written. The **nc_rng_azi_flag** entry controls the writing of a NetCDF file containing the cylindrical coordinate range-azimuth data used to compute the diagnostics. The **nc_diag_file** entry controls the writing of the computed diagnostics to a NetCDF file. The **cira_diag_flage** entry controls the writing of the computed diagnostics to a formatted ASCII output file. At least one of these flags must be set to true. -3. *pressure* - if any pressure levels are specified in the data variable list, they will be sorted and combined into a 3D NetCDF variable, which pressure as the vertical dimension and range and azimuth as the horizontal dimensions +.. note:: As of MET version 11.1.0, **nc_rng_azi_flag** is the only supported output type. These configuration options will automatically be reset at runtime to the settings listed above. -4. *track_point* - the track points corresponding to the model output valid times +_______________________ + +.. code-block:: none -For each data variable specified in the data variable list, a corresponding NetCDF variable will be created with the same name and units. + tmp_dir = "/tmp"; + output_prefix = ""; + version = "V11.1.0"; + +These options are common to multiple MET tools and are described in :numref:`config_options`. + +tc_diag output +-------------- + +The TC-Diag tool writes up to three output data types, as specified by flags in the configuration file. Each time TC-Diag is run it processes track data for a single initialization time. The actual number of output files varies depending on the number of model tracks provided. + +.. note:: As of MET version 11.1.0, **nc_rng_azi_flag** is the only supported output type. + +**CIRA Diagnostics Output** + +When the **cira_diag_flag** configuration entry is set to true, an ASCII CIRA diagnostics output file is written for each model track provided. + +Details will be provided when support for this output type is added. + +**NetCDF Diagnostics Output** + +When the **nc_diag_flag** configuration entry is set to true, a NetCDF output file containing the computed diagnostics is written for each model track provided. + +Details will be provided when support for this output type is added. + +**NetCDF Range-Azimuth Output** + +When the **nc_rng_azi_flag** configuration entry is set to true, a NetCDF output file containing the cylindrical coordinate range-azimuth data is written for each combination of model track provided and domain specified. For example, if three model tracks are provided and data for both *parent* and *nest* domains are provided, six of these NetCDF output files will be written. + +The NetCDF range-azimuth output is named using the following naming convention: + +**tc_diag_STORMID_ATCFID_YYYYMMDDHH_cyl_grid_DOMAIN.nc** where STORMID is the 2-letter basin name, 2-digit storm number, and 4-digit year, ATCFID is the track model name, YYYYMMDDHH is the track initialization time, and DOMAIN is the domain name. + +The NetCDF range-azimuth file contains the dimensions and variables shown in :numref:`table_TC-Diag_Dimensions_NetCDF_range_azimuth` and :numref:`table_TC-Diag_Variables_NetCDF_range_azimuth`. + +.. _table_TC-Diag_Dimensions_NetCDF_range_azimuth: + +.. list-table:: Dimensions defined in NetCDF Range-Azimuth output + :widths: auto + :header-rows: 2 + + * - tc_diag NETCDF DIMENSIONS + - + * - NetCDF Dimension + - Description + * - track_line + - Dimension for the raw ATCF track lines written to the **TrackLines** variable + * - time + - Time dimension for the number of track point valid times + * - range + - Dimension for the number of range rings in the range-azimuth grid + * - azimuth + - Dimension for the number of azimuths in the range-azimuth grid + * - pressure + - Vertical dimension for the number of pressure levels + +.. role:: raw-html(raw) + :format: html + +.. _table_TC-Diag_Variables_NetCDF_range_azimuth: + +.. list-table:: Variables defined in NetCDF Range-Azimuth output + :widths: auto + :header-rows: 2 + + * - tc_diag NETCDF VARIABLES + - + - + * - NetCDF Variable + - Dimension + - Description + * - storm_id + - NA + - Tropical Cyclone Storm ID (BBNNYYYY) consisting of 2-letter basin name, 2-digit storm number, and 4-digit year + * - model + - NA + - Track ATCF ID model name + * - TrackLines + - track_lines + - Raw input ATCF track lines + * - TrackLat + - time + - Track point location latitude + * - TrackLon + - time + - Track point location longitude + * - TrackMSLP + - time + - Track point minimum sea level pressure + * - TrackVMax + - time + - Track point maximum wind speed + * - init_time + - NA + - Track initialization time string in YYYYMMDD_HHMMSS format + * - init_time_ut + - NA + - Track initialization time string in unixtime (seconds since January 1, 1970) format + * - valid_time + - time + - Track point valid time string in YYYYMMDD_HHMMSS format + * - valid_time_ut + - time + - Track point valid time string in unixtime (seconds since January 1, 1970) format + * - lead_time + - time + - Track point forecast lead time string in HHMMSS format + * - lead_time_sec + - time + - Track point forecast lead time integer number of seconds + * - range + - range + - Range ring coordinate variable in kilometers + * - azimuth + - azimuth + - Azimuth coordinate variable in degrees clockwise from north + * - pressure + - pressure + - Vertical level pressure coordinate variable in millibars + * - lat + - time, range, azimuth + - Latitude in degrees north for each range-azimuth grid point + * - lon + - time, range, azimuth + - Longitude in degrees east for each range-azimuth grid point + * - single level data + (e.g. TMP_Z2, PRMSL_L0) + - time, range, azimuth + - Gridded range-azimuth data on a single level + * - pressure level data + (e.g. TMP, HGT) + - time, pressure, range, azimuth + - Gridded range-azimuth data on pressure levels diff --git a/internal/test_unit/config/TCDiagConfig_ian b/internal/test_unit/config/TCDiagConfig_ian index 8c9d199f62..b74fa5f238 100644 --- a/internal/test_unit/config/TCDiagConfig_ian +++ b/internal/test_unit/config/TCDiagConfig_ian @@ -73,7 +73,7 @@ domain_info = [ // // Data censoring and conversion -// May be set separately in each "data.field" entry +// May be set separately in each data "field" array entry // // censor_thresh = []; // censor_val = []; From c1539625919222ef1b3e84e0128831a8231a360b Mon Sep 17 00:00:00 2001 From: Jonathan Vigh Date: Thu, 22 Jun 2023 16:03:03 -0400 Subject: [PATCH 5/8] As per #2558, adding some changes to the documentation. Added more overview and background on the TC-Diag tool and the purpose of diagnostics. Added subsubheadings for the config sections. --- docs/Users_Guide/tc-diag.rst | 40 ++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/docs/Users_Guide/tc-diag.rst b/docs/Users_Guide/tc-diag.rst index 77e117487b..9b171404e2 100644 --- a/docs/Users_Guide/tc-diag.rst +++ b/docs/Users_Guide/tc-diag.rst @@ -16,9 +16,19 @@ Introduction WARNING: Please see the release notes of future MET versions for updates. WARNING: -The TC-Diag tool computes Tropical Cyclone diagnostics using ATCF track and gridded data inputs. TC-Diag is run once for each initialization time. The user provides ATCF track data, along with track filtering criteria as needed, to select one or more tracks to be processed. The user also provides gridded model data from which diagnostics should be computed. Gridded data can be provided for multiple concurrent storms, multiple models, and/or multiple domains (i.e. parent and nest) in a single run. +A diagnosis of the large-scale environment of tropical cyclones (TCs) is foundational for many prediction techniques, including statistical-dynamical forecast aids and techniques based on artificial intelligence. Such diagnostics can also be used by forecasters seeking to understand how a given model's forecast will pan out. Finally, TC diagnostics can be useful in verification to stratify the performance of models in different environmental regimes over a longer period of time, thereby providing useful insights on model biases or deficiencies for model developers and forecasters. -TC-Diag first determines the list of valid times that appear in any one of the tracks. For each valid time, it processes all track points for that time. For each track point, it reads the gridded model fields requested in the configuration file and transforms them gridded data to a range-azimuth cyclindrical coordinates grid. For each domain, it writes the range-azimuth data to a temporary NetCDF file. TC-Diag then calls one or more Python diagnostics scripts, as specified in the configuration file, to compute tropical cyclone diagnostic values. The computed diagnostics values are retrieved from the Python script and stored in memory. +Originally developed for the Statistical Hurricane Intensity Prediction Scheme (SHIPS), and later as a stand-alone package called 'Model Diagnostics', by the Cooperative Institute for Research in the Atmosphere (CIRA), MET now integrates these capabilities into the an extensible framework called the TC-Diag tool. This tool allows users compute diagnostics for the large-scale environment of TCs using ATCF track and gridded model data inputs. Importantly, the tool computes diagnostics along one or more user-specified tracks. The current version of the TC-Diag tool requires that the tracks and fields be self-consistent [i.e., the track should be the model's (or ensemble's) own predicted track(s)]. The reason is that the diagnostics are computed in a coordinate system centered on the model's moving model storm and the current version of the tool does not yet include vortex removal. If the track is not consistent with the underlying fields, the diagnostics output are unlikely to be useful because the model's simulated storm would contaminate the diagnostics calculations. + +.. note:: A future version of the tool will include the capability to remove the model's own vortex, which will allow the user to specify any arbitrary track (such as the operational center's official forecast). Until then, users are advised that the track selected must be consistent with the model's predicted track. + +TC-Diag is run once for each initialization time. The user provides track data (such as one or more ATCF a-deck track files), along with track filtering criteria as needed, to select one or more tracks to be processed. The user also provides gridded model data from which diagnostics should be computed. Gridded data can be provided for multiple concurrent storms, multiple models, and/or multiple domains (i.e. parent and nest) in a single run. + +TC-Diag first determines the list of valid times that appear in any one of the tracks. For each valid time, it processes all track points for that time. For each track point, it reads the gridded model fields requested in the configuration file and transforms the gridded data to a range-azimuth cyclindrical coordinates grid. For each domain, it writes the range-azimuth data to a temporary NetCDF file. + +.. note:: The current version of the tool does not yet include the capabilities described in the next three paragraphs. These additional capabilities are planned to be added in the MET v12.0.0 release later in 2023. + +Once the input data have been processed into the temporary NetCDF files, TC-Diag then calls one or more Python diagnostics scripts, as specified in the configuration file, to compute tropical cyclone diagnostic values. The computed diagnostics values are retrieved from the Python script and stored in memory. After processing all valid times and all corresponding track points, the computed diagnostics are written to ASCII and/or NetCDF output files. If requested in the configuration file, the temporary range-azimuth cylindrical coordinates files are combined into a single NetCDF file and written to the output for each combination of model track and domain. @@ -67,9 +77,10 @@ Optional arguments for tc_diag tc_diag configuration file -------------------------- -The default configuration file for the TC-Diag tool named **TCDiagConfig_default** can be found in the installed *share/met/config/* directory. It is encouraged for users to copy these default files before modifying their contents. The contents of the configuration file are described in the subsections below. +The default configuration file for the TC-Diag tool named **TCDiagConfig_default** can be found in the installed *share/met/config/* directory. Users are encouraged to copy these default files before modifying their contents. The contents of the configuration file are described in the subsections below. -_______________________ +Configuring input tracks and time +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: none @@ -89,7 +100,8 @@ The TC-Diag tool should be configured to filter the input track data (**-deck**) The configuration options listed above are used to filter the input track data down to those that should be processed in the current run. These options are common to multiple MET tools and are described in :numref:`config_options_tc`. -_______________________ +Configuring domain information +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: none @@ -122,7 +134,8 @@ The **diag_script** entry is an array of strings. Each string specifies the path .. note:: As of MET version 11.1.0, no tropical cyclone diagnostics are actually computed or written to the output. -_______________________ +Configuring data censoring and conversion options +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: none @@ -132,7 +145,8 @@ _______________________ These data censoring and conversion options are common to multiple MET tools and are described in :numref:`config_options`. They can be specified separately in each **data.field** array entry, described below. If provided, those operations are performed after reading the gridded data but prior to conveting to the cylindrical coordinate range-azimuth grid. -_______________________ +Configuring fields, levels, and domains +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: none @@ -168,7 +182,8 @@ The **name** and **level** entries are common to multiple MET tools and are desc The **domain** entry is an array of strings. Each string specifies a domain name. If the **domain_info** domain name appears in this **domain** list, then this field will be read from that **domain_info** data source. If **domain** is set to an empty list, then this field will be read from all domain data sources. -_______________________ +Configuring regridding options +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: none @@ -178,7 +193,8 @@ These **regrid** dictionary is common to multiple MET tools and is described in .. note:: As of MET version 11.1.0, the nearest neighbor regridding method is used rather than this configuration file option. -_______________________ +Configuring vortex removal option +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: none @@ -188,7 +204,8 @@ These **vortex_removal** flag entry is a boolean specifying whether or not vorte .. note:: As of MET version 11.1.0, vortex removal logic is not yet supported. -_______________________ +Configuring data output options +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: none @@ -200,7 +217,8 @@ These three flag entries are booleans specifying what output data types should b .. note:: As of MET version 11.1.0, **nc_rng_azi_flag** is the only supported output type. These configuration options will automatically be reset at runtime to the settings listed above. -_______________________ +Configuring MET version, output prefix, and temp directory +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: none From 0266e7af9a4d783c944432e04e2c310046c1777a Mon Sep 17 00:00:00 2001 From: John Halley Gotway Date: Thu, 22 Jun 2023 16:14:45 -0600 Subject: [PATCH 6/8] Update tc-diag.rst Fix underline length warning message --- docs/Users_Guide/tc-diag.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Users_Guide/tc-diag.rst b/docs/Users_Guide/tc-diag.rst index 9b171404e2..45ab8781c3 100644 --- a/docs/Users_Guide/tc-diag.rst +++ b/docs/Users_Guide/tc-diag.rst @@ -101,7 +101,7 @@ The TC-Diag tool should be configured to filter the input track data (**-deck**) The configuration options listed above are used to filter the input track data down to those that should be processed in the current run. These options are common to multiple MET tools and are described in :numref:`config_options_tc`. Configuring domain information -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: none From 8c5df2e2411623f437c59017f014762619d05c84 Mon Sep 17 00:00:00 2001 From: John Halley Gotway Date: Mon, 10 Jul 2023 14:22:28 -0600 Subject: [PATCH 7/8] Per #2558, replace ATCFID with TECH --- docs/Users_Guide/tc-diag.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Users_Guide/tc-diag.rst b/docs/Users_Guide/tc-diag.rst index 45ab8781c3..6061fdcf1c 100644 --- a/docs/Users_Guide/tc-diag.rst +++ b/docs/Users_Guide/tc-diag.rst @@ -253,7 +253,7 @@ When the **nc_rng_azi_flag** configuration entry is set to true, a NetCDF output The NetCDF range-azimuth output is named using the following naming convention: -**tc_diag_STORMID_ATCFID_YYYYMMDDHH_cyl_grid_DOMAIN.nc** where STORMID is the 2-letter basin name, 2-digit storm number, and 4-digit year, ATCFID is the track model name, YYYYMMDDHH is the track initialization time, and DOMAIN is the domain name. +**tc_diag_STORMID_TECH_YYYYMMDDHH_cyl_grid_DOMAIN.nc** where STORMID is the 2-letter basin name, 2-digit storm number, and 4-digit year, TECH is the acronym for the objective technique, YYYYMMDDHH is the track initialization time, and DOMAIN is the domain name. The NetCDF range-azimuth file contains the dimensions and variables shown in :numref:`table_TC-Diag_Dimensions_NetCDF_range_azimuth` and :numref:`table_TC-Diag_Variables_NetCDF_range_azimuth`. From ca8e60d803e9937a67d761dd94ea1c7a144b0a30 Mon Sep 17 00:00:00 2001 From: Jonathan Vigh Date: Tue, 25 Jul 2023 13:23:17 -0400 Subject: [PATCH 8/8] As per #2558, making changes to incorporate Kate Musgrave's feedback on the TC-Diag tool documentation. --- docs/Users_Guide/tc-diag.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/Users_Guide/tc-diag.rst b/docs/Users_Guide/tc-diag.rst index 6061fdcf1c..53c1ee1b0d 100644 --- a/docs/Users_Guide/tc-diag.rst +++ b/docs/Users_Guide/tc-diag.rst @@ -7,7 +7,7 @@ TC-Diag Tool Introduction ============ -.. note:: As of MET version 11.1.0, the TC-Diag tool is still in development. Each time it is run, the warning message listed below is printed. +.. note:: As of MET version 11.1.0, the TC-Diag tool is a beta release that lacks full functionality. The current version of the tool generates intermediate NetCDF output files of the input model’s data transformed onto an azimuth-range grid. When the full functionality of the tc_diag tool is released in MET v12.0.0, the tool will also output environmental diagnostics computed from callable Python scripts. For now, each time it is run, the warning message listed below is printed. .. code-block:: none @@ -18,13 +18,13 @@ Introduction A diagnosis of the large-scale environment of tropical cyclones (TCs) is foundational for many prediction techniques, including statistical-dynamical forecast aids and techniques based on artificial intelligence. Such diagnostics can also be used by forecasters seeking to understand how a given model's forecast will pan out. Finally, TC diagnostics can be useful in verification to stratify the performance of models in different environmental regimes over a longer period of time, thereby providing useful insights on model biases or deficiencies for model developers and forecasters. -Originally developed for the Statistical Hurricane Intensity Prediction Scheme (SHIPS), and later as a stand-alone package called 'Model Diagnostics', by the Cooperative Institute for Research in the Atmosphere (CIRA), MET now integrates these capabilities into the an extensible framework called the TC-Diag tool. This tool allows users compute diagnostics for the large-scale environment of TCs using ATCF track and gridded model data inputs. Importantly, the tool computes diagnostics along one or more user-specified tracks. The current version of the TC-Diag tool requires that the tracks and fields be self-consistent [i.e., the track should be the model's (or ensemble's) own predicted track(s)]. The reason is that the diagnostics are computed in a coordinate system centered on the model's moving model storm and the current version of the tool does not yet include vortex removal. If the track is not consistent with the underlying fields, the diagnostics output are unlikely to be useful because the model's simulated storm would contaminate the diagnostics calculations. +Originally developed for the Statistical Hurricane Intensity Prediction Scheme (SHIPS), and later as a stand-alone package called 'Model Diagnostics', by the Cooperative Institute for Research in the Atmosphere (CIRA), MET now integrates these capabilities into the an extensible framework called the TC-Diag tool. This tool allows users to compute diagnostics for the large-scale environment of TCs using ATCF track and gridded model data inputs. The current version of the TC-Diag tool requires that the tracks and fields be self-consistent [i.e., the track should be the model's (or ensemble's) own predicted track(s)]. The reason is that the diagnostics are computed in a coordinate system centered on the model's moving model storm and the current version of the tool does not yet include vortex removal. If the track is not consistent with the underlying fields, the diagnostics output are unlikely to be useful because the model's simulated storm would contaminate the diagnostics calculations. .. note:: A future version of the tool will include the capability to remove the model's own vortex, which will allow the user to specify any arbitrary track (such as the operational center's official forecast). Until then, users are advised that the track selected must be consistent with the model's predicted track. -TC-Diag is run once for each initialization time. The user provides track data (such as one or more ATCF a-deck track files), along with track filtering criteria as needed, to select one or more tracks to be processed. The user also provides gridded model data from which diagnostics should be computed. Gridded data can be provided for multiple concurrent storms, multiple models, and/or multiple domains (i.e. parent and nest) in a single run. +TC-Diag is run once for each initialization time to produce diagnostics for each user-specified combination of TC tracks and model fields. The user provides track data (such as one or more ATCF a-deck track files), along with track filtering criteria as needed, to select one or more tracks to be processed. The user also provides gridded model data from which diagnostics should be computed. Gridded data can be provided for multiple concurrent storms, multiple models, and/or multiple domains (i.e. parent and nest) in a single run. -TC-Diag first determines the list of valid times that appear in any one of the tracks. For each valid time, it processes all track points for that time. For each track point, it reads the gridded model fields requested in the configuration file and transforms the gridded data to a range-azimuth cyclindrical coordinates grid. For each domain, it writes the range-azimuth data to a temporary NetCDF file. +TC-Diag first determines the list of valid times that appear in any one of the tracks. For each valid time, it processes all track points for that time. For each track point, it reads the gridded model fields requested in the configuration file and transforms the gridded data to a range-azimuth cylindrical coordinates grid. For each domain, it writes the range-azimuth data to a temporary NetCDF file. .. note:: The current version of the tool does not yet include the capabilities described in the next three paragraphs. These additional capabilities are planned to be added in the MET v12.0.0 release later in 2023. @@ -130,7 +130,7 @@ The **n_azimuth** entry is an integer specifying the number of equally spaced az The **delta_range_km** entry is a floating point value specifying the spacing of the range rings in kilometers. -The **diag_script** entry is an array of strings. Each string specifies the path to a Python script to be executed to compute diagnostics from the transformed cyclindrical coordinates data for this domain. While the **diag_script** entry can be specified separately for each **domain_info** array entry, specifying it once at a higher level of context, as seen above, allows the same setting to be applied to all array entries. When multiple Python diagnostics scripts are run, the union of the diagnostics computed are written to the output. +The **diag_script** entry is an array of strings. Each string specifies the path to a Python script to be executed to compute diagnostics from the transformed cylindrical coordinates data for this domain. While the **diag_script** entry can be specified separately for each **domain_info** array entry, specifying it once at a higher level of context, as seen above, allows the same setting to be applied to all array entries. When multiple Python diagnostics scripts are run, the union of the diagnostics computed are written to the output. .. note:: As of MET version 11.1.0, no tropical cyclone diagnostics are actually computed or written to the output. @@ -143,7 +143,7 @@ Configuring data censoring and conversion options censor_val = []; convert(x) = x; -These data censoring and conversion options are common to multiple MET tools and are described in :numref:`config_options`. They can be specified separately in each **data.field** array entry, described below. If provided, those operations are performed after reading the gridded data but prior to conveting to the cylindrical coordinate range-azimuth grid. +These data censoring and conversion options are common to multiple MET tools and are described in :numref:`config_options`. They can be specified separately in each **data.field** array entry, described below. If provided, those operations are performed after reading the gridded data but prior to converting to the cylindrical coordinate range-azimuth grid. Configuring fields, levels, and domains ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -200,7 +200,7 @@ Configuring vortex removal option vortex_removel = FALSE; -These **vortex_removal** flag entry is a boolean specifying whether or not vortex removal logic should be applied. +The **vortex_removal** flag entry is a boolean specifying whether or not vortex removal logic should be applied. .. note:: As of MET version 11.1.0, vortex removal logic is not yet supported.

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