Skip to content

Commit

Permalink
Feature #2471 v12.0.0_beta2 (#2744)
Browse files Browse the repository at this point in the history
  • Loading branch information
JohnHalleyGotway committed Nov 17, 2023
1 parent 8a55188 commit 1e52421
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 17 deletions.
41 changes: 37 additions & 4 deletions docs/Users_Guide/release-notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,39 @@ When applicable, release notes are followed by the GitHub issue number which des
enhancement, or new feature (`MET GitHub issues <https://github.com/dtcenter/MET/issues>`_).
Important issues are listed **in bold** for emphasis.

MET Version 12.0.0-beta2 Release Notes (20231117)
-------------------------------------------------

.. dropdown:: Repository, build, and test

* Enhance METbaseimage to compile the ecKit and Atlas libraries (`METbaseimage#13 <https://github.com/dtcenter/METbaseimage/issues/13>`_).
* Enhance METbaseimage to install the YAML Python package (`METbaseimage#15 <https://github.com/dtcenter/METbaseimage/issues/15>`_).
* **Enhance MET to compile and link against the Proj library** (`#2669 <https://github.com/dtcenter/MET/issues/2669>`_).
* **Enhance MET to compile and link against the Atlas and ecKit libraries** (`#2574 <https://github.com/dtcenter/MET/issues/2574>`_).
* **Enhance "compile_MET_all.sh" to support the new Intel oneAPI compilers and upgrade dependent library versions as needed** (`#2611 <https://github.com/dtcenter/MET/issues/2611>`_).
* Upgrade SonarQube server version from 9.8 to 10.2 (`#2689 <https://github.com/dtcenter/MET/issues/2689>`_).
* Update the token for upgraded SonarQube server (`#2702 <https://github.com/dtcenter/MET/issues/2702>`_).

.. dropdown:: Bugfixes

* Bugfix: Correct the usage statement for Point2Grid (`#2666 <https://github.com/dtcenter/MET/issues/2666>`_).
* Bugfix: Investigate unexpected number of derived HPBL observations in PB2NC (`#2687 <https://github.com/dtcenter/MET/issues/2687>`_).
* Bugfix: Fix the Point-Stat CNT header line typo causing duplicate "SI_BCL" column names (`#2730 <https://github.com/dtcenter/MET/issues/2730>`_).

.. dropdown:: Enhancements

* Documentation: Make Headers Consistent in All MET Guides (`#2716 <https://github.com/dtcenter/MET/issues/2716>`_).
* Document the use of temporary files in MET and reduce it as much as reasonably possible (`#2690 <https://github.com/dtcenter/MET/issues/2690>`_).
* **Eliminate the use of temporary files in the vx_config library** (`#2691 <https://github.com/dtcenter/MET/issues/2691>`_).
* **Add support for NetCDF files following the UGRID convention** (`#2231 <https://github.com/dtcenter/MET/issues/2231>`_).
* Enhance TC-Pairs to include storm diagnostics in consensus track output (`#2476 <https://github.com/dtcenter/MET/issues/2476>`_).
* Refine TC-Pairs consensus diagnostics configuration options (`#2699 <https://github.com/dtcenter/MET/issues/2699>`_).
* **Enhance TC-Diag to actually compute and write diagnostics** (`#2550 <https://github.com/dtcenter/MET/issues/2550>`_).
* **Enhance MODE to use OpenMP to make the convolution step faster** (`#2724 <https://github.com/dtcenter/MET/issues/2724>`_).
* Enhance Multivariate MODE to change the default "merge_flag" setting to NONE (`#2708 <https://github.com/dtcenter/MET/issues/2708>`_).
* **Enhance Multivariate MODE to support differing numbers of forecast and observation input fields** (`#2706 <https://github.com/dtcenter/MET/issues/2706>`_).
* Fix the SonarQube findings for MET v12.0 (`#2673 <https://github.com/dtcenter/MET/issues/2673>`_).

MET Version 12.0.0-beta1 Release Notes (20230915)
-------------------------------------------------

Expand Down Expand Up @@ -40,8 +73,8 @@ MET Upgrade Instructions
MET Version 12.0.0 Upgrade Instructions
---------------------------------------

