MET Version 4.1

Release Date:

The MET Version 4.1 was released on May 22, 2013.

Release Notes

What's New?

METv4.1 includes several new tools and enhancements:

  • New Tools: MODIS-Regrid, Series-Analysis, and MET-Tropical Cyclone
  • Major Enhancments: Spread-Skill Variance (SSVAR) for Ensemble-Stat

New Tools

  • The new MODIS-Regrid tool reformats gridded MODIS data for use by other MET tools. Building MODIS-Regrid requires the HDF and HDF-EOS libraries.
  • The new Series-Analysis tool performs a grid-to-grid comparison over a series of fields, most commonly a time-series. A user-specified set of statistics are computed over that series for each grid point and are written to a gridded NetCDF output file. This tool may be used to analyze how model performance varies spatially.
  • The new set of MET-Tropical Cyclone (MET-TC) tools performs verification on ATCF (Automated Tropical Cyclone Forecasting) files. The tools compare forecast ATCF files to the National Hurricane Center's (NHC) BEST track data. MET-TC implements and extends the verification logic used by the NHC. See the MET-TC user's guide in the doc sub-directory for more detail. MET-TC consists of 3 tools:
    • TC-DLand precomputes distances to land and writes a gridded NetCDF file.
    • TC-Pairs matches the forecast and observation tracks and writes a Tropical Cyclone Statistics (.tcst) file.
    • TC-Stat reads .tcst files and computes summary statistics.
    • R-script (scripts/Rscripts/plot_tcmpr.R) for filtering and plotting the .tcst files.

Enhancements to Existing Tools

  • Distributed latest set of bug fixes for METv4.0.
  • Fixed two major bugs in MODE:
    • The object areas being reported were artificially inflated.
      See explanation: mode_areas.pdf
    • Areas of bad data were being treated as zero's in the convolution step.
  • Restructured the MODE code to make it more extensible.
  • Enhanced Point-Stat and Ensemble-Stat rejection reason counts to include the duplicate flag logic.
  • Enhanced ASCII2NC by adding support for the little_R point observation format.
  • Enhanced ASCII2NC by adding support for the SURFRAD point observation format, including time-averaging logic.
  • Enhanced MADIS2NC to support PROFILER and MARITIME data file types.
  • Enhanced Plot-Point-Obs by adding the -dot_size option.
  • Enhanced PB2NC, MADIS2NC, and ASCII2NC to pass through the point observation quality control flags and enhanced Point-Stat and Ensemble-Stat to filter the observations by those quality control values.
  • Enhanced Point-Stat and Ensemble-Stat by modifying the logic for the "mask_sid" entry in the configuration file. It now contains a list of station ID's to be treated as a group.
  • Enhanced the duplicate flag logic in Point-Stat and Ensemble-Stat when verifying vertical level fields (e.g. 2-m temperature) against surface message type (e.g. ADPSFC or SFCSHP). Set the observation level value to bad data so that different level values will not be treated as unique observations.
  • Enhanced Ensemble-Stat by adding the new SSVAR (spread-skill variance) output line type for creating ensemble spread-skill plots.
  • Enhanced STAT-Analysis to aggregate multiple SSVAR lines.
  • Enhanced STAT-Analysis by adding the "-by case" option for running jobs once for each unique case entry.
  • Factored map plotting information into data/config/ConfigMapData. Users may specify which maps should be used when the MET tools create plots.


Known Issues and Fixes

All Recommended Updates (Last Updated 09/18/2015)

Retrieve all of the recommended updates for METv4.1 in a tarfile:

  • Download the tarfile METv4.1_patches_20150918.tar.gz
  • Copy it into the top-level METv4.1 directory.
  • Uncompress and untar the file. Please note that the new version of the files in the tarball will overwrite the original version of those files. Any changes you may have made will be lost.
  • Rebuild MET, being sure perform a make clean first.

