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

◆ drag_suite_run()

subroutine drag_suite::drag_suite_run ( integer, intent(in) im,
integer, intent(in) km,
real(kind=kind_phys), dimension(:,:), intent(inout) dvdt,
real(kind=kind_phys), dimension(:,:), intent(inout) dudt,
real(kind=kind_phys), dimension(:,:), intent(inout) dtdt,
real(kind=kind_phys), dimension(:,:), intent(in) u1,
real(kind=kind_phys), dimension(:,:), intent(in) v1,
real(kind=kind_phys), dimension(:,:), intent(in) t1,
real(kind=kind_phys), dimension(:,:), intent(in) q1,
integer, dimension(:), intent(in) kpbl,
real(kind=kind_phys), dimension(:,:), intent(in) prsi,
real(kind=kind_phys), dimension(:,:), intent(in) del,
real(kind=kind_phys), dimension(:,:), intent(in) prsl,
real(kind=kind_phys), dimension(:,:), intent(in) prslk,
real(kind=kind_phys), dimension(:,:), intent(in) phii,
real(kind=kind_phys), dimension(:,:), intent(in) phil,
real(kind=kind_phys), intent(in) deltim,
integer, intent(in) kdt,
real(kind=kind_phys), dimension(:), intent(in) var,
real(kind=kind_phys), dimension(:), intent(in) oc1,
real(kind=kind_phys), dimension(:,:), intent(in) oa4,
real(kind=kind_phys), dimension(:,:), intent(in) ol4,
real(kind=kind_phys), dimension(:), intent(in), optional varss,
real(kind=kind_phys), dimension(:), intent(in), optional oc1ss,
real(kind=kind_phys), dimension(:,:), intent(in), optional oa4ss,
real(kind=kind_phys), dimension(:,:), intent(in), optional ol4ss,
real(kind=kind_phys), dimension(:), intent(in) theta,
real(kind=kind_phys), dimension(:), intent(in) sigma,
real(kind=kind_phys), dimension(:), intent(in) gamma,
real(kind=kind_phys), dimension(:), intent(in) elvmax,
real(kind=kind_phys), dimension(:,:), intent(inout), optional dtaux2d_ms,
real(kind=kind_phys), dimension(:,:), intent(inout), optional dtauy2d_ms,
real(kind=kind_phys), dimension(:,:), intent(inout), optional dtaux2d_bl,
real(kind=kind_phys), dimension(:,:), intent(inout), optional dtauy2d_bl,
real(kind=kind_phys), dimension(:,:), intent(inout), optional dtaux2d_ss,
real(kind=kind_phys), dimension(:,:), intent(inout), optional dtauy2d_ss,
real(kind=kind_phys), dimension(:,:), intent(inout), optional dtaux2d_fd,
real(kind=kind_phys), dimension(:,:), intent(inout), optional dtauy2d_fd,
real(kind=kind_phys), dimension(:), intent(inout) dusfc,
real(kind=kind_phys), dimension(:), intent(inout) dvsfc,
real(kind=kind_phys), dimension(:), intent(inout), optional dusfc_ms,
real(kind=kind_phys), dimension(:), intent(inout), optional dvsfc_ms,
real(kind=kind_phys), dimension(:), intent(inout), optional dusfc_bl,
real(kind=kind_phys), dimension(:), intent(inout), optional dvsfc_bl,
real(kind=kind_phys), dimension(:), intent(inout), optional dusfc_ss,
real(kind=kind_phys), dimension(:), intent(inout), optional dvsfc_ss,
real(kind=kind_phys), dimension(:), intent(inout), optional dusfc_fd,
real(kind=kind_phys), dimension(:), intent(inout), optional dvsfc_fd,
real(kind=kind_phys), dimension(:), intent(in) slmsk,
real(kind=kind_phys), dimension(:), intent(in) br1,
real(kind=kind_phys), dimension(:), intent(in) hpbl,
real(kind=kind_phys), intent(in) g,
real(kind=kind_phys), intent(in) cp,
real(kind=kind_phys), intent(in) rd,
real(kind=kind_phys), intent(in) rv,
real(kind=kind_phys), intent(in) fv,
real(kind=kind_phys), intent(in) pi,
integer, intent(in) imx,
real(kind=kind_phys), dimension(:), intent(in) cdmbgwd,
real(kind=kind_phys), intent(in) alpha_fd,
integer, intent(in) me,
integer, intent(in) master,
logical, intent(in) lprnt,
integer, intent(in) ipr,
real(kind=kind_phys), dimension(:), intent(inout) rdxzb,
real(kind=kind_phys), dimension(:), intent(in) dx,
integer, intent(in) gwd_opt,
logical, intent(in) do_gsl_drag_ls_bl,
logical, intent(in) do_gsl_drag_ss,
logical, intent(in) do_gsl_drag_tofd,
real(kind=kind_phys), dimension(:,:,:), intent(inout), optional dtend,
integer, dimension(:,:), intent(in) dtidx,
integer, intent(in) index_of_process_orographic_gwd,
integer, intent(in) index_of_temperature,
integer, intent(in) index_of_x_wind,
integer, intent(in) index_of_y_wind,
logical, intent(in) ldiag3d,
logical, intent(in) ldiag_ugwp,
logical, intent(in) ugwp_seq_update,
real(kind=kind_phys), dimension(:,:), intent(in), optional spp_wts_gwd,
integer, intent(in) spp_gwd,
character(len=*), intent(out) errmsg,
integer, intent(out) errflg )

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

