Skip to content

Adding I/O for direct analysis of near-surface wind gust for RRFS-based 3DRTMA#730

Merged
ShunLiu-NOAA merged 10 commits into
NOAA-EMC:developfrom
GangZhao-NOAA:feature/windgust_in_3dvar_for_3drtma
Apr 5, 2024
Merged

Adding I/O for direct analysis of near-surface wind gust for RRFS-based 3DRTMA#730
ShunLiu-NOAA merged 10 commits into
NOAA-EMC:developfrom
GangZhao-NOAA:feature/windgust_in_3dvar_for_3drtma

Conversation

@GangZhao-NOAA
Copy link
Copy Markdown
Contributor

@GangZhao-NOAA GangZhao-NOAA commented Mar 27, 2024

Description

To improve the analysis of the near-surface wind gust in 3DRTMA, the observations of near-surface wind gust would be analyzed directly in GSI (3DVar and Hybrid 3DEnVar), instead of being a derived product from the near-surface wind analysis.

Since the core subroutines for direct variational assimilation of wind gust (e.g., setupgust.f90, intgust.f90, stpgust.f90, etc.) had already been implemented in GSI for 2DRTMA, so in the work the development in GSI mainly focus on adding I/O of 2-D wind gust firstguess and analysis fields for RRFS-based 3DRTMA, and some minor modifications in observation and background error for wind gust, options to control the analysis of wind gust, etc.

This PR is to address the issue #726 : Adding I/O for direct analysis of near-surface wind gust for RRFS-based 3DRTMA
Fixes #726
Type of change

Please delete options that are not relevant.

  • New feature (non-breaking change which adds functionality)

How Has This Been Tested?

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • New and existing tests pass with my changes
    tested with a real case - 2024-02-20_12:00Z,
  1. dry-run (using my updated GSI code with wind gust analysis, but actually no wind gust obs is analyzed, so-called dryrun) is compared to control-run (original GSI code running without wind gust obs): the results are identical. This indicates that if without analyzing wind-gust obs, then the updated code generates the analysis identical to the analysis of original/control code. Or say, the added code does not have influence on the other part of code.
  2. real case run with updated GSI code to analyze the obs of wind gust:
    The following figure shows the used observations of near-surface wind gust:
    var_obs_2024022012_gust_used_maprll_datll_reg_ncf
    the following figure shows the analysis increments:
    GUST_hyb_hwllp90_corptuned_inc_incrintrp_maprll_datrll_reg_grb2
  • Any dependent changes have been merged and published
  • Regression tests on WCOSS2 (Cactus) and Hera (Rocky-8) : my updated GSI commit #f91f247d) vs control/original GSI code (commit #6d9ebbb7)
    Here is the reports of the regression tests on WCOSS2 (Cactus):
[gang.zhao@clogin02:build] (feature/windgust_in_3dvar_for_3drtma)$ ctest -j 7
Test project /lfs/h2/emc/da/save/gang.zhao/WorkDir/ProdGSI_Dev/gsi_dev/build
    Start 1: global_4denvar
    Start 2: rtma
    Start 3: rrfs_3denvar_glbens
    Start 4: netcdf_fv3_regional
    Start 5: hafs_4denvar_glbens
    Start 6: hafs_3denvar_hybens
    Start 7: global_enkf
1/7 Test #4: netcdf_fv3_regional ..............   Passed  483.15 sec
2/7 Test #3: rrfs_3denvar_glbens ..............   Passed  486.74 sec
3/7 Test #7: global_enkf ......................   Passed  850.98 sec
4/7 Test #2: rtma .............................   Passed  970.28 sec
5/7 Test #6: hafs_3denvar_hybens ..............   Passed  1152.82 sec
6/7 Test #5: hafs_4denvar_glbens ..............   Passed  1213.93 sec
7/7 Test #1: global_4denvar ...................   Passed  1683.16 sec

100% tests passed, 0 tests failed out of 7

Total Test time (real) = 1683.19 sec

Here is the reports of the regression tests on Hera (Rocky8):