Summary of Recommended Updates

  • 09/18/2015: Fix Ensemble-Stat segmentation fault for GRIB2 probability fields.
  • 08/19/2014: Update GRIB1 filtering logic when using the GRIB_lvl_typ configuration setting.
  • 08/19/2014: Add support for GRIB2 PDS template number 48 for aerosol data.
  • 08/12/2014: Add support for GRIB2 Scanning Mode value of 80.
  • 07/31/2014: Bug in linear vertical interpolation to point observation levels.
  • 07/31/2014: Bug in handling bad data when vertically interpolating to point observation levels.
  • 07/30/2014: Bug when polyline crosses the international date line.
  • 01/28/2014: Problem compiling MET on NCAR's yellowstone supercomputer.
  • 01/09/2014: Problem parsing times from gridded MET NetCDF files.
  • 11/21/2013: Problem when MODE convex hull can't find next point.
  • 11/18/2013: Update GRIB2 library to handle GRIB2 Table 3.2 value of 1.
  • 10/31/2013: Update series-analysis to be run over a series of length one.
  • 10/24/2013: Bug in ascii2nc when determining the number of unique observation locations.
  • 10/17/2013: Bug in pcp_combine for the -sum option.
  • 10/01/2013: Bug in ascii2nc for long station names.
  • 09/26/2013: Bug when using the GRIB1_rec configuration file setting.
  • 08/27/2013: Fixed the Makefile for the vx_config library.
  • 08/21/2013: Bug in Point-Stat and Grid-Stat when sizing probabilistic output files.
  • 08/06/2013: Bug in GRIB2 support for lat/lon grids.
  • 08/05/2013: Bug in STAT-Analysis when computing aggregated statistics for wind direction errors.
  • 08/01/2013: Bug in parsing the tc_pairs config file.
  • 07/23/2013: Update to virtual temperature bugfix to handle older GDAS data.
  • 07/18/2013: Update to GRIB magic cookie bugfix posted on 06/13/2013.
  • 07/16/2013: Bug in pb2nc selecting observations of virtual temperature instead of sensible temperature.
  • 07/16/2013: Bug in ascii2nc for SURFRAD data allowing station names with embedded whitespace.
  • 07/15/2013: Bug in modis_regrid Makefile assuming that GRIB2 support has been enabled.
  • 06/13/2013: Bug reading GRIB files whose magic cookie isn't at the beginning of the file.
  • 06/03/2013: Bug parsing Mercator grid information from GRIB2 files
  • 05/24/2013: Bug parsing the model initialization time from the NetCDF output of Pinterp
  • 05/24/2013: Update two Makefiles that were failing to clean out the test programs they compiled

Details

Fix Ensemble-Stat segmentation fault forg GRIB2 probability fields.
Posted 09/18/2015

Problem: Ensemble-Stat errors out when writing the output NetCDF ensemble summary file for GRIB2 probability fields. The segmentation fault happens when trying to write the "units" NetCDF variable attribute which is empty.
Solution: The fix is to use the probability units for the NetCDF variable attribute.
Update: met-5.0/src/libcode/vx_data2d_grib2/var_info_grib2.cc

Update GRIB1 filtering logic when using the GRIB_lvl_typ configuration setting.
Posted 08/19/2014

Problem: The GRIB_lvl_typ configuration setting may be used to explicitly specify the GRIB1 level type to be used. However, it was not being applied in the filtering logic correctly.
Solution: The fix is to update the GRIB1 filtering logic so that only those records with the specified level type are retained.
Update: METv4.1/src/libcode/vx_data2d/level_info.cc
Update: METv4.1/src/libcode/vx_data2d/level_info.h
Update: METv4.1/src/libcode/vx_data2d/var_info.cc
Update: METv4.1/src/libcode/vx_data2d_grib/data2d_grib_utils.cc
Update: METv4.1/src/libcode/vx_data2d_grib/data2d_grib_utils.h
Update: METv4.1/src/libcode/vx_data2d_grib/data2d_grib.cc

Add support for GRIB2 PDS template number 48 for aerosol data.
Posted 08/19/2014

Problem: GRIB2 aerosol data produced by NCEP for NGAC uses a PDS template number of 48, which MET GRIB2 interface does not support.
Solution: The fix is to update the MET GRIB2 interface to support the PDS template number of 48 and update the GRIB2 table definitions. Note that g2clib version 1.4.0 or later is also required to support this setting.
Update: METv4.1/src/libcode/vx_data2d_grib2/data2d_grib2.cc
Update: METv4.1/data/table_files/grib2_vars_flat.txt

Add support for GRIB2 Scanning Mode value of 80.
Posted 08/12/2014

Problem: Some GRIB2 data produced for the NWS National Digital Forecast Database (NDFD) use a Scanning Mode of 80, which MET GRIB2 interface does not support.
Solution: The fix is to update the MET GRIB2 interface to support a Scanning Mode value of 80. In addition, retrieve any missing data values specified in the GRIB2 metadata and check them when parsing the data.
Update: METv4.1/src/libcode/vx_data2d_grib2/data2d_grib2.cc

