Forcing the SCM

Submitted by Wayne.M.Angevine on Mon, 12/21/2020 - 13:22

I have been the primary user and promoter of the WRF SCM.  In the process, I have given a lot of thought to how forcing is or should be done.  I think it's time to give similar thought to the forcing strategies of the CCPP SCM.  This probably needs to be a group process, so the result accomodates as many future users and uses as possible. I am under no illusion that I understand everything that people might want to do with the SCM.

One thing that might be considered a bug in the existing gmtb_scm_forcing.F90:  When vertical velocity is used, momentum variables are advected with w, while thermodynamic variables are advected with omega.  This should work, but I don't see a reason for both w and omega variables to exist and to be used differently.

In WRF SCM, there are two scales of advection available, regular and "large scale."  The main reason for this is to allow two different relaxation timescales to be used.  I implemented the second scale to accomodate the forcing provided by the original specification for the KNMI Testbed, many years ago.  In recent times, I have not found a need for two scales.  See dyn_em/module_force_scm_xy.F in WRF for details.

Also in WRF SCM, forcing (advection) of variables can be switched on and off individually.  If vertical advection is switched on, all variables are advected vertically.  Horizontal advection can be switched on or off for wind, temperature, and moisture.  This provides flexibility for different kinds of cases.  Forcing due to Coriolis is always on, unless SCM forcing is switched off entirely.

One specific deficiency in the current CCPP SCM forcing is that there is no way to use forcing by Coriolis only.  In a low-level jet case, I don't want to force the wind, but I do need Coriolis forcing.  I coded this into the default case of my own version, but there should be a general solution.

I would be happy to participate in a group to design a complete(?) solution.

Wayne Angevine CIRES/NOAA CSL

Hi Wayne,

As part of the effort to support the new DEPHY international SCM input format, I've implemented a solution to make forcing much more flexible. I'm mostly done implementing the format described here: https://docs.google.com/document/d/118xP04jB9HO7Y2LqWk3HZpZ9n3CFujgzimLI7Ug8vO4/edit?pli=1

Notably, it has the following controls, all of which are independent of each other:

  1. control which state variables have advective forcing applied
  2. the ability to specify radiative tendencies (or to have them included in the advection term) (also will turn radiation off completely via a flag - no changes to SDFs needed)
  3. specify omega or w for the vertical velocity
  4. control whether geostrophic forcing is applied
  5. control which state variables get nudged to a time-varying profile (including individual timescales for each variable and levels above which the nudging is applied)
  6. specify surface fluxes (either kinematic or in W m-2) or a forcing surface temperature (like SST for the simple ocean scheme)
  7. specify a constant roughness length or a time-varying friction velocity to force surface winds

The new forcing code has consistent vertical advective terms (either all w or all omega). All terms are coded via the simplest upstream scheme. One can also choose to convert to potential temperature before the vertical advection to avoid the adiabatic compression/expansion term when using absolute temperature or not.

With this added flexibility, I'm thinking that it should be able to cover most situations. For example, it can be configured to achieve the existing forcing methods that had been implemented following Randall and Cripe (1999) (thermo_forcing_type = 1,2,3, etc.). It sounds like it will also be able to do what you need with the Coriolis-only forcing for the winds. There are not more than one scales of advective forcing right now, since the new DEPHY format does not support that,  but it would not be too difficult to add. 

I would be happy to discuss adding more options if they are necessary at some point, but if there is something specific that is missing, it is best to add an issue on the GitHub page for the CCPP-SCM.

All of these changes will be part of a pull request soon. I'll try to remember to notify you so that you can take a look and see if it meets your needs.

-Grant