* MET Version 12.0.0 introduces three new required dependencies:
* MET Version 12.0.0 introduces one new required and two new optional dependencies:

* The `Proj <https://proj.org/>`_ library dependency was added in the beta1 development cycle (`#2669 <https://github.com/dtcenter/MET/issues/2669>`_).
* The `Atlas <https://sites.ecmwf.int/docs/atlas/>`_ library dependency will be added in the beta2 development cycle (`#2574 <https://github.com/dtcenter/MET/issues/2574>`_).
* The `ecKit <https://github.com/ecmwf/eckit>`_ library dependency will be added in the beta2 development cycle (`#2574 <https://github.com/dtcenter/MET/issues/2574>`_).
* The required `Proj <https://proj.org/>`_ library dependency was added in the 12.0.0-beta1 development cycle (`#2669 <https://github.com/dtcenter/MET/issues/2669>`_).
* The optional `Atlas <https://sites.ecmwf.int/docs/atlas/>`_ library dependency was added in the 12.0.0-beta2 development cycle (`#2574 <https://github.com/dtcenter/MET/issues/2574>`_).
* The optional `ecKit <https://github.com/ecmwf/eckit>`_ library dependency was added in the 12.0.0-beta2 development cycle (`#2574 <https://github.com/dtcenter/MET/issues/2574>`_).
22 changes: 11 additions & 11 deletions docs/Users_Guide/wavelet-stat.rst
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ The Intensity Scale approach can be summarized in the following 5 steps:

1. For each threshold, the forecast and observation fields are transformed into binary fields: where the grid-point precipitation value meets the threshold criteria it is assigned 1, where the threshold criteria are not met it is assigned 0. This can also be done with no thresholds indicated at all and in that case the grid-point values are not transformed to binary fields and instead the raw data is used as is for statistics. :numref:`wavelet-stat_NIMROD_3h_fcst` illustrates an example of a forecast and observation fields, and their corresponding binary fields for a threshold of 1mm/h. This case shows an intense storm of the scale of 160 km displaced almost its entire length. The displacement error is clearly visible from the binary field difference and the contingency table image obtained for the same threshold :numref:`contingency_table_counts`.

2. The binary forecast and observation fields obtained from the thresholding are then decomposed into the sum of components on different scales, by using a 2D Haar wavelet filter (:numref:`wavelet-stat_NIMROD_diff`). Note that the scale components are fields, and their sum adds up to the original binary field. For a forecast defined over square domain of :math:`\mathbf{2^n} **x** :math:`\mathbf{2^n} grid-points, the scale components are **n+1: n** mother wavelet components + the largest father wavelet (or scale-function) component. The **n** mother wavelet components have resolution equal to **1, 2, 4, ...** :math:`\mathbf{2^{n-1}}` grid-points. The largest father wavelet component is a constant field over the :math:`\mathbf{2^n} **x** :math:`\mathbf{2^n} grid-point domain with value equal to the field mean.
2. The binary forecast and observation fields obtained from the thresholding are then decomposed into the sum of components on different scales, by using a 2D Haar wavelet filter (:numref:`wavelet-stat_NIMROD_diff`). Note that the scale components are fields, and their sum adds up to the original binary field. For a forecast defined over square domain of :math:`{2^n} \times {2^n}` grid-points, the scale components are **n+1: n** mother wavelet components + the largest father wavelet (or scale-function) component. The **n** mother wavelet components have resolution equal to **1, 2, 4, ...** :math:`{2^{n-1}}` grid-points. The largest father wavelet component is a constant field over the :math:`{2^n} \times {2^n}` grid-point domain with value equal to the field mean.

**Note** that the wavelet transform is a linear operator: this implies that the difference of the spatial scale components of the binary forecast and observation fields (:numref:`wavelet-stat_NIMROD_diff`) are equal to the spatial scale components of the difference of the binary forecast and observation fields (:numref:`wavelet-stat_NIMROD_binary_fcst_and_obs`), and these scale components also add up to the original binary field difference (:numref:`wavelet-stat_NIMROD_3h_fcst`). The intensity-scale technique considers thus the spatial scale of the error. For the case illustrated (:numref:`wavelet-stat_NIMROD_3h_fcst` and :numref:`wavelet-stat_NIMROD_binary_fcst_and_obs`) note the large error associated at the scale of 160 km, due the storm, 160km displaced almost its entire length.