Bug in linear vertical interpolation to point observation levels.
Posted 07/31/2014

Problem: When verifying a range of vertical levels (eg. Z100-500) in Point-Stat and Ensemble-Stat, they first interpolate horizontally to the observation location in the forecast fields above and below the observation's height. Then they interpolate those two values vertically to the observation's height. However, the formula for that linear vertical interpolation contains a bug. The weights for the two values are reversed, meaning that the farther level is weighted more heavily than the closer level.
Solution: The fix is to switch the two weights.
Update: METv4.1/src/basic/vx_util/interp_util.cc

Bug in handling bad data when vertically interpolating to point observation levels.
Posted 07/31/2014

Problem: The Point-Stat and Ensemble-Stat tools are failing to check for bad data after performing horizontal interpolation. When missing data is present in one of the forecast levels above or below the observation level, the missing data value of -9999 is used in the vertical interpolation step, resulting in erroneous interpolated forecast values.
Solution: The fix is to check for bad data before doing the vertical interpolation. When bad data is found, the resulting forecast value is set to bad data, and that matched pair is not used in the verification.
Update: METv4.1/src/libcode/vx_statistics/pair_data_point.cc
Update: METv4.1/src/libcode/vx_statistics/pair_data_ensemble.cc

Bug when polyline crosses the international date line.
Posted 07/30/2014

Problem: MET was not properly handling polylines that crossed the international date line which led to incorrect points being included in the mask.
Solution: The fix is to detect when the polyline includes the international date line and account for it.
Update: METv4.1/src/libcode/vx_analysis_util/mask_poly.h
Update: METv4.1/src/libcode/vx_analysis_util/mask_poly.cc

Problem compiling MET on NCAR's yellowstone supercomputer.
Posted 01/28/2014

Problem: The latest versions of the Intel compilers fail to define the isatty() function which is called by MET in the vx_config and vx_color libraries. This results in compilation errors.
Solution: The fix is to redefine isatty() within the MET libraries and use that version.
Update: METv4.1/src/basic/vx_util/util_constants.h
Update: METv4.1/src/basic/vx_config/lex.config.cc

Problem parsing times from gridded MET NetCDF files.
Posted 01/09/2014

Problem: The initialization and valid times are assigned a bad data value of -9999 when the last variable listed in a gridded MET NetCDF file does not contain the init_time_ut and valid_time_ut variable attributes. The bad data value of -9999 results in a timestamp of 19691231_211321.
Solution: When parsing timing information from gridded MET NetCDF files, only update the times when the corresponding variable attributes are successfully read.
Update: METv4.1/src/libcode/vx_data2d_nc_met/met_file.cc

Problem when MODE convex hull can't find next point.
Posted 11/21/2013

Problem: Users have reported receiving the following intermittent runtime error from the MODE: convex_hull(Polyline &) -> can't find next hull point This typically occurs when MET is compiled with Intel.
Solution: We were able to replicate the behavior and add additional checks to the convex hull routine to prevent the error from occurring. Users who continue to encounter this error message are encouraged to notify us at met_help@ucar.edu.
Update: METv4.1/src/libcode/vx_shapedata/shapedata.cc

Update GRIB2 library to handle GRIB2 Table 3.2 value of 1.
Posted 11/18/2013

Problem: A value of 1 for GRIB2 Table 3.2 means that the radius of the earth is specified in the GRIB2 record itself. MET was erroring out with the message MetGrib2DataFile::data_plane() - unexpected earth shape (1).
Solution: The fix is to update the GRIB2 code to parse the radius of the earth from the GRIB2 record. Also change two error messages in pcp_combine to warnings.
Update: METv4.1/src/tools/core/pcp_combine/pcp_combine.cc
Update: METv4.1/src/libcode/vx_data2d_grib2/data2d_grib2.cc
Update: METv4.1/src/libcode/vx_data2d_grib/data2d_grib.cc

Update series-analysis to be run over a series of length one.
Posted 10/31/2013

Problem: When given a series of length one, the Series-Analysis tool errors out. While this is a very simple case, it should still produce output.
Solution: The fix is to modify the logic to allow it to produce output for a series of length one.
Update: METv4.1/src/tools/core/series_analysis/series_analysis.cc

Bug in ascii2nc when determining the number of unique observation locations.
Posted 10/24/2013

