Skip to content

Compositing z0 for fractional grid#579

Closed
benwgreen wants to merge 6 commits into
NCAR:mainfrom
benwgreen:bwg_z0rl_composite
Closed

Compositing z0 for fractional grid#579
benwgreen wants to merge 6 commits into
NCAR:mainfrom
benwgreen:bwg_z0rl_composite

Conversation

@benwgreen
Copy link
Copy Markdown
Collaborator

Refer to Issue #578

In GFS_surface_composites.F90, the momentum roughness length zorl is currently composited (for frac_grid = .true.) by taking the arithmetic mean of zorl_lnd, zorl_wat, zorl_ice. A more physically realistic method is to composite based on the logarithms of the component zorls, which can be done in sfc_diff.f to produce self-consistent composite values of ustar, cd, cdq, rb, stress, fm, fh, fm10, and fh2.

NOTE: skin temperature has NOT been composited based on longwave radiation; it still takes weighted average of component temperatures.

@JongilHan66 @shansun6 @SMoorthi-emc @junwang-noaa @yangfanglin (weizhong.zheng@noaa.gov)

Copy link
Copy Markdown
Collaborator

@climbfuji climbfuji left a comment

Choose a reason for hiding this comment

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

A couple of questions on this PR. I see that the calculation of certain composite variables is turned off in GFS_surface_composites_post when frac_grid is true. But the calculation of these variables in sfc_diff is added for both cases, frac_grid true and false. Why?

It's also concerning that the compositing of the variables is now "hidden" in sfc_diff.f instead of being kept separate in GFS_surface_composites.F90. The latter can be shared with other surface schemes, but sfc_diff.f for example is not used with MYNN sfc. This seems detrimental to physics interoperability and putting together physics suites.

It would be much better if the compositing could stay in GFS_surface_composites.F90. If necessary, create additional interstitial variables in sfc_diff.f (and MYNN sfc etc.) that can be used in GFS_surface_composites_post.

But, admittedly, my understanding is limited and I might be off entirely.

@benwgreen
Copy link
Copy Markdown
Collaborator Author

@climbfuji you make excellent points. I will plead ignorance (not as an excuse -- just as an explanation). I think the best solution is to create extra interstitial variables, because the key is that we need to use sfc_diff an extra time for the frac_grid=.true. , but not when frac_grid=.false.

The issue of what to do when other surface routines are used instead of sfc_diff is something that needs to be considered as well. I would think first that coming up with a more elegant and ccpp-compliant solution to the case of sfc_diff would hopefully allow for more interoperability.

I welcome suggestions from those mentioned on how to improve this.

@yangfanglin
Copy link
Copy Markdown

yangfanglin commented Feb 26, 2021 via email

@climbfuji
Copy link
Copy Markdown
Collaborator

@climbfuji you make excellent points. I will plead ignorance (not as an excuse -- just as an explanation). I think the best solution is to create extra interstitial variables, because the key is that we need to use sfc_diff an extra time for the frac_grid=.true. , but not when frac_grid=.false.

The issue of what to do when other surface routines are used instead of sfc_diff is something that needs to be considered as well. I would think first that coming up with a more elegant and ccpp-compliant solution to the case of sfc_diff would hopefully allow for more interoperability.

I welcome suggestions from those mentioned on how to improve this.

Thanks, Ben, for your explanation. I am happy to work with you on this in the next week, hopefully I can be of help.

@barlage
Copy link
Copy Markdown
Contributor

barlage commented Feb 26, 2021

Related to this PR: The log-weighted compositing is the approach we are taking in Noah-MP to deal with the sub-grid land tiles, which is essentially the same issue as fractional grid. I can see having the compositing of a common field like z0 be done higher in the code, where different options of compositing could be used. I don't think this completely solves the consistency issue.

Perhaps off-topic but related to the original purpose of self-consistency of ustar, etc.: To the point @yangfanglin made about different schemes, I think scheme-specific approaches to compositing need to be used, especially since all PBL schemes do not necessarily require the same inputs. And all surface layer schemes do not use the same approximations. I likely don't understand the code structure enough to make an informed suggestion here on the placement of the compositing code.

For example, a question is how to average the surface temperatures for use in this extra call to sfc_diff. (Note: this is also the same approach we are taking for compositing Noah-MP tiles.) The current approach is linear, but should it be weighted toward sensible heat or heat exchange coefficient(Ch), similar to the note re: radiative temperature, to make the average temperature more consistent with the sensible heat flux? (Note: this is what we are working on for Noah-MP compositing) A linear weighted temperature might imply a stable regime while at the same time a flux/Ch weighted might imply an unstable regime. I am not yet familiar enough with the sfc_diff stability calculations (I need to read Office Notes 321 and 356, links below) to understand the assumptions, but my current understanding is that these are linearized assumptions to avoid iteration and that the temperature should likely be consistent with the sensible heat flux because the linearization is done to avoid iterating the sensible heat calculation.

ftp://ftp.library.noaa.gov/noaa_documents.lib/NWS/National_Meteorological_Center/NMC_Office_Note/NMC_Office_Note_321.pdf
ftp://ftp.library.noaa.gov/noaa_documents.lib/NWS/National_Meteorological_Center/NMC_Office_Note/NMC_Office_Note_356.pdf