drag_suite_run argument table
local_namestandard_namelong_nameunitstypedimensionskindintent
imhorizontal_loop_extenthorizontal loop extentcountinteger()in
kmvertical_layer_dimensionnumber of vertical layerscountinteger()in
dvdtprocess_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
dudtprocess_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
dtdtprocess_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
varstandard_deviation_of_subgrid_orographystandard deviation of subgrid height_above_mean_sea_levelmreal(ccpp_constant_one:horizontal_loop_extent)kind_physin
oc1convexity_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
ol4fraction_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
varssstandard_deviation_of_subgrid_orography_small_scalestandard deviation of subgrid height_above_mean_sea_level small scalemreal(ccpp_constant_one:horizontal_loop_extent)kind_physin
oc1ssconvexity_of_subgrid_orography_small_scaleconvexity of subgrid height_above_mean_sea_level small scalenonereal(ccpp_constant_one:horizontal_loop_extent)kind_physin
oa4ssasymmetry_of_subgrid_orography_small_scaleasymmetry of subgrid height_above_mean_sea_level small scalenonereal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:4)kind_physin
ol4ssfraction_of_grid_box_with_subgrid_orography_higher_than_critical_height_small_scalehorizontal fraction of grid box covered by subgrid height_above_mean_sea_level higher than critical height small scalefracreal(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_physin
dtaux2d_mstendency_of_x_wind_due_to_mesoscale_orographic_gravity_wave_dragx wind tendency from mesoscale gwdm 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_dragy wind tendency from mesoscale gwdm 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
dtaux2d_sstendency_of_x_wind_due_to_small_scale_gravity_wave_dragx wind tendency from small scale gwdm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physinout
dtauy2d_sstendency_of_y_wind_due_to_small_scale_gravity_wave_dragy wind tendency from small scale gwdm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physinout
dtaux2d_fdtendency_of_x_wind_due_to_form_dragx wind tendency from form dragm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physinout
dtauy2d_fdtendency_of_y_wind_due_to_form_dragy wind tendency from form dragm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)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
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
dusfc_ssvertically_integrated_x_momentum_flux_due_to_small_scale_gravity_wave_dragintegrated x momentum flux from small scale gwdPareal(ccpp_constant_one:horizontal_loop_extent)kind_physinout
dvsfc_ssvertically_integrated_y_momentum_flux_due_to_small_scale_gravity_wave_dragintegrated y momentum flux from small scale gwdPareal(ccpp_constant_one:horizontal_loop_extent)kind_physinout
dusfc_fdvertically_integrated_x_momentum_flux_due_to_form_dragintegrated x momentum flux from form dragPareal(ccpp_constant_one:horizontal_loop_extent)kind_physinout
dvsfc_fdvertically_integrated_y_momentum_flux_due_to_form_dragintegrated y momentum flux from form dragPareal(ccpp_constant_one:horizontal_loop_extent)kind_physinout
slmskarea_typelandmask: sea/land/ice=0/1/2flagreal(ccpp_constant_one:horizontal_loop_extent)kind_physin
br1bulk_richardson_number_at_lowest_model_levelbulk Richardson number at the surfacenonereal(ccpp_constant_one:horizontal_loop_extent)kind_physin
hpblatmosphere_boundary_layer_thicknessPBL thicknessmreal(ccpp_constant_one:horizontal_loop_extent)kind_physin
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
fvratio_of_vapor_to_dry_air_gas_constants_minus_one(rv/rd) - 1 (rv = ideal gas constant for water vapor)nonereal()kind_physin
pipiratio of a circle's circumference to its diameternonereal()kind_physin
imxnumber_of_equatorial_longitude_pointsnumber of longitude points along the equatorcountinteger()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
mastermpi_rootmaster MPI-rankindexinteger()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
dxcharacteristic_grid_lengthscalesize of the grid cellmreal(ccpp_constant_one:horizontal_loop_extent)kind_physin
gwd_optcontrol_for_drag_suite_gravity_wave_dragflag to choose gwd schemeflaginteger()in
do_gsl_drag_ls_bldo_gsl_drag_suite_mesoscale_orographic_and_blocking_dragflag to activate GSL drag suite - mesoscale GWD and blockingflaglogical()in
do_gsl_drag_ssdo_gsl_drag_suite_small_scale_orographic_dragflag to activate GSL drag suite - small-scale GWDflaglogical()in
do_gsl_drag_tofddo_gsl_drag_suite_turbulent_orographic_form_dragflag to activate GSL drag suite - turb orog form dragflaglogical()in
dtendcumulative_change_of_state_variablesdiagnostic tendencies for state variablesmixedreal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension, ccpp_constant_one:cumulative_change_of_state_variables_outer_index_max)kind_physinout
dtidxcumulative_change_of_state_variables_outer_indexindex of state-variable and process in last dimension of diagnostic tendencies array AKA cumulative_change_indexindexinteger(ccpp_constant_one:number_of_tracers_plus_one_hundred, ccpp_constant_one:number_of_cumulative_change_processes)in
index_of_process_orographic_gwdindex_of_orographic_gravity_wave_drag_process_in_cumulative_change_indexindex of orographic gravity wave drag process in second dimension of array cumulative change indexindexinteger()in
index_of_temperatureindex_of_temperature_in_cumulative_change_indexindex of temperature in first dimension of array cumulative change indexindexinteger()in
index_of_x_windindex_of_x_wind_in_cumulative_change_indexindex of x-wind in first dimension of array cumulative change indexindexinteger()in
index_of_y_windindex_of_y_wind_in_cumulative_change_indexindex of x-wind in first dimension of array cumulative change indexindexinteger()in
ldiag3dflag_for_diagnostics_3dflag for 3d diagnostic fieldsflaglogical()in
ldiag_ugwpflag_for_unified_gravity_wave_physics_diagnosticsflag for CIRES UGWP Diagnosticsflaglogical()in
ugwp_seq_updatedo_ugwp_sequential_updateflag for ugwp sequential updateflaglogical()in
spp_wts_gwdspp_weights_for_gravity_wave_drag_schemespp weights for gravity wave drag scheme1real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
spp_gwdcontrol_for_gravity_wave_drag_spp_perturbationscontrol for gravity wave drag spp perturbationscountinteger()in
errmsgccpp_error_messageerror message for error handling in CCPPnonecharacter()len=*out
errflgccpp_error_codeerror code for error handling in CCPP1integer()out

Orographic drag 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, (1987) (PH):

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

GFS Orographic GWD Scheme Detailed Algorithm

  1. Orographic Gravity Wave Drag Section

Definition at line 205 of file drag_suite.F90.