Updated Numerical Solution for Wave Attenuation in sea ice#1294
Updated Numerical Solution for Wave Attenuation in sea ice#1294sbanihash merged 6 commits intoNOAA-EMC:developfrom
Conversation
|
Maybe it is possible to progress with some discussion/review during this pause, @MatthewMasarik-NOAA ? I don't know if any IC4 developers in particular have feedback |
|
Hi @NickSzapiro-NOAA, others should feel free to discuss. If this is not needed for either gfsv17 or gefsv13 though, than Avichal has reiterated that the waves team needs to pause any reviewing since we don't have the manpower currently. |
|
@erinethomas, we will also process this in ~November. Thank you for the very informative PR header. |
|
I've made a github repository about this issue at https://github.com/cmbitz/WW3Numerics where I've written up some more detailed notes about this issue and show some results in slides from a number of integrations to test it. I also provide a Python Notebook with some idealized examples that can be solved exactly where I compare the various solution options. In short, the modifications I'm suggesting can be implemented so they only matter in the sea ice. They can work for any IC/IS option combination, though I confess I've only tested with IC4Method10. I'm 100% sure it would improve wave amplitudes in the sea ice for any IC option. Happy to talk to anyone who wants to listen. I understand that this issue is on the back-burner, which is okay with me. I'll wait. |
|
thanks for the extra details @cmbitz! |
model/src/w3srcemd.F90
Outdated
| ATT=EXP(ICE*VDIC(IS)*DTG) | ||
| #endif | ||
| #ifdef W3_IC4 | ||
| #ifndef W3_IC4_ACCURATE_NUMERICS |
There was a problem hiding this comment.
In a case of IC0 for example, where there is no IC1-IC5 defined, then VDIC has not been defined (look at line 744 in this same script) and the build will give this error: This name does not have a type, and must have an explicit type. [VDIC]
ATT=EXP(ICE*VDIC(IS)*DTG)
suggested changes is:
#ifdef WW3_IC4
#ifndef WW3_IC4_ACCURATE_NUMERICS
ATT = EXP(ICE * VDIC(IS) * DTG)
#endif
#endif
There was a problem hiding this comment.
@erinethomas @NickSzapiro-NOAA do you agree with this change? If so could you please go ahead and make the changes?
There was a problem hiding this comment.
Keeping both makes sense to me to protect VDIC
|
Why is this implemented as a switch? Could a logical variable in the IC4 namelist do the same thing? |
Hi Erick. We were following the example of the W3_IC? options here. Happy to change it to a namelist option if this is preferred. |
|
Hi David. |
|
Ok. I will work with @erinethomas on this. |
|
Adding a namelist variable is very easy. I just did this the other day, to put in a new option for hacking the ice thickness. You can look at an existing variable to see how it is done, e.g. "grep IC4 *.F90 | grep -i ki". Any new variable will have 2 names. One is used in ww3_grid.inp and the other is used internally, e.g. IC4KI and IC4_KI. There are 3-4 files that need minor editing to add the new variable, as you will see with the output from above grep command. Keep in mind that after making this change, any old mod-def files that you have will no longer work. |
|
This seems like a good way forward (to go with namelist options rather than switches) - I will update the PR as soon as I can! |
|
@erinethomas @dabail10 Do we have any updates to this PR? |
|
yes -I have worked out how to move this from a switch setting to a namelist parameter - I am still doing some final tests - code coming soon. |
b703df9 to
031da9d
Compare
… numerics fix should be applicable to ALL IC settings.
031da9d to
97f26f0
Compare
|
@cmbitz @dabail10 @NickSzapiro-NOAA |
|
Thank you @erinethomas for your updates! Please let me know when you are ready for the second round of review. |
ErickRogers
left a comment
There was a problem hiding this comment.
The recent updates by Erin look good to me. I don't have any other concerns or suggestions. I suppose it needs to get through the matrix testing now.
|
Thank you @ErickRogers for your review. @erinethomas I will be starting my second round of review soon. Please let me know if there are still changes or checks you need to do on you side before I do so. Thanks |
|
@cmbitz was actually advocating that we should remove this timestep limitation under the ice. However, I don't know if that is only when OFFSET=0.5 in w3srcemod.F90 |
|
These changes work in the CESM code. |
|
@erinethomas are you done with the changes that you were planning on making? Is the PR ready for testing again? |
|
@sbanihash - I believe this PR is ready for review again. |
@erinethomas could you edit your PR description to reflect this change? |
|
@erinethomas just double checking to see if you have that one last change ready to be committed for me to submit my final review? Thank you in advance! |
|
@sbanihash - thanks for the reminder - change to line 704 (removed the pointer) has now been made. Review ready. |
sbanihash
left a comment
There was a problem hiding this comment.
I have reviewed the changes in this PR and tested the regression tests successfully. This PR will write an additional term in all ww3_grid.out files for ICNUMERICS and result in ww3_grid.out files being different for all regression tests. For that reason the regtests were first ran without any changes in the original PR and the tests were successful. In an attempt to compare matrixes, the write statements in ww3gridmd.F90 were taken out before the second round of regression tests and the matrix diff result is as below:
********************* non-identical cases ****************************
mww3_test_03/./work_PR2_UNO_MPI_e (1 files differ)
mww3_test_03/./work_PR2_UQ_MPI_d2 (16 files differ)
mww3_test_03/./work_PR3_UQ_MPI_e_c (1 files differ)
mww3_test_03/./work_PR2_UNO_MPI_d2 (16 files differ)
mww3_test_03/./work_PR3_UQ_MPI_d2_c (15 files differ)
mww3_test_03/./work_PR2_UQ_MPI_e (1 files differ)
mww3_test_03/./work_PR3_UNO_MPI_e_c (1 files differ)
mww3_test_03/./work_PR1_MPI_d2 (11 files differ)
mww3_test_03/./work_PR3_UNO_MPI_d2_c (15 files differ)
mww3_test_03/./work_PR3_UNO_MPI_d2 (16 files differ)
mww3_test_03/./work_PR3_UQ_MPI_d2 (15 files differ)
mww3_test_09/./work_MPI_ASCII (0 files differ)
ww3_tp2.10/./work_MPI_OMPH (7 files differ)
ww3_tp2.16/./work_MPI_OMPH (4 files differ)
ww3_tp2.6/./work_ST4_ASCII (0 files differ)
ww3_ufs1.3/./work_a (2 files differ)
All diff's are as expected. I approve this PR.
matrixCompSummary.txt
matrixCompFull.txt
|
@erinethomas I had already made that change and ran the tests, so when I double checked your latest commit and made sure it is the same as the change I had made in my runs, I went ahead and approved this PR. Thank you again and also thanks to @dabail10, @cmbitz and @NickSzapiro-NOAA for your work on this PR and to @ErickRogers for his review. |
|
@erinethomas @cmbitz I have been working on adding a regtest for this feature, by changing ICNUMERICS=T in the input for the IC4M10 case in tic1.1 , but when comparing the results to a case where ICNUMERICS=F, I do not see any changes in output. I know you had mentioned that your tests have been successful, could you confirm that what is already in the IC4_M10 case is sufficient to test this numerical solution option? |
|
These changes should only impact ice covered areas. Do you have coupling with the sea ice model? |
|
Thanks @dabail10 for your prompt response. So you are confirming that we would need to test it in a coupled setting to see the results? If so I would have to look at setting up a test within the ufs-weather-model setup. |
|
You should definitely test it in the coupled setup. Or do you have a method in WW3 to read in sea ice data? |
|
@dabail10 yes, we read an ice input for example this is how the ice is being read in the regtest that I am working on: |
|
@sbanihash For coupled test, I have stale PR (ufs-community/ufs-weather-model#2072) once this is synced to dev/ufs-weather-model. Idea is to switch on wave-ice coupling in cpld_control_pdlib_p8 and cpld_debug_pdlib_p8 RTs |
|
Thanks @NickSzapiro-NOAA was just looking at your PR. Let me see if I can do a test within your branch with the addition of the changes in this PR. I was under the impression that as long as I am reading an ice input, turing on ICNUMERICS=T should result in answer changes even in a WW3 regtest, am I wrong? |
|
I agree. If you are reading in a sea ice field, then the numerics should be doing something in the presence of ice. |
|
Do you have plots for your ww3 regtest? Are there waves in the ice? |
|
@NickSzapiro-NOAA I can definitely generate some and share. |
|
@NickSzapiro-NOAA I have opened an issue of what I think to be the problem with this PR not working as expected when turning IC_NUMERICS on + a PR with the fixes which worked for the test case I have added. Still need to wait for all the regtests to finish to have the full matrix comparisons so that I could officially have the PR reviewed and tested by others. |
…1294) * This PR adds a write statement in ww3_grid.out and therefore will result in changes in all ww3_grid.out files in regtests. *add IC4_NUMERICS namelist to w3gdatmd.F90 * add IC4_NUMERICS namelist to w3gridmd.F90 * make ICNUMERICS namelist setting (to be put under MISC namelist) - Ic numerics fix should be applicable to ALL IC settings. * IC_NUMERICS Fix for All sea ice source terms * remove lines that modify timestep in sea ice * remove pointer on line 704 w3gdatmd.F90
Pull Request Summary
This PR provides code modifications to apply a new MISC namelist parameter called "ICNUMERICS". Setting ICNUMERICS to be "TRUE" allows the user to place the 'sea ice' source terms with the other source terms, thus reducing the errors introduced with the time splitting method for wave attenuation in sea ice resulting in more accurate wave action in sea ice.
Description
The default behavior for wave attenuation in sea ice uses 'time splitting' for the wave action equation. This PR and the use of the new namelist parameter places the 'sea ice' source terms with the other source terms, thus reducing the errors introduced with the time splitting method for wave attenuation in sea ice resulting in more accurate wave action in sea ice.
Currently, this code is intended to be used in tandem with the newly proposed Meylan et al 2021 attenuation scheme : IC4M10 (see PR: #1293 ). This combination (IC4M10 plus ICNUMERICS=TRUE) has been tested in coupled CESM and E3SM runs, yet we note, at this time, this new numerics calculation for wave attenuation has not yet been tested with any other IC switch settings or other IC4 methods (1-9), although, we expect similar improvements for all IC methods.
This PR is the original work of @cmbitz and Vince Cooper (University of Washington). Collaborators include @erinethomas, @dabail10, @NickSzapiro-NOAA
Issue(s) addressed
This PR fixes the following Issue: #738
Commit Message
Introduction of a new MISC namelist parameter (ICNUMERICS) that allows for more accurate numerics scheme for wave attenuation in sea ice. Coauthors: Cecilia Bitz, Vince Cooper, Erin Thomas, David Bailey, Nick Szapiro.
Check list
Testing
This code has been tested by @cmbitz (details to be posted below), by @erinethomas in E3SM configurations with wave-sea ice coupling, and by @dabail10 in CESM configurations with wave-sea ice coupling.