Problem: In METv4.1, ascii2nc determines unique observation locations by checking the message type, station name, and timestamp. Earlier versions of ascii2nc also checked the latitude, longitude, and elevation values. In METv4.1, observations with the same message type, station name, and timestamp but differing latitude, longitude, or elevation values are being assigned to the same observation location.
Solution: The fix is to add back in that additional checking when determining unique observation locations.
Update: METv4.1/src/tools/other/ascii2nc/file_handler.cc

Bug in pcp_combine for the -sum option.
Posted 10/17/2013

Problem: When reading through the search directory (specified by the -pcpdir option) for matching files, pcp_combine opens each data file but fails to close it. On some systems this can lead to a runtime error with too many file handles open.
Solution: The fix is to close the files after reading their contents.
Update: METv4.1/src/tools/core/pcp_combine/pcp_combine.cc
And then recompile MET.

Bug in ascii2nc for long station names.
Posted 10/01/2013

Problem: The little_R file format allows for station names up to 40 characters in length. The ascii2nc tool expects a maximum of 30 characters, resulting in the following runtime error message:
NetCDF: Start+count exceeds dimension bound
Solution: The fix is to extend the maximum string length to 40 characters and check the length of the station name. If it's too long, print a warning message and only write the first 40 characters.
Update: METv4.1/src/tools/other/ascii2nc/file_handler.cc
And then recompile MET.

Bug when using the GRIB1_rec configuration file setting.
Posted 09/26/2013

Problem: The GRIB1_rec and GRIB1_ptv arguments to the GRIB1 library lookup function were transposed causing the usage of those configuration file options to fail.
Solution: The fix is to correct the order of those arguments.
Update: METv4.1/src/libcode/vx_data2d_grib/var_info_grib.cc
And then recompile MET.

Fixed the Makefile for the vx_config library.
Posted 08/27/2013

Problem: Three of the compilation commands in the Makefile for the vx_config library were missing $(CXX_FLAGS). So the compiler flags were not being properly applied.
Solution: The fix is to add $(CXX_FLAGS) to those lines.
Update: METv4.1/src/basic/vx_config/Makefile
And then recompile MET.

Bug in Point-Stat and Grid-Stat when sizing probabilistic output files.
Posted 08/21/2013

Problem: Running Point-Stat and Grid-Stat with twelve or more probabilistic thresholds results in a range check error from the AsciiTable class. The logic determining the number of necessary output columns for probabilistic data is flawed.
Solution: The fix is to update the logic to ensure that the number of output columns is correctly computed based on the number of thresholds chosen.
Update: METv4.1/src/tools/core/point_stat/point_stat.cc
Update: METv4.1/src/tools/core/grid_stat/grid_stat.cc
And then recompile MET.

Bug in GRIB2 support for lat/lon grids.
Posted 08/06/2013

Problem: For some lat/lon grids in GRIB2 files, the dx and dy parameters are not set. This is indicated by the resolution and component flag. MET was assuming that dx and dy were set correctly.
Solution: The fix is to check the resolution and component flag to see if dx and dy are set. If they are, use their values. Otherwise, compute them using the min/max lat/lon and dx/dy values.
Update: METv4.1/src/libcode/vx_data2d_grib2/data2d_grib2.cc
And then recompile MET.

Bug in STAT-Analysis when computing aggregated statistics for wind direction errors.
Posted 08/05/2013

Problem: Running a STAT-Analysis job to aggregate wind direction errors (-job aggregate_stat -line_type VL1L2 -out_line_type WDIR) results in this runtime error:
AsciiTable::rc_to_n() -> range check error
Solution: This is caused by a bug introduced in METv4.1. The fix is to correct how the row and column indices are handled when writing the job output.
Update: METv4.1/src/tools/core/stat_analysis/stat_analysis_job.cc
And then recompile MET.

Bug in parsing the tc_pairs config file.
Posted 08/01/2013

Problem: A cut-and-paste error caused the tc_pairs tool to incorrectly parse the cyclone and storm_name configuration file entries.
Solution: The fix is to update the parsing to store their values correctly.
Update: METv4.1/src/tools/tc_utils/tc_pairs/tc_pairs_conf_info.cc
And then recompile MET.

Update to virtual temperature bugfix to handle older GDAS data.
Posted 07/23/2013

