-
Notifications
You must be signed in to change notification settings - Fork 369
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
Add subgrid hillslope hydrology (NGEE Arctic IM2) #6718
base: master
Are you sure you want to change the base?
Conversation
Add namelist variable use_IM2_hillslope_hydrology, which implements a transfer from higher elevation topounits to lower elevation topunits within the same gridcell. Based on design document from NGEE Arctic Phase 3 project (IM2) [NML]
Should be BFB when use_IM2_hillslope_hydrology namelist flag is off
Have there been any long-ish runs with this feature on? |
The development was done on site-level simulations. Once the site-level evaluation was complete, I added a test that implemented this new development at the global scale, on top of the existing test SMS.r05_r05.IELM.pm-cpu_gnu.elm-topounit. That is a very strong test since it exercises this new capability on the full range of actual topounit, landunit, and column arrangements. That is only a five day test, so the answer to @rljacob question is "no". |
@rljacob I can start a longer test - how long do you suggest? |
I'd suggest a 1-year smoke test. Is this going to be used by E3SM in some future version? |
Thanks, I'll set that up. Next phase for this work is to evaluate multiple Arctic code changes operating together at the pan-Arctic scale (under ecosystem project NGEE Arctic). The plan would be to have this as a candidate capability in whatever version is current about three years from now. |
@rljacob I ran a one-year test of this new capability on the global r05 land domain, based on the existing r05 topounit-enabled surface dataset. That run completed successfully. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@thorntonpe I have left a few minor comments.
do fc = 1, num_hydrologyc | ||
c = filter_hydrologyc(fc) | ||
t = col_pp%topounit(c) | ||
! add flood water flux to qflx_top_soil | ||
qflx_top_soil(c) = qflx_top_soil(c) + qflx_snow_h2osfc(c) + qflx_floodc(c) | ||
|
||
! flow from uphill topounit goes to top of soil for soil, crop, and pervious road columns | ||
if (use_IM2_hillslope_hydrology) then | ||
qflx_from_uphill(c) = (col_pp%wttopounit(c)/top_pp%uphill_wt(t)) * (frac_from_uphill * top_ws%from_uphill(t)) / dtime | ||
qflx_top_soil(c) = qflx_top_soil(c) + qflx_from_uphill(c) | ||
endif | ||
|
||
end do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about avoiding the if (use_IM2_hillslope_hydrology)
within the do-loop by leaving the original code as is and then adding a separate if-loop like
do fc = 1, num_hydrologyc
... original code
enddo
if (use_IM2_hillslope_hydrology) then
.... new code
do fc = 1, ...
enddo
endif
call hist_addfld1d (fname='QFROM_UPHILL', units='mm/s', & | ||
avgflag='A', long_name='input to top layer soil from uphill topounit(s)', & | ||
ptr_col=this%qflx_from_uphill, c2l_scale_type='urbanf') | ||
|
||
call hist_addfld1d (fname='QTO_DOWNHILL', units='mm/s', & | ||
avgflag='A', long_name='output from column to downhill topounit', & | ||
ptr_col=this%qflx_to_downhill, c2l_scale_type='urbanf') | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If these fields are added by default, let's only add them if the new physics is turned on.
!----------------------------------------------------------------------- | ||
! initialize history fields for members of top_ws | ||
!----------------------------------------------------------------------- | ||
call hist_addfld1d (fname='FROM_UPHILL', units='mm', & |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about renaming FROM_UPHILL
to WATER_FROM_UPHILL
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These fields should be only read/written out if the new physics is turned on.
! Close file | ||
! call ncd_pio_closefile(ncid) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please delete these lines.
do fc = 1, num_hydrologyc | ||
c = filter_hydrologyc(fc) | ||
t = col_pp%topounit(c) | ||
top_pp%uphill_wt(t) = 0._r8 | ||
end do | ||
! Next sum the weights | ||
do fc = 1, num_hydrologyc | ||
c = filter_hydrologyc(fc) | ||
t = col_pp%topounit(c) | ||
top_pp%uphill_wt(t) = top_pp%uphill_wt(t) + col_pp%wttopounit(c) | ||
end do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Couldn't these weights be computed during initialization?
@thorntonpe please respond to comments. |
This new capability builds on the existing topographic unit (topounit) subgrid scheme by implementing transport of water within a gridcell from higher to lower elevation topounits. Assuming that the topounit information on an existing surface dataset includes mean elevation for each topounit on a gridcell, the code will calculate topounit connectivity (topology) at run time during model initialization. On each time step a user-specified fraction of the surface runoff, ponded water runoff, and perched water table drainage terms are shifted to the next-lower topounit, where that water is distributed to the columns on the topounit with a user-defined decay term.
[BFB]
[FCC]
[NML]