Expand All @@ -51,7 +51,7 @@ The Intensity-Scale (IS) skill score evaluates the forecast skill as a function

.. _contingency_table_counts:

.. list-table:: 2x2 contingency table in terms of counts. The :math:`\mathbf{n}_\mathbf{ij}` values in the table represent the counts in each forecast-observation category, where **i** represents the forecast and **j** represents the observations.
.. list-table:: 2x2 contingency table in terms of counts. The :math:`{n}_{ij}` values in the table represent the counts in each forecast-observation category, where **i** represents the forecast and **j** represents the observations.
:widths: auto
:header-rows: 1

Expand Down Expand Up @@ -129,18 +129,18 @@ Note that the energy squared of the observation binary field is identical to the
The Spatial Domain Constraints
------------------------------

The Intensity-Scale technique is constrained by the fact that orthogonal wavelets (discrete wavelet transforms) are usually performed dyadic domains, square domains of :math:`\mathbf{2^n} **x** :math:`\mathbf{2^n} grid-points. The Wavelet-Stat tool handles this issue based on settings in the configuration file by defining tiles of dimensions :math:`\mathbf{2^n} **x** :math:`\mathbf{2^n} over the input domain in the following ways:
The Intensity-Scale technique is constrained by the fact that orthogonal wavelets (discrete wavelet transforms) are usually performed dyadic domains, square domains of :math:`{2^n} \times {2^n}` grid-points. The Wavelet-Stat tool handles this issue based on settings in the configuration file by defining tiles of dimensions :math:`{2^n} \times {2^n}` over the input domain in the following ways:

1. User-Defined Tiling: The user may define one or more tiles of size :math:`\mathbf{2^n} **x** :math:`\mathbf{2^n} over their domain to be applied. This is done by selecting the grid coordinates for the lower-left corner of the tile(s) and the tile dimension to be used. If the user specifies more than one tile, the Intensity-Scale method will be applied to each tile separately. At the end, the results will automatically be aggregated across all the tiles and written out with the results for each of the individual tiles. Users are encouraged to select tiles which consist entirely of valid data.
1. User-Defined Tiling: The user may define one or more tiles of size :math:`{2^n} \times {2^n}` over their domain to be applied. This is done by selecting the grid coordinates for the lower-left corner of the tile(s) and the tile dimension to be used. If the user specifies more than one tile, the Intensity-Scale method will be applied to each tile separately. At the end, the results will automatically be aggregated across all the tiles and written out with the results for each of the individual tiles. Users are encouraged to select tiles which consist entirely of valid data.

2. Automated Tiling: This tiling method is essentially the same as the user-defined tiling method listed above except that the tool automatically selects the location and size of the tile(s) to be applied. It figures out the maximum tile of dimension :math:`\mathbf{2^n} **x** :math:`\mathbf{2^n} that fits within the domain and places the tile at the center of the domain. For domains that are very elongated in one direction, it defines as many of these tiles as possible that fit within the domain.
2. Automated Tiling: This tiling method is essentially the same as the user-defined tiling method listed above except that the tool automatically selects the location and size of the tile(s) to be applied. It figures out the maximum tile of dimension :math:`{2^n} \times {2^n}` that fits within the domain and places the tile at the center of the domain. For domains that are very elongated in one direction, it defines as many of these tiles as possible that fit within the domain.

3. Padding: If the domain size is only slightly smaller than :math:`\mathbf{2^n} **x** :math:`\mathbf{2^n}, for certain variables (e.g. precipitation), it is advisable to expand the domain out to :math:`\mathbf{2^n} **x** :math:`\mathbf{2^n} grid-points by adding extra rows and/or columns of fill data. For precipitation variables, a fill value of zero is used. For continuous variables, such as temperature, the fill value is defined as the mean of the valid data in the rest of the field. A drawback to the padding method is the introduction of artificial data into the original field. Padding should only be used when a very small number of rows and/or columns need to be added.
3. Padding: If the domain size is only slightly smaller than :math:`{2^n} \times {2^n}`, for certain variables (e.g. precipitation), it is advisable to expand the domain out to :math:`{2^n} \times {2^n}` grid-points by adding extra rows and/or columns of fill data. For precipitation variables, a fill value of zero is used. For continuous variables, such as temperature, the fill value is defined as the mean of the valid data in the rest of the field. A drawback to the padding method is the introduction of artificial data into the original field. Padding should only be used when a very small number of rows and/or columns need to be added.