cmm(i) = txl*cmm_lnd(i) + txi*cmm_ice(i) + txo*cmm_wat(i)
chh(i) = txl*chh_lnd(i) + txi*chh_ice(i) + txo*chh_wat(i)

! BWG, 2021/02/25: cmm=cd*wind, chh=cdq*wind, so use composite cd, cdq
Copy link
Copy Markdown
Collaborator Author

@benwgreen benwgreen Mar 1, 2021

Choose a reason for hiding this comment

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

Bug: chh = rho * cdq * wind (cmm = cd*wind is still correct)

Comment thread physics/sfc_diff.f
fh_cmp(i) = fh_wat(i)
fm10_cmp(i) = fm10_wat(i)
fh2_cmp(i) = fh2_wat(i)
else ! if (islmsk(i) == 2) ! Ice
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is incomplete. There needs to be composite between water and ice even in non-fractional grid case.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

@SMoorthi-emc currently the only composited variables in the non-frac case (Lines 579-601 of original GFS_surface_composites.F90) are: zorl, tsfc, evap, hflx, stress, qss, ep1d. This portion of the proposed code change probably won't survive as-is given Dom's comments, but if it were to survive, then the water/ice composite here would only be done for z0rl and stress?

@SMoorthi-emc
Copy link
Copy Markdown
Contributor

I haven't looked carefully, but depending on lake or ocean, some of that will have to survive.
I have not seen Dom's comment

@wzzheng90
Copy link
Copy Markdown
Contributor

The use of the arithmetic mean of the momentum roughness length in this PR is a more physically realistic method, compared to the original linear relationship. And then this variable is used to produce self-consistent composite values of ustar, cd, cdq, rb, stress, fm, fh, fm10, and fh2 in "sfc_diff". I like this method and it should improve the previous composition method.

However, I would like to give some comments. My understanding is that these parameters are used to provide to the PBL scheme (TKE-EDMF), and this does not mean to completely solve the consistency issue as Mike mentioned above. These composited parameters are still inconsistent with the total surface fluxes (land/ocean/ice), although the composited fields would be more reasonable than old ones.

Thanks, Ben. Very good job!

@benwgreen
Copy link
Copy Markdown
Collaborator Author

I spoke with @climbfuji yesterday afternoon. We agreed that the structure of the changes in this PR need to be redone to allow for physics suite interoperability. He has volunteered to come up with a way to do so (thanks, Dom!) so that is why he put up the "do not merge" and "work in progress" tags. Stay tuned...

@wzzheng90
Copy link
Copy Markdown
Contributor

One more comment: Please check if the "frac_grid=.false." section can be removed, for it is supposed that frac_grid=.true. conditions should cover all cases including 100% land or water or ice.
Thanks,
--- Weizhong

endif

! BWG, 2021/02/25: Need to change composite skin temperature base on ULW (Fanglin)
tsfc(i) = txl*tsfc_lnd(i) + txi*tice(i) + txo*tsfc_wat(i)
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

@barlage would we need to change composite formula here also, or just simply use your composite straight from sfc_diff?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@benwgreen for now, using the composite here should be sufficient; I have to admit I'm ignorant on what tsfc is used for after this point, i.e., PBL, radiation, both? @yangfanglin might be able to comment; I will state here that this is where I think we need two surface temperatures, one for fluxes and one for radiation. This does depend on what the PBL/radiation use for a boundary condition (flux vs. temperature) but to be as general as possible, we probably should have two temperatures.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

@barlage After thinking more about @climbfuji's comments on what to do if sfc_diff isn't called, for the immediate term it is probably best to leave this line as-is. Once we come up with a way to better generalize the solution, it could very well be that a value from sfc_diff (via meta) ends up here. We will keep you posted as we work through the problem.

Comment thread physics/sfc_diff.f
& fm10_wat, fm10_lnd, fm10_ice, & !intent(inout)
& fh2_wat, fh2_lnd, fh2_ice, & !intent(inout)
& z0rl_wav, z0rl_cmp, & !intent(inout)
& ustar_wat, ustar_lnd, ustar_ice, ustar_cmp, & !intent(inout)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Instead of passing all the composite variables to sfc_diff_run, call stabilty from GFS_surface_composites_post_run for the composite variables?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

We just need to think about what to do if sfc_diff is not used, i.e. for example for MYNNSFC. Maybe call the same stability function for the moment and then work with @joeolson42 to call the appropriate function from MYNNSFC in GFS_surface_composites_post_run?

@joeolson42
Copy link
Copy Markdown
Collaborator

joeolson42 commented Apr 13, 2021 via email

@climbfuji
Copy link
Copy Markdown
Collaborator

This PR has been pulled into #627 and will be automatically merged as part of it.

@climbfuji
Copy link
Copy Markdown
Collaborator

For some reason, this PR didn't get flagged as merged when #627 was merged.

@climbfuji climbfuji closed this May 27, 2021
@benwgreen benwgreen deleted the bwg_z0rl_composite branch June 8, 2021 20:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants