Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Background
In the uncoupled GFS, a utility is required to initialize and update/evolve the surface variables, which is called gcycle (Global Cycle).
However, currently, gcycle is applied without distinguishing between the ocean and lake water surfaces. In order to know if the gcycle needs to be applied, two logics to determine if the water surface is ocean or lake, and if it is coupled or uncoupled, need to be added.
The lake mask, lakefrac (1=lake, 0=non-lake), is available by reading a fix file and is available in ccpp physics Fortran code while a subroutine gcycle is called. Another logical variable, cplflx is available in ccpp code, but needs to be added in the subroutine gcycle.
Solutions
In the forecasting mode in CCPP physics
Cplflx (cplice) needs to be added in a ccpp subroutine gcycle
Figure out all the lake related variables (need to be updated with gcycle) , as follows:
tref(:) = foundation temperature over water surface, identical to tsfc over non-water surface
tsfc(:) = surface skin temperature
tsfco(:) = water Lake, ocean (or other like river) surface temperature
tisfc(:) = surface skin temperature over (sea or lake) ice
hice(:) = (sih) sea or lake ice thickness
fice(:) = (sic) sea or lake ice fraction/concentration
zorli(:) = surface roughness length over ice
zorlo(:) = surface_roughness_length_over_water
weasd(:) = water equiv of acc snow depth over land and (sea or lake) ice
snowd(:) = water equivalent snow depth
snoalb(:) = maximum snow albedo
This project is to let the current sfccycle subroutine does what it does (as is), but update the related variables (listed above) at Lake grids only and when the system is in a coupled model, with lakefrac and landfrac, and cplflx dependency. Concretely, this requires to save the listed variables before the call of sfccycle in gcycle.F90, then update them as above after the call of sfccycle.
Only three need to be modified:
Interstitials/UFS_SCM_NEPTUNE/gcycle.F90
Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90
Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.meta
The code has been done and tested.