Problem: Older GDAS data makes use of program code 10 which may exist at the top of the event stack after the temperature has already been converted from sensible to virtual.
Solution: The fix is to search through the entire event stack looking for the VIRTMP processing step and use the observation value immediately prior to that. Also include more diagnostic logging information at verbosity level 4.
Update: METv4.1/src/tools/other/pb2nc/pb2nc.cc
And then recompile MET.
See details in PB2NC Virtual Temperature write-up.

Update to GRIB magic cookie bugfix posted on 06/13/2013.
Posted 07/18/2013

Problem: For the GRIB magic cookie bugfix, MET checks the first 256 bytes of files to determine if they are in GRIB format. However, attempting to read 256 bytes from files that are smaller than that results in a runtime error.
Solution: The fix is to compute the minimum of the 256 and the file size and only read that number of bytes when checking for the GRIB magic cookie.
Add: METv4.1/src/basic/vx_util/file_size.h
Add: METv4.1/src/basic/vx_util/file_size.cc
Update: METv4.1/src/basic/vx_util/vx_util.h
Update: METv4.1/src/basic/vx_util/Makefile
Update: METv4.1/src/libcode/vx_data2d_factory/is_grib_file.cc
And then recompile MET.

Bug in pb2nc selecting observations of virtual temperature instead of sensible temperature.
Posted 07/16/2013

Problem: By default, the pb2nc tool is configured to select PREPBUFR observations from the top of the event stack. However, it is often the case that for temperature, the observation at the top of the stack has gone through the VIRTMP PREPBUFR processing step and has been converted to virtual temperature. Only observations of sensible temperature should be used for verification.
Solution: The fix is to check the program and reason codes that correspond to the observation. If the program code is 8 and the reason code is 3, do not use that observation at all since all versions of it contain virtual temperature. If the program code is 8 and the reason code is anything other than 3, step down the event stack looking for a program code that isn't 8. Select the temperature value for that event which contains sensible temperature.
Update: METv4.1/src/tools/other/pb2nc/pb2nc.cc
And then recompile MET.

Bug in ascii2nc for SURFRAD data allowing station names with embedded whitespace.
Posted 07/16/2013

Problem: The station names used for SURFRAD sometimes contain whitespace. If they are propagated through the rest of MET this will cause problems in the output of point_stat which is space-delimited.
Solution: The fix is to modify ascii2nc to replace any embedded whitespace in the SURFRAD station names with underscores.
Update: METv4.1/src/tools/other/ascii2nc/surfrad_handler.cc
And then recompile MET.

Bug in modis_regrid Makefile assuming that GRIB2 support has been enabled.
Posted 07/15/2013

Problem: The Makefile for the modis_regrid tool links in the GRIB2 libraries directly rather than using the GRIB2 build variables defined in the top-level MET directory.
Solution: The fix is to update that Makefile to use the correct GRIB2 build variables.
Update: METv4.1/src/tools/other/modis_regrid/Makefile
And then recompile MET.

Bug reading GRIB files whose magic cookie isn't at the beginning of the file.
Posted 06/13/2013

Problem: The MET library code assumed that the GRIB magic cookie would appear at the very beginning of the file.
Solution: The fix is to search the first 256 characters of the file for the GRIB magic cookie.
Update: METv4.1/src/libcode/vx_data2d_factory/is_grib_file.cc
And then recompile MET.

Bug parsing Mercator grid information from GRIB2 files.
Posted 06/03/2013

Problem: The MET GRIB2 library code was not parsing Mercator grid information correctly.
Solution: Correct the GRIB2 Mercator grid information parsing.
Update: METv4.1/src/libcode/vx_data2d_grib2/data2d_grib2.cc
And then recompile MET.

Bug parsing the model initialization time from the NetCDF output of Pinterp.
Posted 05/24/2013

Problem: MET was parsing the model initialization time from the SIMULATION_START_DATE global attribute when it should have been using the START_DATE global attribute. For a cold start these values are the same, but when cycling they differ.
Solution: The fix is to parse the initialization time from the START_DATE global attribute.
Update: METv4.1/src/libcode/vx_data2d_nc_pinterp/pinterp_file.cc
And then recompile MET.

Update two Makefiles that were failing to clean out the test programs they compiled.
Posted 05/24/2013

Problem: Update the Makefiles for the vx_util and vx_tc_util libraries to clean out the test programs they compiled.
Solution: Minor updates to two Makefiles.
Update: METv4.1/src/basic/vx_util/Makefile
Update: METv4.1/src/libcode/vx_tc_util/Makefile
And then recompile MET.