This module contains the UGWP v0 scheme by Valery Yudin (University of Colorado, CIRES) More...
Functions/Subroutines | |
| subroutine, public | cires_ugwp_init (me, master, nlunit, input_nml_file, logunit, fn_nml2, lonr, levs, ak, bk, dtp, cdmbgwd, cgwf, pa_rf_in, tau_rf_in, con_p0, gwd_opt, do_ugwp, errmsg, errflg) |
| The subroutine initializes the CIRES UGWP V0. | |
| subroutine, public | cires_ugwp_final (errmsg, errflg) |
| The subroutine finalizes the CIRES UGWP. | |
| subroutine, public | cires_ugwp_run (do_ugwp, me, master, im, levs, ntrac, dtp, kdt, lonr, oro, oro_uf, hprime, nmtvr, oc, theta, sigma, gamma, elvmax, clx, oa4, do_tofd, ldiag_ugwp, cdmbgwd, xlat, xlat_d, sinlat, coslat, area, ugrs, vgrs, tgrs, qgrs, prsi, prsl, prslk, phii, phil, del, kpbl, dusfcg, dvsfcg, gw_dudt, gw_dvdt, gw_dtdt, gw_kdis, tau_tofd, tau_mtb, tau_ogw, tau_ngw, zmtb, zlwb, zogw, dusfc_ms, dvsfc_ms, dusfc_bl, dvsfc_bl, dudt_ogw, dtauy2d_ms, dtaux2d_bl, dtauy2d_bl, dudt_mtb, dudt_tms, du3dt_mtb, du3dt_ogw, du3dt_tms, rdxzb, con_g, con_pi, con_cp, con_rd, con_rv, con_fvirt, con_omega, rain, ntke, q_tke, dqdt_tke, lprnt, ipr, dtend, dtidx, index_of_x_wind, index_of_y_wind, index_of_temperature, index_of_process_orographic_gwd, index_of_process_nonorographic_gwd, ldiag3d, lssav, flag_for_gwd_generic_tend, ten_q, errmsg, errflg) |
| These subroutines and modules execute the CIRES UGWP Version 0. | |
This module contains the UGWP v0 scheme by Valery Yudin (University of Colorado, CIRES)
See Valery Yudin's presentation at 2017 NGGPS PI meeting: Gravity waves (GWs): Mesoscale GWs transport momentum, energy (heat) , and create eddy mixing in the whole atmosphere domain; Breaking and dissipating GWs deposit: (a) momentum; (b) heat (energy); and create (c) turbulent mixing of momentum, heat, and tracers To properly incorporate GW effects (a-c) unresolved by DYCOREs we need GW physics "Unified": a) all GW effects due to both dissipation/breaking; b) identical GW solvers for all GW sources; c) ability to replace solvers. Unified Formalism:
| subroutine, public cires_ugwp::cires_ugwp_final | ( | character(len=*), intent(out) | errmsg, |
| integer, intent(out) | errflg | ||
| ) |
The subroutine finalizes the CIRES UGWP.
Definition at line 115 of file cires_ugwp.F90.
| subroutine, public cires_ugwp::cires_ugwp_init | ( | integer, intent(in) | me, |
| integer, intent(in) | master, | ||
| integer, intent(in) | nlunit, | ||
| character(len=*), dimension(:), intent(in) | input_nml_file, | ||
| integer, intent(in) | logunit, | ||
| character(len=*), intent(in) | fn_nml2, | ||
| integer, intent(in) | lonr, | ||
| integer, intent(in) | levs, | ||
| real(kind=kind_phys), dimension(:), intent(in) | ak, | ||
| real(kind=kind_phys), dimension(:), intent(in) | bk, | ||
| real(kind=kind_phys), intent(in) | dtp, | ||
| real(kind=kind_phys), dimension(:), intent(in) | cdmbgwd, | ||
| real(kind=kind_phys), dimension(:), intent(in) | cgwf, | ||
| real(kind=kind_phys), intent(in) | pa_rf_in, | ||
| real(kind=kind_phys), intent(in) | tau_rf_in, | ||
| real(kind=kind_phys), intent(in) | con_p0, | ||
| integer, intent(in) | gwd_opt, | ||
| logical, intent(in) | do_ugwp, | ||
| character(len=*), intent(out) | errmsg, | ||
| integer, intent(out) | errflg | ||
| ) |
The subroutine initializes the CIRES UGWP V0.
Definition at line 41 of file cires_ugwp.F90.
| 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), optional | dusfc_ms, | ||
| real(kind=kind_phys), dimension(:), intent(out), optional | dvsfc_ms, | ||
| real(kind=kind_phys), dimension(:), intent(out), optional | dusfc_bl, | ||
| real(kind=kind_phys), dimension(:), intent(out), optional | dvsfc_bl, | ||
| real(kind=kind_phys), dimension(:, :), intent(out), optional | dudt_ogw, | ||
| real(kind=kind_phys), dimension(:, :), intent(out), optional | dtauy2d_ms, | ||
| real(kind=kind_phys), dimension(:, :), intent(out), optional | dtaux2d_bl, | ||
| real(kind=kind_phys), dimension(:, :), intent(out), optional | dtauy2d_bl, | ||
| real(kind=kind_phys), dimension(:, :), intent(out) | dudt_mtb, | ||
| real(kind=kind_phys), dimension(:, :), intent(out) | dudt_tms, | ||
| real(kind=kind_phys), dimension(:,:), intent(inout), optional | du3dt_mtb, | ||
| real(kind=kind_phys), dimension(:,:), intent(inout), optional | du3dt_ogw, | ||
| real(kind=kind_phys), dimension(:,:), intent(inout), optional | du3dt_tms, | ||
| 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), optional | q_tke, | ||
| real(kind=kind_phys), dimension(:,:), intent(in), optional | 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, | ||
| real(kind=kind_phys), dimension(:,:,:), intent(out) | ten_q, | ||
| character(len=*), intent(out) | errmsg, | ||
| integer, intent(out) | errflg | ||
| ) |
These subroutines and modules execute the CIRES UGWP Version 0.
The physics of Non-Orographic Gravity Waves (NGWs) in the UGWP framework (Yudin et al. 2018 [206]) is represented by four GW-solvers, introduced in Lindzen (1981) [123], Hines (1997) [91], Alexander and Dunkerton (1999) [1], and Scinocca (2003) [177]. 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) [178]). In the UGWP-v0 scheme, a modification of the Scinocca (2003) [177] 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) [144] 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) [144]. 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.
Definition at line 189 of file cires_ugwp.F90.
References gwdps::gwdps_run().