Aggregation of Statistics on Multiple Cases
-------------------------------------------

The Stat-Analysis tool aggregates the intensity scale technique results. Since the results are scale-dependent, it is sensible to aggregate results from multiple model runs (e.g. daily runs for a season) on the same spatial domain, so that the scale components for each singular case will be the same number, and the domain, if not a square domain of :math:`\mathbf{2^n} **x** :math:`\mathbf{2^n} grid-points, will be treated in the same fashion. Similarly, the intensity thresholds for each run should all be the same.
The Stat-Analysis tool aggregates the intensity scale technique results. Since the results are scale-dependent, it is sensible to aggregate results from multiple model runs (e.g. daily runs for a season) on the same spatial domain, so that the scale components for each singular case will be the same number, and the domain, if not a square domain of :math:`{2^n} \times {2^n}` grid-points, will be treated in the same fashion. Similarly, the intensity thresholds for each run should all be the same.

The MSE and forecast and observation squared energy for each scale and thresholds are aggregated simply with a weighted average, where weights are proportional to the number of grid-points used in each single run to evaluate the statistics. If the same domain is always used (and it should) the weights result all the same, and the weighted averaging is a simple mean. For each threshold, the aggregated Br is equal to the aggregated squared energy of the binary observation field, and the aggregated FBI is obtained as the ratio of the aggregated squared energies of the forecast and observation binary fields. From aggregated Br and FBI, the MSErandom for the aggregated runs can be evaluated using the same formula as for the single run. Finally, the Intensity-Scale Skill Score is evaluated by using the aggregated statistics within the same formula used for the single case.

Expand Down Expand Up @@ -263,7 +263,7 @@ The **grid_decomp_flag** variable specifies how tiling should be performed:

• **TILE** indicates that the user-defined tiles should be applied.

• **PAD** indicated that the data should be padded out to the nearest dimension of :math:`\mathbf{2^n} **x** :math:`\mathbf{2^n}
• **PAD** indicated that the data should be padded out to the nearest dimension of :math:`{2^n} \times {2^n}`

The **width** and **location** variables allow users to manually define the tiles of dimension they would like to apply. The x_ll and y_ll variables specify the location of one or more lower-left tile grid (x, y) points.

Expand Down Expand Up @@ -480,11 +480,11 @@ The dimensions and variables included in the wavelet_stat NetCDF files are descr
* - NetCDF Dimension
- Description
* - x
- Dimension of the tile which equals :math:`\mathbf{2^n}`
- Dimension of the tile which equals :math:`{2^n}`
* - y
- Dimension of the tile which equals :math:`\mathbf{2^n}`
- Dimension of the tile which equals :math:`{2^n}`
* - scale
- Dimension for the number of scales. This is set to **n+2**, where :math:`\mathbf{2^n}` is the tile dimension. The 2 extra scales are for the binary image and the wavelet averaged over the whole tile.
- Dimension for the number of scales. This is set to **n+2**, where :math:`{2^n}` is the tile dimension. The 2 extra scales are for the binary image and the wavelet averaged over the whole tile.
* - tile
- Dimension for the number of tiles used

Expand Down
4 changes: 2 additions & 2 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@
project = 'MET'
author = 'UCAR/NCAR, NOAA, CSU/CIRA, and CU/CIRES'
author_list = 'Prestopnik, J., H. Soh, L. Goodrich, B. Brown, R. Bullock, J. Halley Gotway, K. Newman, J. Opatz, T. Jensen'
version = '12.0.0-beta1'
version = '12.0.0-beta2'
verinfo = version
release = f'{version}'
release_year = '2023'
release_date = f'{release_year}-09-15'
release_date = f'{release_year}-11-17'
copyright = f'{release_year}, {author}'

# -- General configuration ---------------------------------------------------
Expand Down

0 comments on commit 1e52421

Please sign in to comment.