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 | ||
) |
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.
local_name | standard_name | long_name | units | type | dimensions | kind | intent |
---|---|---|---|---|---|---|---|
do_ugwp | flag_for_unified_gravity_wave_physics_gravity_wave_drag_scheme | flag to activate CIRES UGWP | flag | logical | () | in | |
me | mpi_rank | MPI rank of current process | index | integer | () | in | |
master | mpi_root | MPI rank of master process | index | integer | () | in | |
im | horizontal_loop_extent | horizontal | count | integer | () | in | |
levs | vertical_layer_dimension | number of vertical levels | count | integer | () | in | |
ntrac | number_of_tracers | number of tracers | count | integer | () | in | |
dtp | timestep_for_physics | physics timestep | s | real | () | kind_phys | in |
kdt | index_of_timestep | current forecast iteration | index | integer | () | in | |
lonr | number_of_equatorial_longitude_points | number of global points in x-dir (i) along the equator | count | integer | () | in | |
oro | height_above_mean_sea_level | height_above_mean_sea_level | m | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
oro_uf | unfiltered_height_above_mean_sea_level | unfiltered height_above_mean_sea_level | m | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
hprime | standard_deviation_of_subgrid_orography | standard deviation of subgrid height_above_mean_sea_level | m | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
nmtvr | number_of_statistical_measures_of_subgrid_orography | number of topographic variables in GWD | count | integer | () | in | |
oc | convexity_of_subgrid_orography | convexity of subgrid height_above_mean_sea_level | none | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
theta | angle_from_east_of_maximum_subgrid_orographic_variations | angle with_respect to east of maximum subgrid orographic variations | degree | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
sigma | slope_of_subgrid_orography | slope of subgrid height_above_mean_sea_level | none | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
gamma | anisotropy_of_subgrid_orography | anisotropy of subgrid height_above_mean_sea_level | none | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
elvmax | maximum_subgrid_orography | maximum of subgrid height_above_mean_sea_level | m | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | inout |
clx | fraction_of_grid_box_with_subgrid_orography_higher_than_critical_height | horizontal fraction of grid box covered by subgrid height_above_mean_sea_level higher than critical height | frac | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:4) | kind_phys | in |
oa4 | asymmetry_of_subgrid_orography | asymmetry of subgrid height_above_mean_sea_level | none | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:4) | kind_phys | in |
do_tofd | flag_for_turbulent_orographic_form_drag_in_unified_gravity_wave_physics_gravitiy_wave_drag_scheme | flag for turbulent orographic form drag | flag | logical | () | in | |
ldiag_ugwp | flag_for_unified_gravity_wave_physics_diagnostics | flag for CIRES UGWP Diagnostics | flag | logical | () | in | |
cdmbgwd | multiplicative_tunable_parameters_for_mountain_blocking_and_orographic_gravity_wave_drag | multiplication factors for cdmb and gwd | none | real | (ccpp_constant_one:4) | kind_phys | in |
xlat | latitude | grid latitude | radian | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
xlat_d | latitude_in_degree | latitude in degree north | degree_north | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
sinlat | sine_of_latitude | sine of the grid latitude | none | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
coslat | cosine_of_latitude | cosine of the grid latitude | none | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
area | cell_area | area of the grid cell | m2 | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
ugrs | x_wind | zonal wind | m s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
vgrs | y_wind | meridional wind | m s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
tgrs | air_temperature | model layer mean temperature | K | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
qgrs | tracer_concentration | model layer mean tracer concentration | kg kg-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension, ccpp_constant_one:number_of_tracers) | kind_phys | in |
prsi | air_pressure_at_interface | air pressure at model layer interfaces | Pa | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_interface_dimension) | kind_phys | in |
prsl | air_pressure | mean layer pressure | Pa | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
prslk | dimensionless_exner_function | dimensionless Exner function at model layer centers | none | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
phii | geopotential_at_interface | geopotential at model layer interfaces | m2 s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_interface_dimension) | kind_phys | in |
phil | geopotential | geopotential at model layer centers | m2 s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
del | air_pressure_difference_between_midlayers | air pressure difference between midlayers | Pa | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
kpbl | vertical_index_at_top_of_atmosphere_boundary_layer | vertical index at top atmospheric boundary layer | index | integer | (ccpp_constant_one:horizontal_loop_extent) | in | |
dusfcg | instantaneous_x_stress_due_to_gravity_wave_drag | zonal surface stress due to orographic gravity wave drag | Pa | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
dvsfcg | instantaneous_y_stress_due_to_gravity_wave_drag | meridional surface stress due to orographic gravity wave drag | Pa | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
gw_dudt | tendency_of_x_wind_due_to_gravity_wave_drag | zonal wind tendency due to UGWP | m s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | out |
gw_dvdt | tendency_of_y_wind_due_to_gravity_wave_drag | meridional wind tendency due to UGWP | m s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | out |
gw_dtdt | tendency_of_air_temperature_due_to_gravity_wave_drag | air temperature tendency due to UGWP | K s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | out |
gw_kdis | atmosphere_momentum_diffusivity_due_to_gravity_wave_drag | eddy mixing due to UGWP | m2 s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | out |
tau_tofd | instantaneous_momentum_flux_due_to_turbulent_orographic_form_drag | momentum flux or stress due to TOFD | Pa | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
tau_mtb | instantaneous_momentum_flux_due_to_mountain_blocking_drag | momentum flux or stress due to mountain blocking drag | Pa | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
tau_ogw | instantaneous_momentum_flux_due_to_orographic_gravity_wave_drag | momentum flux or stress due to orographic gravity wave drag | Pa | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
tau_ngw | instantaneous_momentum_flux_due_to_nonstationary_gravity_wave | momentum flux or stress due to nonstationary gravity waves | Pa | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
zmtb | height_of_mountain_blocking | height of mountain blocking drag | m | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
zlwb | height_of_low_level_wave_breaking | height of low level wave breaking | m | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
zogw | height_of_launch_level_of_orographic_gravity_wave | height of launch level of orographic gravity wave | m | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
dudt_mtb | instantaneous_change_in_x_wind_due_to_mountain_blocking_drag | instantaneous change in x wind due to mountain blocking drag | m s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | out |
dudt_ogw | tendency_of_x_wind_due_to_mesoscale_orographic_gravity_wave_drag | instantaneous change in x wind due to orographic gw drag | m s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | out |
dudt_tms | tendency_of_x_wind_due_to_turbulent_orographic_form_drag | instantaneous change in x wind due to TOFD | m s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | out |
du3dt_mtb | time_integral_of_change_in_x_wind_due_to_mountain_blocking_drag | time integral of change in x wind due to mountain blocking drag | m s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | inout |
du3dt_ogw | time_integral_of_change_in_x_wind_due_to_orographic_gravity_wave_drag | time integral of change in x wind due to orographic gw drag | m s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | inout |
du3dt_tms | time_integral_of_change_in_x_wind_due_to_turbulent_orographic_form_drag | time integral of change in x wind due to TOFD | m s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | inout |
dudt | process_split_cumulative_tendency_of_x_wind | zonal wind tendency due to model physics | m s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | inout |
dvdt | process_split_cumulative_tendency_of_y_wind | meridional wind tendency due to model physics | m s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | inout |
dtdt | process_split_cumulative_tendency_of_air_temperature | air temperature tendency due to model physics | K s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | inout |
rdxzb | level_of_dividing_streamline | level of the dividing streamline | none | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
con_g | gravitational_acceleration | gravitational acceleration | m s-2 | real | () | kind_phys | in |
con_pi | pi | ratio of a circle's circumference to its diameter | none | real | () | kind_phys | in |
con_cp | specific_heat_of_dry_air_at_constant_pressure | specific heat !of dry air at constant pressure | J kg-1 K-1 | real | () | kind_phys | in |
con_rd | gas_constant_of_dry_air | ideal gas constant for dry air | J kg-1 K-1 | real | () | kind_phys | in |
con_rv | gas_constant_water_vapor | ideal gas constant for water vapor | J kg-1 K-1 | real | () | kind_phys | in |
con_fvirt | ratio_of_vapor_to_dry_air_gas_constants_minus_one | rv/rd - 1 (rv = ideal gas constant for water vapor) | none | real | () | kind_phys | in |
con_omega | angular_velocity_of_earth | angular velocity of earth | s-1 | real | () | kind_phys | in |
rain | lwe_thickness_of_precipitation_amount_on_dynamics_timestep | total rain at this time step | m | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
ntke | index_of_turbulent_kinetic_energy_in_tracer_concentration_array | tracer index for turbulent kinetic energy | index | integer | () | in | |
q_tke | turbulent_kinetic_energy | turbulent kinetic energy | J | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
dqdt_tke | process_split_cumulative_tendency_of_turbulent_kinetic_energy | turbulent kinetic energy tendency due to model physics | J s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
lprnt | flag_print | control flag for diagnostic print out | flag | logical | () | in | |
ipr | horizontal_index_of_printed_column | horizontal index of printed column | index | integer | () | in | |
dtend | cumulative_change_of_state_variables | diagnostic tendencies for state variables | mixed | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension, ccpp_constant_one:cumulative_change_of_state_variables_outer_index_max) | kind_phys | inout |
dtidx | cumulative_change_of_state_variables_outer_index | index of state-variable and process in last dimension of diagnostic tendencies array AKA cumulative_change_index | index | integer | (ccpp_constant_one:number_of_tracers_plus_one_hundred, ccpp_constant_one:number_of_cumulative_change_processes) | in | |
index_of_x_wind | index_of_x_wind_in_cumulative_change_index | index of x-wind in first dimension of array cumulative change index | index | integer | () | in | |
index_of_y_wind | index_of_y_wind_in_cumulative_change_index | index of x-wind in first dimension of array cumulative change index | index | integer | () | in | |
index_of_temperature | index_of_temperature_in_cumulative_change_index | index of temperature in first dimension of array cumulative change index | index | integer | () | in | |
index_of_process_orographic_gwd | index_of_orographic_gravity_wave_drag_process_in_cumulative_change_index | index of orographic gravity wave drag process in second dimension of array cumulative change index | index | integer | () | in | |
index_of_process_nonorographic_gwd | index_of_nonorographic_gravity_wave_drag_process_in_cumulative_change_index | index of nonorographic gravity wave drag process in second dimension of array cumulative change index | index | integer | () | in | |
ldiag3d | flag_for_diagnostics_3d | flag for 3d diagnostic fields | flag | logical | () | in | |
lssav | flag_for_diagnostics | logical flag for storing diagnostics | flag | logical | () | in | |
flag_for_gwd_generic_tend | flag_for_generic_tendency_due_to_gravity_wave_drag | true if GFS_GWD_generic should calculate tendencies | flag | logical | () | in | |
errmsg | ccpp_error_message | error message for error handling in CCPP | none | character | () | len=* | out |
errflg | ccpp_error_code | error code for error handling in CCPP | 1 | integer | () | out |
References fv3_ugwp_solv2_v0(), and gwdps::gwdps_run().