(base) [Gang.Zhao@hfe11:build] (feature/windgust_in_3dvar_for_3drtma)$ ctest -j 7
Test project /scratch1/NCEPDEV/da/Gang.Zhao/ProdGSI_dev/gsi_dev/build
    Start 1: global_4denvar
    Start 2: rtma
    Start 3: rrfs_3denvar_glbens
    Start 4: netcdf_fv3_regional
    Start 5: hafs_4denvar_glbens
    Start 6: hafs_3denvar_hybens
    Start 7: global_enkf
1/7 Test #4: netcdf_fv3_regional ..............   Passed  491.53 sec
2/7 Test #3: rrfs_3denvar_glbens ..............***Failed  495.27 sec
3/7 Test #2: rtma .............................   Passed  982.45 sec
4/7 Test #6: hafs_3denvar_hybens ..............   Passed  1168.99 sec
5/7 Test #7: global_enkf ......................   Passed  1239.77 sec
6/7 Test #5: hafs_4denvar_glbens ..............***Failed  1347.87 sec
7/7 Test #1: global_4denvar ...................   Passed  1974.45 sec

71% tests passed, 2 tests failed out of 7

Total Test time (real) = 1974.91 sec

The following tests FAILED:
          3 - rrfs_3denvar_glbens (Failed)
          5 - hafs_4denvar_glbens (Failed)
Errors while running CTest
Output from these tests are in: /scratch1/NCEPDEV/da/Gang.Zhao/ProdGSI_dev/gsi_dev/build/Testing/Temporary/LastTest.log
Use "--rerun-failed --output-on-failure" to re-run the failed cases verbosely.
(base) [Gang.Zhao@hfe11:build] (feature/windgust_in_3dvar_for_3drtma)$ ctest -R rrfs_3denvar_glbens
Test project /scratch1/NCEPDEV/da/Gang.Zhao/ProdGSI_dev/gsi_dev/build
    Start 3: rrfs_3denvar_glbens
1/1 Test #3: rrfs_3denvar_glbens ..............   Passed  430.52 sec

100% tests passed, 0 tests failed out of 1

Total Test time (real) = 430.55 sec
(base) [Gang.Zhao@hfe11:build] (feature/windgust_in_3dvar_for_3drtma)$ ctest -R hafs_4denvar_glbens
Test project /scratch1/NCEPDEV/da/Gang.Zhao/ProdGSI_dev/gsi_dev/build
    Start 5: hafs_4denvar_glbens
1/1 Test #5: hafs_4denvar_glbens ..............   Passed  1225.37 sec

100% tests passed, 0 tests failed out of 1

Total Test time (real) = 1225.39 sec

Note:
_When I was running the regression tests, GSI code was just updated to the latest commit #b53740a7. Considering the frequent update in EMC GSI code recently and saving the time, after this PR has been reviewed and approved by peer-reviewers, I will update the code to latest EMC GSI commit, then re-run the regression tests for final approval.

Copy link
Copy Markdown

@AnnetteGibbs-NOAA AnnetteGibbs-NOAA left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good Gang.

@TingLei-NOAA
Copy link
Copy Markdown
Contributor

TingLei-NOAA commented Apr 2, 2024

@GangZhao-NOAA Updated version: where is the updated surface wind stored ? if they are in fv3_sfcdata, should this change cause regional regression tests fail if the regression tests compare those files?

Comment thread src/gsi/rapidrefresh_cldsurf_mod.f90 Outdated
Comment thread src/gsi/m_berror_stats_reg.f90 Outdated
Comment thread src/gsi/read_prepbufr.f90
Comment thread src/gsi/read_prepbufr.f90
@GangZhao-NOAA
Copy link
Copy Markdown
Contributor Author

GangZhao-NOAA commented Apr 4, 2024 via email

@GangZhao-NOAA
Copy link
Copy Markdown
Contributor Author

@TingLei-NOAA
Hi Ting,

Thank you so much for diving in the "cplr_get_fv3_regional_ensperts.f90" and confirming that the ensemble perturbations arrays (used to provide ensemble error covariance) are initialized as zeros (in subroutine get_fv3_regional_ensperts_run)
en_perts(n,1,m)%valuesr4 = zero
Then when running GSI in hybrid envar mode, it is safe for these analysis variables which are NOT available in ensemble background fields yet, such as for significant wave height, 10-m wind gust. It is sure that the ensemble variances for these variables are pure zero in hybrid run.

Thanks again!

-Gang

Copy link
Copy Markdown
Contributor

@TingLei-NOAA TingLei-NOAA left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@GangZhao-NOAA Thanks for doing this development with a clean "GSI " style.
Also thanks for your explanation/clarifications. Now, all look good to me.

adding more comments to explain the usage of
corp_gust/hwllp_gust/oerr_gust for analysis of wind gust in 3drtma.
    adding more comments to explain the usage of
    corp_gust/hwllp_gust/oerr_gust for analysis of wind gust in 3drtma.
@GangZhao-NOAA
Copy link
Copy Markdown
Contributor Author

  • My GSI code was updated:
  1. merging the latest version (#db477e36) of "develop" branch into my GSI code;
  2. Based on feedback from peer code reviewers, some minor modifications (more comments to explain the usage of corp_gust/hwllp_gust/oerr_gust) were added in the code;
  • Then running with same real case data, the results (cost/grad in fort.220, obs-fitting stats in fort.201~204, fort.218, fort.228) from newly-updated code #e1512de3 and previous commit #f91f247d are identical;

  • Running regression tests on Hera and WCOSS2 (updated GSI #e1512de3 vs control code of GSI #db477e36) :
    On hera: all 7 tasks passed.

(base) [Gang.Zhao@hfe02:build] (feature/windgust_in_3dvar_for_3drtma *)$ ctest -j 7
Test project /scratch1/NCEPDEV/da/Gang.Zhao/ProdGSI_dev/gsi_dev/build
    Start 1: global_4denvar
    Start 2: rtma
    Start 3: rrfs_3denvar_glbens
    Start 4: netcdf_fv3_regional
    Start 5: hafs_4denvar_glbens
    Start 6: hafs_3denvar_hybens
    Start 7: global_enkf
1/7 Test #4: netcdf_fv3_regional ..............   Passed  1029.81 sec
2/7 Test #3: rrfs_3denvar_glbens ..............   Passed  1092.93 sec
3/7 Test #2: rtma .............................   Passed  1574.38 sec
4/7 Test #6: hafs_3denvar_hybens ..............   Passed  1587.40 sec
5/7 Test #7: global_enkf ......................   Passed  1777.02 sec
6/7 Test #5: hafs_4denvar_glbens ..............   Passed  1884.95 sec
7/7 Test #1: global_4denvar ...................   Passed  2454.08 sec

100% tests passed, 0 tests failed out of 7

Total Test time (real) = 2454.53 sec

on WCOSS2 (Dogwood): all 7 tasks passed, too.

[gang.zhao@dlogin03:build] (feature/windgust_in_3dvar_for_3drtma)$ ctest -j 7
Test project /lfs/h2/emc/da/save/gang.zhao/WorkDir/ProdGSI_dev/gsi_dev/build
    Start 1: global_4denvar
    Start 2: rtma
    Start 3: rrfs_3denvar_glbens
    Start 4: netcdf_fv3_regional
    Start 5: hafs_4denvar_glbens
    Start 6: hafs_3denvar_hybens
    Start 7: global_enkf
1/7 Test #4: netcdf_fv3_regional ..............***Failed  603.87 sec
2/7 Test #3: rrfs_3denvar_glbens ..............   Passed  608.93 sec
3/7 Test #7: global_enkf ......................   Passed  1032.24 sec
4/7 Test #2: rtma .............................   Passed  1389.34 sec
5/7 Test #6: hafs_3denvar_hybens ..............   Passed  1455.37 sec
6/7 Test #5: hafs_4denvar_glbens ..............   Passed  1455.64 sec
7/7 Test #1: global_4denvar ...................   Passed  1922.99 sec

86% tests passed, 1 tests failed out of 7

Total Test time (real) = 1923.00 sec

The following tests FAILED:
          4 - netcdf_fv3_regional (Failed)
Errors while running CTest
[gang.zhao@dlogin09:build] (feature/windgust_in_3dvar_for_3drtma)$ ctest -R netcdf_fv3_regional
Test project /lfs/h2/emc/da/save/gang.zhao/WorkDir/ProdGSI_dev/gsi_dev/build
    Start 4: netcdf_fv3_regional
1/1 Test #4: netcdf_fv3_regional ..............   Passed  1083.72 sec

100% tests passed, 0 tests failed out of 1

Total Test time (real) = 1083.92 sec

@ShunLiu-NOAA ShunLiu-NOAA merged commit 29d9d8f into NOAA-EMC:develop Apr 5, 2024
@GangZhao-NOAA GangZhao-NOAA deleted the feature/windgust_in_3dvar_for_3drtma branch April 10, 2024 14:45
xyzemc pushed a commit to xyzemc/GSI_develop-v16-tms that referenced this pull request Feb 27, 2026
…ed 3DRTMA (NOAA-EMC#730)

<!-- PLEASE READ -->
<!--
Before opening a PR, please note these guidelines:

- Each PR should only address ONE topic and have an associated issue
- No hardcoded or paths to personal directories should be present
- No temporary or backup files should be committed
- Any code that was disabled by being commented out should be removed
-->

**Description**

<!-- Please include relevant motivation and context. -->
<!-- Please include a summary of the change and which issue is fixed.
-->
<!-- List any dependencies that are required for this change. -->
To improve the analysis of the near-surface wind gust in 3DRTMA, the
observations of near-surface wind gust would be analyzed directly in GSI
(3DVar and Hybrid 3DEnVar), instead of being a derived product from the
near-surface wind analysis.

Since the core subroutines for direct variational assimilation of wind
gust (e.g., setupgust.f90, intgust.f90, stpgust.f90, etc.) had already
been implemented in GSI for 2DRTMA, so in the work the development in
GSI mainly focus on adding I/O of 2-D wind gust firstguess and analysis
fields for RRFS-based 3DRTMA, and some minor modifications in
observation and background error for wind gust, options to control the
analysis of wind gust, etc.
<!-- Please provide reference to the issue this pull request is
addressing. -->
<!-- For e.g. Fixes #IssueNumber -->
This PR is to address the issue NOAA-EMC#726 : Adding I/O for direct analysis of
near-surface wind gust for RRFS-based 3DRTMA
Fixes NOAA-EMC#726
**Type of change**

Please delete options that are not relevant.

- [x] New feature (non-breaking change which adds functionality)

**How Has This Been Tested?**

<!-- Please describe the tests that you ran to verify your changes and
on the platforms these tests were conducted. -->
<!-- Provide instructions so we can reproduce. -->
<!-- Please also list any relevant details for your test configuration
-->
  
**Checklist**

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my own code
- [x] I have commented my code, particularly in hard-to-understand areas
- [x] New and existing tests pass with my changes
      tested with a real case - 2024-02-20_12:00Z, 
1. dry-run (using my updated GSI code with wind gust analysis, but
actually no wind gust obs is analyzed, so-called dryrun) is compared to
control-run (original GSI code running without wind gust obs): the
results are identical. This indicates that if without analyzing
wind-gust obs, then the updated code generates the analysis identical to
the analysis of original/control code. Or say, the added code does not
have influence on the other part of code.
2. real case run with updated GSI code to analyze the obs of wind gust:
The following figure shows the used observations of near-surface wind
gust:

![var_obs_2024022012_gust_used_maprll_datll_reg_ncf](https://github.com/NOAA-EMC/GSI/assets/53267411/ecbe479a-03c6-490f-a179-9e0027291468)
the following figure shows the analysis increments:

![GUST_hyb_hwllp90_corptuned_inc_incrintrp_maprll_datrll_reg_grb2](https://github.com/NOAA-EMC/GSI/assets/53267411/a01fca0d-dc1f-438b-b8eb-e624de35a631)
- [x] Any dependent changes have been merged and published
- [x] Regression tests on WCOSS2 (Cactus) and Hera (Rocky-8) : my
updated GSI commit
[#f91f247d](GangZhao-NOAA@f91f247))
vs control/original GSI code (commit
[#0d1fb51e](NOAA-EMC@0d1fb51))
Here is the reports of the regression tests on WCOSS2 (Cactus):
~~~
[gang.zhao@clogin02:build] (feature/windgust_in_3dvar_for_3drtma)$ ctest
-j 7
Test project
/lfs/h2/emc/da/save/gang.zhao/WorkDir/ProdGSI_Dev/gsi_dev/build
    Start 1: global_4denvar
    Start 2: rtma
    Start 3: rrfs_3denvar_glbens
    Start 4: netcdf_fv3_regional
    Start 5: hafs_4denvar_glbens
    Start 6: hafs_3denvar_hybens
    Start 7: global_enkf
1/7 Test NOAA-EMC#4: netcdf_fv3_regional ..............   Passed  483.15 sec
2/7 Test NOAA-EMC#3: rrfs_3denvar_glbens ..............   Passed  486.74 sec
3/7 Test NOAA-EMC#7: global_enkf ......................   Passed  850.98 sec
4/7 Test NOAA-EMC#2: rtma .............................   Passed  970.28 sec
5/7 Test NOAA-EMC#6: hafs_3denvar_hybens ..............   Passed  1152.82 sec
6/7 Test NOAA-EMC#5: hafs_4denvar_glbens ..............   Passed  1213.93 sec
7/7 Test NOAA-EMC#1: global_4denvar ...................   Passed  1683.16 sec

100% tests passed, 0 tests failed out of 7

Total Test time (real) = 1683.19 sec
~~~
Here is the reports of the regression tests on Hera (Rocky8):
~~~
(base) [Gang.Zhao@hfe11:build] (feature/windgust_in_3dvar_for_3drtma)$
ctest -j 7
Test project /scratch1/NCEPDEV/da/Gang.Zhao/ProdGSI_dev/gsi_dev/build
    Start 1: global_4denvar
    Start 2: rtma
    Start 3: rrfs_3denvar_glbens
    Start 4: netcdf_fv3_regional
    Start 5: hafs_4denvar_glbens
    Start 6: hafs_3denvar_hybens
    Start 7: global_enkf
1/7 Test NOAA-EMC#4: netcdf_fv3_regional ..............   Passed  491.53 sec
2/7 Test NOAA-EMC#3: rrfs_3denvar_glbens ..............***Failed  495.27 sec
3/7 Test NOAA-EMC#2: rtma .............................   Passed  982.45 sec
4/7 Test NOAA-EMC#6: hafs_3denvar_hybens ..............   Passed  1168.99 sec
5/7 Test NOAA-EMC#7: global_enkf ......................   Passed  1239.77 sec
6/7 Test NOAA-EMC#5: hafs_4denvar_glbens ..............***Failed  1347.87 sec
7/7 Test NOAA-EMC#1: global_4denvar ...................   Passed  1974.45 sec

71% tests passed, 2 tests failed out of 7

Total Test time (real) = 1974.91 sec

The following tests FAILED:
          3 - rrfs_3denvar_glbens (Failed)
          5 - hafs_4denvar_glbens (Failed)
Errors while running CTest
Output from these tests are in:
/scratch1/NCEPDEV/da/Gang.Zhao/ProdGSI_dev/gsi_dev/build/Testing/Temporary/LastTest.log
Use "--rerun-failed --output-on-failure" to re-run the failed cases
verbosely.
(base) [Gang.Zhao@hfe11:build] (feature/windgust_in_3dvar_for_3drtma)$
ctest -R rrfs_3denvar_glbens
Test project /scratch1/NCEPDEV/da/Gang.Zhao/ProdGSI_dev/gsi_dev/build
    Start 3: rrfs_3denvar_glbens
1/1 Test NOAA-EMC#3: rrfs_3denvar_glbens ..............   Passed  430.52 sec

100% tests passed, 0 tests failed out of 1

Total Test time (real) = 430.55 sec
(base) [Gang.Zhao@hfe11:build] (feature/windgust_in_3dvar_for_3drtma)$
ctest -R hafs_4denvar_glbens
Test project /scratch1/NCEPDEV/da/Gang.Zhao/ProdGSI_dev/gsi_dev/build
    Start 5: hafs_4denvar_glbens
1/1 Test NOAA-EMC#5: hafs_4denvar_glbens ..............   Passed  1225.37 sec

100% tests passed, 0 tests failed out of 1

Total Test time (real) = 1225.39 sec
~~~
**Note**: 
_When I was running the regression tests, GSI code was just updated to
the latest commit
[#b50b4194](GangZhao-NOAA@f91f247).
Considering the frequent update in EMC GSI code recently and saving the
time, after this PR has been reviewed and approved by peer-reviewers, I
will update the code to latest EMC GSI commit, then re-run the
regression tests for final approval.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Adding I/O for direct analysis of near-surface wind gust for RRFS-based 3DRTMA

4 participants