-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GEOSgcm NH Replay-NoIncrement is not identical to AMIP #275
Comments
For ease of testing, I have created a branch here on the fixture that grabs all of my PRs for this:
To build it, you either use
to the cmake command. Then make sure you are correctly selecting nonhydrostatic in ETA: The differences between this and diff --git a/components.yaml b/components.yaml
index 8ea3fd0..5cab83b 100644
--- a/components.yaml
+++ b/components.yaml
@@ -5,7 +5,7 @@ GEOSgcm:
env:
local: ./@env
remote: ../ESMA_env.git
- tag: v3.1.3
+ branch: feature/mathomp4/update-pbuild-for-hydrostatic
develop: main
cmake:
@@ -55,13 +55,13 @@ GEOSgcm_GridComp:
FVdycoreCubed_GridComp:
local: ./src/Components/@GEOSgcm_GridComp/GEOSagcm_GridComp/GEOSsuperdyn_GridComp/@FVdycoreCubed_GridComp
remote: ../FVdycoreCubed_GridComp.git
- tag: v1.2.10
+ branch: feature/mathomp4/update-setup-for-hydrostatic-fv3
develop: develop
fvdycore:
local: ./src/Components/@GEOSgcm_GridComp/GEOSagcm_GridComp/GEOSsuperdyn_GridComp/@FVdycoreCubed_GridComp/@fvdycore
remote: ../GFDL_atmos_cubed_sphere.git
- tag: geos/v1.1.4
+ tag: geos/v1.1.5
develop: geos/develop
GEOSchem_GridComp:
@@ -93,7 +93,7 @@ mom6:
GEOSgcm_App:
local: ./src/Applications/@GEOSgcm_App
remote: ../GEOSgcm_App.git
- tag: v1.3.15
+ branch: feature/mathomp4/update-setup-for-hydrostatic
develop: develop
UMD_Etc: |
Note: I saw start-stop failure with a "default" experiment. I was only doing NH at C24 and nothing else exciting. (That is, no GFDL microphysics, etc.) |
Correct, I ran the default 1MOM L72 C48 nonhydrostatic build for 1 day and it failed gcm_regress.j and the 0-increment test @mathomp4 mentioned which should produce results identical to AMIP mode. Furthermore, we are seeing similar issues in the GF2020 development branches. Since we haven't typically tested the NH model, the question is whether this is a new or old problem? |
It looks like we never get the call MAPL_GetPointer(INTERNAL, AK, 'AK', RC=STATUS)
call MAPL_GetPointer(INTERNAL, BK, 'BK', RC=STATUS)
call MAPL_GetPointer(INTERNAL,UD,'U' ,RC=STATUS)
call MAPL_GetPointer(INTERNAL,VD,'V' ,RC=STATUS)
call MAPL_GetPointer(INTERNAL,PE,'PE' ,RC=STATUS)
call MAPL_GetPointer(INTERNAL,PT,'PT' ,RC=STATUS)
call MAPL_GetPointer(INTERNAL,PK,'PKZ',RC=STATUS) Maybe we should if nonhydro? |
Ah yes. AMIP and Replay-NoInc should be identical. Thanks. I knew there was a test for that! |
Good question perhaps @wmputman can comment |
I forgot about |
I'll investigate the restart |
Another clue, in a separate test built with the |
I just tried GFDL with the "stock" GCM and it doesn't regress. So I guess GFDL is different in that branch! |
I think DZ and W are being written ok in the restart, the pointers are filled in in FV_StateMod.F90 so I'm not sure what is going on. If you do a zero-length run you get identical restarts so. I can confirm the start/stop failure. |
I think start/stop NH is due to the use of make_nh in the fv3 nml. You cannot have Make_NH = .T. for both segments, just the first segment |
Alternatively, if you regrid restarts, or make all the DZ values = 0.0, FV3 with make_nh automatically without the nml flag |
@wmputman Oooh. Okay. I'll work on testing this as I think I can easily make a sed rule for the second segment. But, it does look like my (newly-regridded) restarts have all-0 1575 │ if (fv_first_run) then
1576 │ ! Make_NH
1577 │ if ( .not. FV_Atm(1)%flagstruct%hydrostatic ) then
1578 │ if (all(FV_Atm(1)%w(isc:iec,jsc:jec,:) == 0.0)) FV_Atm(1)%flagstruct%Make_NH = .true.
1579 │ if ( FV_Atm(1)%flagstruct%Make_NH ) then
1580 │ if (mpp_pe()==0) print*, 'fv_first_run: FV3 is making Non-Hydrostatic W and DZ'
1581 │ call p_var(FV_Atm(1)%npz, isc, iec, jsc, jec, FV_Atm(1)%ptop, ptop_min, &
1582 │ FV_Atm(1)%delp, FV_Atm(1)%delz, FV_Atm(1)%pt, FV_Atm(1)%ps, FV_Atm(1)%pe, FV_Atm(1)%peln, &
1583 │ FV_Atm(1)%pk, FV_Atm(1)%pkz, kappa, FV_Atm(1)%q, FV_Atm(1)%ng, &
1584 │ FV_Atm(1)%ncnst, FV_Atm(1)%gridstruct%area_64, FV_Atm(1)%flagstruct%dry_mass, &
1585 │ FV_Atm(1)%flagstruct%adjust_dry_mass, FV_Atm(1)%flagstruct%mountain, &
1586 │ FV_Atm(1)%flagstruct%moist_phys, FV_Atm(1)%flagstruct%hydrostatic, &
1587 │ FV_Atm(1)%flagstruct%nwat, FV_Atm(1)%domain, FV_Atm(1)%flagstruct%make_nh)
1588 │ FV_Atm(1)%flagstruct%Make_NH=.false.
1589 │ endif
1590 │ endif
1591 │ ! Mark FV setup complete
1592 │ fv_first_run = .false.
1593 │ endif I guess the question is: should we have some sort of "test" in Or, perhaps should we do this:
A user could always set |
@mathomp4: yes, having that variable in the nml as .F. is fine for me. And then a user can change it if they want to (at the risk of causing troubles for long runs when they forget to remove it). |
I take it back, this does not fix it. If I set make_nh .F. for the 2nd segment it still fails regression. |
Okay. I'll work on getting the logic right in |
Okay, I pushed updates to |
Also: weirdly, regression did work for me with my |
USE_AEROSOL_NN needs to change in concert with two GFDL-MP nml values: prog_ccn and use_ccn USE_AEROSOL_NN: 0 USE_AEROSOL_NN: 1 This is only relevant for GFDL-MP, for 1MOM only USE_AEROSOL_NN matters |
Hmm. I was running 1MOM, and I'll try that first. Also: I guess we should put a comment in the AGCM.rc telling folks to change those in concert? |
@wmputman Hmm. A question. Currently in Moist, But the default values in
which matches your Should we change the defaults in |
Some testing. After I pushed the
So that is good! Now for the bad. As @sdrabenh reported, with NH dynamics, AMIP is not identical to Replay-NoIncrement! They are identical for hydrostatic dynamics, so I see no reason they shouldn't be for NH. |
I'll have to look at add_incs for NH... |
There are never any W increments applied to FV3 (for now...) and DZ/PKZ just get adjusted based on T-Increments. If they are 0.0 there should be no change.
And then PKZ is just recalculated if getPKZ:
!$omp parallel do default(shared) |
This was discovered by @sdrabenh as he was looking at the nonhydrostatic (NH) GEOS model. Turns out if you build GEOS for non-hydrostatic dynamics, the model does not start-stop regress. This usually points to an internal state issue. The question is: where?
I suppose there are two possible culprits: Dynamics and Moist. Maybe perhaps
DZ
andW
are not being carried around correctly in Dyn? Or perhaps Moist runs differently in non-hydro?I'm adding up the usual suspects (@atrayano, @bena-nasa, @wmputman) to this issue for opinions and thoughts.
The text was updated successfully, but these errors were encountered: