CCPP SciDoc  v6.0.0
Common Community Physics Package Developed at DTC

◆ cires_ugwp_run()

subroutine, public cires_ugwp::cires_ugwp_run ( logical, intent(in)  do_ugwp,
integer, intent(in)  me,
integer, intent(in)  master,
integer, intent(in)  im,
integer, intent(in)  levs,
integer, intent(in)  ntrac,
real(kind=kind_phys), intent(in)  dtp,
integer, intent(in)  kdt,
integer, intent(in)  lonr,
real(kind=kind_phys), dimension(:), intent(in)  oro,
real(kind=kind_phys), dimension(:), intent(in)  oro_uf,
real(kind=kind_phys), dimension(:), intent(in)  hprime,
integer, intent(in)  nmtvr,
real(kind=kind_phys), dimension(:), intent(in)  oc,
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(inout)  elvmax,
real(kind=kind_phys), dimension(:, :), intent(in)  clx,
real(kind=kind_phys), dimension(:, :), intent(in)  oa4,
logical, intent(in)  do_tofd,
logical, intent(in)  ldiag_ugwp,
real(kind=kind_phys), dimension(:), intent(in)  cdmbgwd,
real(kind=kind_phys), dimension(:), intent(in)  xlat,
real(kind=kind_phys), dimension(:), intent(in)  xlat_d,
real(kind=kind_phys), dimension(:), intent(in)  sinlat,
real(kind=kind_phys), dimension(:), intent(in)  coslat,
real(kind=kind_phys), dimension(:), intent(in)  area,
real(kind=kind_phys), dimension(:, :), intent(in)  ugrs,
real(kind=kind_phys), dimension(:, :), intent(in)  vgrs,
real(kind=kind_phys), dimension(:, :), intent(in)  tgrs,
real(kind=kind_phys), dimension(:,:,:), intent(in)  qgrs,
real(kind=kind_phys), dimension(:, :), intent(in)  prsi,
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), dimension(:, :), intent(in)  del,
integer, dimension(:), intent(in)  kpbl,
real(kind=kind_phys), dimension(:), intent(out)  dusfcg,
real(kind=kind_phys), dimension(:), intent(out)  dvsfcg,
real(kind=kind_phys), dimension(:, :), intent(out)  gw_dudt,
real(kind=kind_phys), dimension(:, :), intent(out)  gw_dvdt,
real(kind=kind_phys), dimension(:, :), intent(out)  gw_dtdt,
real(kind=kind_phys), dimension(:, :), intent(out)  gw_kdis,
real(kind=kind_phys), dimension(:), intent(out)  tau_tofd,
real(kind=kind_phys), dimension(:), intent(out)  tau_mtb,
real(kind=kind_phys), dimension(:), intent(out)  tau_ogw,
real(kind=kind_phys), dimension(:), intent(out)  tau_ngw,
real(kind=kind_phys), dimension(:), intent(out)  zmtb,
real(kind=kind_phys), dimension(:), intent(out)  zlwb,
real(kind=kind_phys), dimension(:), intent(out)  zogw,
real(kind=kind_phys), dimension(:, :), intent(out)  dudt_mtb,
real(kind=kind_phys), dimension(:, :), intent(out)  dudt_ogw,
real(kind=kind_phys), dimension(:, :), intent(out)  dudt_tms,
real(kind=kind_phys), dimension(:,:), intent(inout)  du3dt_mtb,
real(kind=kind_phys), dimension(:,:), intent(inout)  du3dt_ogw,
real(kind=kind_phys), dimension(:,:), intent(inout)  du3dt_tms,
real(kind=kind_phys), dimension(:, :), intent(inout)  dudt,
real(kind=kind_phys), dimension(:, :), intent(inout)  dvdt,
real(kind=kind_phys), dimension(:, :), intent(inout)  dtdt,
real(kind=kind_phys), dimension(:), intent(out)  rdxzb,
real(kind=kind_phys), intent(in)  con_g,
real(kind=kind_phys), intent(in)  con_pi,
real(kind=kind_phys), intent(in)  con_cp,
real(kind=kind_phys), intent(in)  con_rd,
real(kind=kind_phys), intent(in)  con_rv,
real(kind=kind_phys), intent(in)  con_fvirt,
real(kind=kind_phys), intent(in)  con_omega,
real(kind=kind_phys), dimension(:), intent(in)  rain,
integer, intent(in)  ntke,
real(kind=kind_phys), dimension(:,:), intent(in)  q_tke,
real(kind=kind_phys), dimension(:,:), intent(in)  dqdt_tke,
logical, intent(in)  lprnt,
integer, intent(in)  ipr,
real(kind=kind_phys), dimension(:,:,:), intent(inout), optional  dtend,
integer, dimension(:,:), intent(in)  dtidx,
integer, intent(in)  index_of_x_wind,
integer, intent(in)  index_of_y_wind,
integer, intent(in)  index_of_temperature,
integer, intent(in)  index_of_process_orographic_gwd,
integer, intent(in)  index_of_process_nonorographic_gwd,
logical, intent(in)  ldiag3d,
logical, intent(in)  lssav,
logical, intent(in)  flag_for_gwd_generic_tend,
character(len=*), intent(out)  errmsg,
integer, intent(out)  errflg 
)

CIRES UGWP V0 Scheme General Algorithm

The physics of Non-Orographic Gravity Waves (NGWs) in the UGWP framework (Yudin et al. 2018 [193]) is represented by four GW-solvers, introduced in Lindzen (1981) [117], Hines (1997) [86], Alexander and Dunkerton (1999) [1], and Scinocca (2003) [170]. A major modification of these GW solvers was introduced with the addition of the background dissipation of temperature and winds to the saturation criteria for wave breaking. This feature is important in the mesosphere and thermosphere for WAM applications and it considers appropriate scale-dependent dissipation of waves near the model top lid providing the momentum and energy conservation in the vertical column physics (Shaw and Shepherd (2009) [171]). In the UGWP-v0 scheme, a modification of the Scinocca (2003) [170] algorithm for NGWs with non-hydrostatic and rotational effects for GW propagations and background dissipation is contained in the subroutine fv3_ugwp_solv2_v0. Future development plans for the UGWP scheme include additional GW-solvers to be implemented along with physics-based triggering of waves and stochastic approaches for selection of GW modes characterized by horizontal phase velocities, azimuthal directions and magnitude of the vertical momentum flux (VMF).

In UGWP-v0, the specification for the VMF function is adopted from the GEOS-5 global atmosphere model of GMAO NASA/GSFC, as described in Molod et al. (2015) [137] and employed in the MERRRA-2 reanalysis (Gelaro et al., 2017 [70]). The Fortran subroutine slat_geos5_tamp_v0 describes the latitudinal shape of VMF-function as displayed in Figure 3 of Molod et al. (2015) [137]. It shows that the enhanced values of VMF in the equatorial region gives opportunity to simulate the QBO-like oscillations in the equatorial zonal winds and lead to more realistic simulations of the equatorial dynamics in GEOS-5 operational and MERRA-2 reanalysis products. For the first vertically extended version of FV3GFS in the stratosphere and mesosphere, this simplified function of VMF allows us to tune the model climate and to evaluate multi-year simulations of FV3GFS with the MERRA-2 and ERA-5 reanalysis products, along with temperature, ozone, and water vapor observations of current satellite missions. After delivery of the UGWP-code, the EMC group developed and tested approach to modulate the zonal mean NGW forcing by 3D-distributions of the total precipitation as a proxy for the excitation of NGWs by convection and the vertically-integrated
(surface - tropopause) Turbulent Kinetic Energy (TKE). The verification scores with updated NGW forcing, as reported elsewhere by EMC researchers, display noticeable improvements in the forecast scores produced by FV3GFS configuration extended into the mesosphere.

Argument Table

cires_ugwp_run argument table
local_namestandard_namelong_nameunitstypedimensionskindintent
do_ugwpflag_for_unified_gravity_wave_physics_gravity_wave_drag_schemeflag to activate CIRES UGWPflaglogical()in
mempi_rankMPI rank of current processindexinteger()in
mastermpi_rootMPI rank of master processindexinteger()in
imhorizontal_loop_extenthorizontalcountinteger()in
levsvertical_layer_dimensionnumber of vertical levelscountinteger()in
ntracnumber_of_tracersnumber of tracerscountinteger()in
dtptimestep_for_physicsphysics timestepsreal()kind_physin
kdtindex_of_timestepcurrent forecast iterationindexinteger()in
lonrnumber_of_equatorial_longitude_pointsnumber of global points in x-dir (i) along the equatorcountinteger()in
oroheight_above_mean_sea_levelheight_above_mean_sea_levelmreal(ccpp_constant_one:horizontal_loop_extent)kind_physin
oro_ufunfiltered_height_above_mean_sea_levelunfiltered height_above_mean_sea_levelmreal(ccpp_constant_one:horizontal_loop_extent)kind_physin
hprimestandard_deviation_of_subgrid_orographystandard deviation of subgrid height_above_mean_sea_levelmreal(ccpp_constant_one:horizontal_loop_extent)kind_physin
nmtvrnumber_of_statistical_measures_of_subgrid_orographynumber of topographic variables in GWDcountinteger()in
occonvexity_of_subgrid_orographyconvexity of subgrid height_above_mean_sea_levelnonereal(ccpp_constant_one:horizontal_loop_extent)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
clxfraction_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
oa4asymmetry_of_subgrid_orographyasymmetry of subgrid height_above_mean_sea_levelnonereal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:4)kind_physin
do_tofdflag_for_turbulent_orographic_form_drag_in_unified_gravity_wave_physics_gravitiy_wave_drag_schemeflag for turbulent orographic form dragflaglogical()in
ldiag_ugwpflag_for_unified_gravity_wave_physics_diagnosticsflag for CIRES UGWP Diagnosticsflaglogical()in
cdmbgwdmultiplicative_tunable_parameters_for_mountain_blocking_and_orographic_gravity_wave_dragmultiplication factors for cdmb and gwdnonereal(ccpp_constant_one:4)kind_physin
xlatlatitudegrid latituderadianreal(ccpp_constant_one:horizontal_loop_extent)kind_physin
xlat_dlatitude_in_degreelatitude in degree northdegree_northreal(ccpp_constant_one:horizontal_loop_extent)kind_physin
sinlatsine_of_latitudesine of the grid latitudenonereal(ccpp_constant_one:horizontal_loop_extent)kind_physin
coslatcosine_of_latitudecosine of the grid latitudenonereal(ccpp_constant_one:horizontal_loop_extent)kind_physin
areacell_areaarea of the grid cellm2real(ccpp_constant_one:horizontal_loop_extent)kind_physin
ugrsx_windzonal windm s-1real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
vgrsy_windmeridional windm s-1real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
tgrsair_temperaturemodel layer mean temperatureKreal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
qgrstracer_concentrationmodel layer mean tracer concentrationkg kg-1real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension, ccpp_constant_one:number_of_tracers)kind_physin
prsiair_pressure_at_interfaceair pressure at model layer interfacesPareal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_interface_dimension)kind_physin
prslair_pressuremean layer pressurePareal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
prslkdimensionless_exner_functiondimensionless Exner function at model layer centersnonereal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
phiigeopotential_at_interfacegeopotential at model layer interfacesm2 s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_interface_dimension)kind_physin
philgeopotentialgeopotential at model layer centersm2 s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
delair_pressure_difference_between_midlayersair pressure difference between midlayersPareal(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
dusfcginstantaneous_x_stress_due_to_gravity_wave_dragzonal surface stress due to orographic gravity wave dragPareal(ccpp_constant_one:horizontal_loop_extent)kind_physout
dvsfcginstantaneous_y_stress_due_to_gravity_wave_dragmeridional surface stress due to orographic gravity wave dragPareal(ccpp_constant_one:horizontal_loop_extent)kind_physout
gw_dudttendency_of_x_wind_due_to_gravity_wave_dragzonal wind tendency due to UGWPm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physout
gw_dvdttendency_of_y_wind_due_to_gravity_wave_dragmeridional wind tendency due to UGWPm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physout
gw_dtdttendency_of_air_temperature_due_to_gravity_wave_dragair temperature tendency due to UGWPK s-1real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physout
gw_kdisatmosphere_momentum_diffusivity_due_to_gravity_wave_drageddy mixing due to UGWPm2 s-1real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physout
tau_tofdinstantaneous_momentum_flux_due_to_turbulent_orographic_form_dragmomentum flux or stress due to TOFDPareal(ccpp_constant_one:horizontal_loop_extent)kind_physout
tau_mtbinstantaneous_momentum_flux_due_to_mountain_blocking_dragmomentum flux or stress due to mountain blocking dragPareal(ccpp_constant_one:horizontal_loop_extent)kind_physout
tau_ogwinstantaneous_momentum_flux_due_to_orographic_gravity_wave_dragmomentum flux or stress due to orographic gravity wave dragPareal(ccpp_constant_one:horizontal_loop_extent)kind_physout
tau_ngwinstantaneous_momentum_flux_due_to_nonstationary_gravity_wavemomentum flux or stress due to nonstationary gravity wavesPareal(ccpp_constant_one:horizontal_loop_extent)kind_physout
zmtbheight_of_mountain_blockingheight of mountain blocking dragmreal(ccpp_constant_one:horizontal_loop_extent)kind_physout
zlwbheight_of_low_level_wave_breakingheight of low level wave breakingmreal(ccpp_constant_one:horizontal_loop_extent)kind_physout
zogwheight_of_launch_level_of_orographic_gravity_waveheight of launch level of orographic gravity wavemreal(ccpp_constant_one:horizontal_loop_extent)kind_physout
dudt_mtbinstantaneous_change_in_x_wind_due_to_mountain_blocking_draginstantaneous change in x wind due to mountain blocking dragm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physout
dudt_ogwtendency_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_physout
dudt_tmstendency_of_x_wind_due_to_turbulent_orographic_form_draginstantaneous change in x wind due to TOFDm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physout
du3dt_mtbtime_integral_of_change_in_x_wind_due_to_mountain_blocking_dragtime integral of change in x wind due to mountain blocking dragm s-2real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physinout
du3dt_ogwtime_integral_of_change_in_x_wind_due_to_orographic_gravity_wave_dragtime integral of 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
du3dt_tmstime_integral_of_change_in_x_wind_due_to_turbulent_orographic_form_dragtime integral of change in x wind due to TOFDm 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
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
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
rdxzblevel_of_dividing_streamlinelevel of the dividing streamlinenonereal(ccpp_constant_one:horizontal_loop_extent)kind_physout
con_ggravitational_accelerationgravitational accelerationm s-2real()kind_physin
con_pipiratio of a circle's circumference to its diameternonereal()kind_physin
con_cpspecific_heat_of_dry_air_at_constant_pressurespecific heat !of dry air at constant pressureJ kg-1 K-1real()kind_physin
con_rdgas_constant_of_dry_airideal gas constant for dry airJ kg-1 K-1real()kind_physin
con_rvgas_constant_water_vaporideal gas constant for water vaporJ kg-1 K-1real()kind_physin
con_fvirtratio_of_vapor_to_dry_air_gas_constants_minus_onerv/rd - 1 (rv = ideal gas constant for water vapor)nonereal()kind_physin
con_omegaangular_velocity_of_earthangular velocity of earths-1real()kind_physin
rainlwe_thickness_of_precipitation_amount_on_dynamics_timesteptotal rain at this time stepmreal(ccpp_constant_one:horizontal_loop_extent)kind_physin
ntkeindex_of_turbulent_kinetic_energy_in_tracer_concentration_arraytracer index for turbulent kinetic energyindexinteger()in
q_tketurbulent_kinetic_energyturbulent kinetic energyJreal(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
dqdt_tkeprocess_split_cumulative_tendency_of_turbulent_kinetic_energyturbulent kinetic energy tendency due to model physicsJ s-1real(ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension)kind_physin
lprntflag_printcontrol flag for diagnostic print outflaglogical()in
iprhorizontal_index_of_printed_columnhorizontal index of printed columnindexinteger()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_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
index_of_temperatureindex_of_temperature_in_cumulative_change_indexindex of temperature in first dimension of array cumulative change indexindexinteger()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_process_nonorographic_gwdindex_of_nonorographic_gravity_wave_drag_process_in_cumulative_change_indexindex of nonorographic gravity wave drag process in second dimension of array cumulative change indexindexinteger()in
ldiag3dflag_for_diagnostics_3dflag for 3d diagnostic fieldsflaglogical()in
lssavflag_for_diagnosticslogical flag for storing diagnosticsflaglogical()in
flag_for_gwd_generic_tendflag_for_generic_tendency_due_to_gravity_wave_dragtrue if GFS_GWD_generic should calculate tendenciesflaglogical()in
errmsgccpp_error_messageerror message for error handling in CCPPnonecharacter()len=*out
errflgccpp_error_codeerror code for error handling in CCPP1integer()out

References fv3_ugwp_solv2_v0(), and gwdps::gwdps_run().

Here is the call graph for this function: