CCPP SciDoc v7.0.0  v7.0.0
Common Community Physics Package Developed at DTC
 
Loading...
Searching...
No Matches
GFS gwdps Module

This subroutine includes orographic gravity wave drag and mountain blocking. More...

Functions/Subroutines

subroutine gwdps::gwdps_run (im, km, a, b, c, u1, v1, t1, q1, kpbl, prsi, del, prsl, prslk, phii, phil, deltim, kdt, hprime, oc, oa4, clx4, theta, sigma, gamma, elvmax, dusfc, dvsfc, dtaux2d_ms, dtauy2d_ms, dtaux2d_bl, dtauy2d_bl, dusfc_ms, dvsfc_ms, dusfc_bl, dvsfc_bl, g, cp, rd, rv, imx, nmtvr, cdmbgwd, me, lprnt, ipr, rdxzb, ldiag_ugwp, errmsg, errflg)
 

Detailed Description

The time tendencies of zonal and meridional wind are altered to include the effect of mountain induced gravity wave drag from subgrid scale orography including convective breaking, shear breaking and the presence of critical levels.

Argument Table

gwdps_run argument table
local_namestandard_namelong_nameunitstypedimensionskindintent
imhorizontal_loop_extenthorizontal loop extentcountinteger()in
kmvertical_layer_dimensionnumber of vertical layerscountinteger()in
Aprocess_split_cumulative_tendency_of_y_windmeridional wind tendency due to model physicsm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physinout
Bprocess_split_cumulative_tendency_of_x_windzonal wind tendency due to model physicsm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physinout
Cprocess_split_cumulative_tendency_of_air_temperatureair temperature tendency due to model physicsK s-1real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physinout
u1x_windzonal windm s-1real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
v1y_windmeridional windm s-1real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
t1air_temperaturemid-layer temperatureKreal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
q1specific_humiditymid-layer specific humidity of water vaporkg kg-1real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
kpblvertical_index_at_top_of_atmosphere_boundary_layervertical index at top atmospheric boundary layerindexinteger(ccpp_constant_one:horizontal_loop_extent)in
prsiair_pressure_at_interfaceinterface pressurePareal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_interface_dimension)kind_physin
delair_pressure_difference_between_midlayersdifference between mid-layer pressuresPareal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
prslair_pressuremid-layer pressurePareal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
prslkdimensionless_exner_functionmid-layer Exner functionnonereal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
phiigeopotential_at_interfaceinterface geopotentialm2 s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_interface_dimension)kind_physin
philgeopotentialmid-layer geopotentialm2 s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
deltimtimestep_for_physicsphysics time stepsreal()kind_physin
kdtindex_of_timestepcurrent time step indexindexinteger()in
hprimestandard_deviation_of_subgrid_orographystandard deviation of subgrid height_above_mean_sea_levelmreal(ccpp_constant_one:horizontal_loop_extent)kind_physin
occonvexity_of_subgrid_orographyconvexity of subgrid height_above_mean_sea_levelnonereal(ccpp_constant_one:horizontal_loop_extent)kind_physin
oa4asymmetry_of_subgrid_orographyasymmetry of subgrid height_above_mean_sea_levelnonereal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:4)kind_physin
clx4fraction_of_grid_box_with_subgrid_orography_higher_than_critical_heighthorizontal fraction of grid box covered by subgrid height_above_mean_sea_level higher than critical heightfracreal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:4)kind_physin
thetaangle_from_east_of_maximum_subgrid_orographic_variationsangle with respect to east of maximum subgrid orographic variationsdegreereal(ccpp_constant_one:horizontal_loop_extent)kind_physin
sigmaslope_of_subgrid_orographyslope of subgrid height_above_mean_sea_levelnonereal(ccpp_constant_one:horizontal_loop_extent)kind_physin
gammaanisotropy_of_subgrid_orographyanisotropy of subgrid height_above_mean_sea_levelnonereal(ccpp_constant_one:horizontal_loop_extent)kind_physin
elvmaxmaximum_subgrid_orographymaximum of subgrid height_above_mean_sea_levelmreal(ccpp_constant_one:horizontal_loop_extent)kind_physinout
dusfcinstantaneous_x_stress_due_to_gravity_wave_dragzonal surface stress due to orographic gravity wave dragPareal(ccpp_constant_one:horizontal_loop_extent)kind_physinout
dvsfcinstantaneous_y_stress_due_to_gravity_wave_dragmeridional surface stress due to orographic gravity wave dragPareal(ccpp_constant_one:horizontal_loop_extent)kind_physinout
dtaux2d_mstendency_of_x_wind_due_to_mesoscale_orographic_gravity_wave_draginstantaneous change in x wind due to orographic gw dragm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physinout
dtauy2d_mstendency_of_y_wind_due_to_mesoscale_orographic_gravity_wave_draginstantaneous change in y wind due to orographic gw dragm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physinout
dtaux2d_bltendency_of_x_wind_due_to_blocking_dragx wind tendency from blocking dragm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physinout
dtauy2d_bltendency_of_y_wind_due_to_blocking_dragy wind tendency from blocking dragm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physinout
dusfc_msvertically_integrated_x_momentum_flux_due_to_mesoscale_orographic_gravity_wave_dragintegrated x momentum flux from mesoscale gwdPareal(ccpp_constant_one:horizontal_loop_extent)kind_physinout
dvsfc_msvertically_integrated_y_momentum_flux_due_to_mesoscale_orographic_gravity_wave_dragintegrated y momentum flux from mesoscale gwdPareal(ccpp_constant_one:horizontal_loop_extent)kind_physinout
dusfc_blvertically_integrated_x_momentum_flux_due_to_blocking_dragintegrated x momentum flux from blocking dragPareal(ccpp_constant_one:horizontal_loop_extent)kind_physinout
dvsfc_blvertically_integrated_y_momentum_flux_due_to_blocking_dragintegrated y momentum flux from blocking dragPareal(ccpp_constant_one:horizontal_loop_extent)kind_physinout
ggravitational_accelerationgravitational accelerationm s-2real()kind_physin
cpspecific_heat_of_dry_air_at_constant_pressurespecific heat of dry air at constant pressureJ kg-1 K-1real()kind_physin
rdgas_constant_of_dry_airideal gas constant for dry airJ kg-1 K-1real()kind_physin
rvgas_constant_water_vaporideal gas constant for water vaporJ kg-1 K-1real()kind_physin
imxnumber_of_equatorial_longitude_pointsnumber of longitude points along the equatorcountinteger()in
nmtvrnumber_of_statistical_measures_of_subgrid_orographynumber of statistical measures of subgrid height_above_mean_sea_levelcountinteger()in
cdmbgwdmultiplicative_tunable_parameters_for_mountain_blocking_and_orographic_gravity_wave_dragmultiplic. factors for (1) mountain blocking drag coeff. and (2) ref. level orographic gravity wave dragnonereal(ccpp_constant_one:4)kind_physin
mempi_rankrank of the current MPI taskindexinteger()in
lprntflag_printflag for debugging printoutsflaglogical()in
iprhorizontal_index_of_printed_columnhorizontal index of column used in debugging printoutsindexinteger()in
rdxzblevel_of_dividing_streamlinelevel of the dividing streamlinenonereal(ccpp_constant_one:horizontal_loop_extent)kind_physinout
ldiag_ugwpflag_for_unified_gravity_wave_physics_diagnosticsflag for CIRES UGWP Diagnosticsflaglogical()in
errmsgccpp_error_messageerror message for error handling in CCPPnonecharacter()len=*out
errflgccpp_error_codeerror code for error handling in CCPP1integer()out

GFS Orographic GWD Scheme General Algorithm

  1. Calculate subgrid mountain blocking
  2. Calculate orographic wave drag

The NWP model gravity wave drag (GWD) scheme in the GFS has two main components: how the surface stress is computed, and then how that stress is distributed over a vertical column where it may interact with the models momentum. Each of these depends on the large scale environmental atmospheric state and assumptions about the sub-grid scale processes. In Alpert GWD (1987) based on linear, two-dimensional non-rotating, stably stratified flow over a mountain ridge, sub-grid scale gravity wave motions are assumed which propagate away from the mountain. Described in Alpert (1987), the flux measured over a "low level" vertically averaged layer, in the atmosphere defines a base level flux. "Low level" was taken to be the first 1/3 of the troposphere in the 1987 implementation. This choice was meant to encompass a thick low layer for vertical averages of the environmental (large scale) flow quantities. The vertical momentum flux or gravity wave stress in a grid box due to a single mountain is given as in Pierrehumbert(1986) [164] :

\[ \tau = \frac {\rho \: U^{3}\: G(F_{r})} {\Delta X \ N } \]

where \( \Delta X \) is a grid increment, N is the Brunt Viasala frequency

\[ N(\sigma) = \frac{-g \: \sigma \: \frac{\partial\Theta}{\partial\sigma}}{\Theta \:R \:T} \]

The environmental variables are calculated from a mass weighted vertical average over a base layer. \(G(F_{r})\) is a monotonically increasing function of Froude number :

\[ F_{r} = \frac{N h^{'}}{U} \]

where \(U\) is the wind speed calculated as a mass weighted vertical average in the base layer, and \(h^{'}\), is the vertical displacement caused by the orography variance. An effective mountain length for the gravity wave processes:

\[ l^{*} = \frac{\Delta X}{m} \]

where \(m\) is the number of mountains in a grid box, can then be defined to obtain the form of the base level stress

\[ \tau = \frac {\rho \: U^{3} \: G(F_{r})} {N \ l^{*}} \]

giving the stress induced from the surface in a model grid box. Pierrehumbert(1986) [164] gives the form for the function \(G(F_{r})\) as

\[ G(F_{r}) = \bar{G}\frac{F^{2}_{r}}{F^{2}_{r}\: + \:a^{2}} \]

Where \( \bar{G} \) is an order unity non-dimensional saturation flux set to 1 and \(a\) is a function of the mountain aspect ratio also set to 1 in the 1987 implementation of the GFS GWD. Typical values of U=10m/s, N=0.01 1/s, l*=100km, and a=1, gives a flux of 1 Pascal and if this flux is made to go to zero linearly with height then the decelerations would be about 10/m/s/day which is consistent with observations in PH.

In Kim, Moorthi, Alpert's (1998, 2001) GWD currently in GFS operations, the GWD scheme has the same physical basis as in Alpert (1987) with the addition of enhancement factors for the amplitude, G, and mountain shape details in G(Fr) to account for effects from the mountain blocking. A factor, E m', is an enhancement factor on the stress in the Alpert '87 scheme. The E ranges from no enhancement to an upper limit of 3, E=E(OA)[1-3], and is a function of OA, the Orographic Asymmetry defined in Kim and Arakawa (1995) [107] as Orographic Asymmetry (OA):

\[ OA=\frac{ \bar{x} \ - \ \sum\limits_{j=1}^{N_{b}} x_{j} \ n_{j} }{\sigma_{x}} \]

where \(N_{b}\) is the total number of bottom blocks in the mountain barrier, \( \sigma_{x} \) is the standard deviation of the horizontal distance defined by

\[ \sigma_{x} = \sqrt{ \frac{\sum\limits_{j=1}^{N_{b}} \ (x_{j} \ - \ \bar{x} )^2}{N_{x}} } \]

where \(N_{x}\) is the number of grid intervals for the large scale domain being considered. So the term, E(OA)m'/ \( \Delta X \) in Kim's scheme represents a multiplier on G shown in Alpert's eq (1), where m' is the number of mountains in a sub-grid scale box. Kim increased the complexity of m' making it a function of the fractional area of the sub-grid mountain and the asymmetry and convexity statistics which are found from running a gravity wave model for a large number of cases:

\[ m^{'} = C_{m} \Delta X \left[ \frac{1 \ + \ \sum\limits_{x} L_{h} }{\Delta X} \right]^{OA+1} \]

Where, according to Kim, \( \sum \frac{L_{h}}{\Delta X} \) is the fractional area covered by the subgrid-scale orography higher than a critical height \( h_{c} = Fr_{c} U_{0}/N_{0} \) , over the "low level" vertically averaged layer, for a grid box with the interval \( \Delta X \). Each \( L_{n}\) is the width of a segment of orography intersection at the critical height:

\[ Fr_{0} = \frac{N_{0} \ h^{'}}{U_{0}} \]

\[ G^{'}(OC,Fr_{0}) = \frac{Fr_{0}^{2}}{Fr_{0}^{2} \ + \ a^{2}} \]

\[ a^{2} = \frac{C_{G}}{OC} \]

\[ E(OA, Fr_{0}) = (OA \ + \ 2)^{\delta} \]

and

\[ \delta \ = \ \frac{C_{E} \ Fr_{0}}{Fr_{c}} \]


where \( Fr_{c} \) is as in Alpert.

This represents a closed scheme, somewhat empirical adjustments to the original scheme to calculate the surface stress.

Momentum is deposited by the sub-grid scale gravity waves break due to the presence of convective mixing assumed to occur when the minimum Richardson number:

Orographic Convexity (OC) =

\[ OC=\frac{ \sum\limits_{j=1}^{N_{x}} \ (h_{j} \ - \ \bar{h})^4 }{N_{x} \ \sigma_{h}^4} \]


and where

\[ \sigma_{h} = \sqrt{ \frac{\sum\limits_{j=1}^{N_{x}} \ (h_{j} \ - \ \bar{h} )^2}{N_{x}} } \]

This represents a closed scheme, somewhat empirical adjustments to the original scheme to calculate the surface stress.

Momentum is deposited by the sub-grid scale gravity waves break due to the presence of convective mixing assumed to occur when the minimum Richardson number:

\[ Ri_{m} = \frac{Ri(1 \ - \ Fr)}{(1 \ + \ \sqrt{Ri}Fr)^2} \]

Is less than 1/4 Or if critical layers are encountered in a layer the the momentum flux will vanish. The critical layer is defined when the base layer wind becomes perpendicular to the environmental wind. Otherwise, wave breaking occurs at a level where the amplification of the wave causes the local Froude number or similarly a truncated (first term of the) Scorer parameter, to be reduced below a critical value by the saturation hypothesis (Lindzen). This is done through eq 1 which can be written as

\[ \tau = \rho U N k h^{'2} \]

For small Froude number this is discretized in the vertical so at each level the stress is reduced by ratio of the Froude or truncated Scorer parameter, \( \frac{U^{2}}{N^{2}} = \frac{N \tau_{l-1}}{\rho U^{3} k} \) , where the stress is from the layer below beginning with that found near the surface. The respective change in momentum is applied in that layer building up from below.

An amplitude factor is part of the calibration of this scheme which is a function of the model resolution and the vertical diffusion. This is because the vertical diffusion and the GWD account encompass similar physical processes. Thus, one needs to run the model over and over for various amplitude factors for GWD and vertical diffusion.

In addition, there is also mountain blocking from lift and frictional forces. Improved integration between how the GWD is calculated and the mountain blocking of wind flow around sub-grid scale orography is underway at NCEP. The GFS already has convectively forced GWD an independent process.

GFS Orographic GWD Scheme Detailed Algorithm