This module introduces two gravity wave drag schemes: UGWPv1 and orographic drag scheme. More...
Functions/Subroutines | |
| subroutine, public | ugwpv1_gsldrag_init (me, master, nlunit, input_nml_file, logunit, fn_nml2, jdat, lonr, levs, ak, bk, dtp, con_pi, con_rerth, con_p0, con_g, con_omega, con_cp, con_rd, con_rv, con_fvirt, do_ugwp, do_ugwp_v0, do_ugwp_v0_orog_only, do_gsl_drag_ls_bl, do_gsl_drag_ss, do_gsl_drag_tofd, do_ngw_ec, do_ugwp_v1, do_ugwp_v1_orog_only, do_ugwp_v1_w_gsldrag, errmsg, errflg) |
| The subroutine initializes the unified UGWP. | |
| subroutine, public | ugwpv1_gsldrag_final (errmsg, errflg) |
| The subroutine finalizes the CIRES UGWP. | |
| subroutine, public | ugwpv1_gsldrag_run (me, master, im, levs, ak, bk, ntrac, lonr, dtp, kdt, ldiag3d, lssav, flag_for_gwd_generic_tend, do_gsl_drag_ls_bl, do_gsl_drag_ss, do_gsl_drag_tofd, do_gwd_opt_psl, psl_gwd_dx_factor, do_ngw_ec, do_ugwp_v1, do_ugwp_v1_orog_only, do_ugwp_v1_w_gsldrag, gwd_opt, do_tofd, ldiag_ugwp, ugwp_seq_update, cdmbgwd, alpha_fd, jdat, nmtvr, hprime, oc, theta, sigma, gamma, elvmax, clx, oa4, varss, oc1ss, oa4ss, ol4ss, dx, xlat, xlat_d, sinlat, coslat, area, rain, br1, hpbl, vtype, kpbl, slmsk, ugrs, vgrs, tgrs, q1, prsi, prsl, prslk, phii, phil, del, tau_amf, dudt_ogw, dvdt_ogw, du_ogwcol, dv_ogwcol, dudt_obl, dvdt_obl, du_oblcol, dv_oblcol, dudt_oss, dvdt_oss, du_osscol, dv_osscol, dudt_ofd, dvdt_ofd, du_ofdcol, dv_ofdcol, dudt_ngw, dvdt_ngw, dtdt_ngw, kdis_ngw, dudt_gw, dvdt_gw, dtdt_gw, dqdt_gw, kdis_gw, tau_ogw, tau_ngw, tau_oss, zogw, zlwb, zobl, zngw, dusfcg, dvsfcg, rdxzb, dtend, dtidx, index_of_x_wind, index_of_y_wind, index_of_temperature, index_of_process_orographic_gwd, index_of_process_nonorographic_gwd, lprnt, ipr, spp_wts_gwd, spp_gwd, errmsg, errflg) |
This module introduces two gravity wave drag schemes: UGWPv1 and orographic drag scheme.
1) The "V1 CIRES UGWP" scheme as tested in the FV3GFSv16-127L atmosphere model and workflow, which includes:
a) the orograhic gravity wave drag, flow blocking scheme and TOFD (Beljaars et al, 2004).
b) the v1 CIRE ugwp non-stationary GW scheme, new revision that generate realistic climate of FV3GFS-127L
in the strato-mesosphere in the multi-year simulations (Annual cycles, SAO and QBO in th tropical dynamics).
2) The GSL orographic drag suite (drag_suite.F90), as implmeneted in the RAP/HRRR, which includes:
a) large-scale gravity wave drag and low-level flow blocking -- active at horizontal scales
down to ~5km (Kim and Arakawa, 1995 \cite kim_and_arakawa_1995; Kim and Doyle, 2005 \cite kim_and_doyle_2005)
b) small-scale gravity wave drag scheme -- active typically in stable PBL at horizontal grid resolutions down to ~1km
(Steeneveld et al, 2008 \cite steeneveld_et_al_2008; Tsiringakis et al, 2017 \cite tsiringakis_et_al_2017)
c) turbulent orographic form drag -- active at horizontal grid ersolutions down to ~1km
(Beljaars et al, 2004 \cite beljaars_et_al_2004)
See Valery Yudin's presentation at 2020 UFS User's meeting (Jul 2020): 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:
The ugwpv1_gsldrag scheme is activated by gwd_opt = 2 in the namelist. The choice of schemes is activated at runtime by the following namelist options (boolean): NA do_ugwp_v0 – activates V0 CIRES UGWP scheme - both orographic and non-stationary GWD is not active (NA) NA do_ugwp_v0_orog_only – activates V0 CIRES UGWP scheme - orographic GWD only do_gsl_drag_ls_bl – activates RAP/HRRR (GSL) large-scale OGWD and blocking do_gsl_drag_ss – activates RAP/HRRR (GSL) small-scale OGWD do_gsl_drag_tofd – activates RAP/HRRR (GSL) turbulent orographic drag do_ugwp_v1 – activates V1 CIRES UGWP scheme - both orographic and non-stationary GWD do_ugwp_v1_orog_only – activates V1 CIRES UGWP scheme - orographic GWD only do_ugwp_v1_w_gsldrag – activates V1 CIRES UGWP scheme with orographic drag of GSL Note that only one "large-scale" scheme can be activated at a time.
| subroutine, public ugwpv1_gsldrag::ugwpv1_gsldrag_final | ( | character(len=*), intent(out) | errmsg, |
| integer, intent(out) | errflg | ||
| ) |
The subroutine finalizes the CIRES UGWP.
Definition at line 260 of file ugwpv1_gsldrag.F90.
| subroutine, public ugwpv1_gsldrag::ugwpv1_gsldrag_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, dimension(:), intent(in) | jdat, | ||
| 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), intent(in) | con_pi, | ||
| real(kind=kind_phys), intent(in) | con_rerth, | ||
| real(kind=kind_phys), intent(in) | con_p0, | ||
| real(kind=kind_phys), intent(in) | con_g, | ||
| real(kind=kind_phys), intent(in) | con_omega, | ||
| 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, | ||
| logical, intent(in) | do_ugwp, | ||
| logical, intent(in) | do_ugwp_v0, | ||
| logical, intent(in) | do_ugwp_v0_orog_only, | ||
| logical, intent(in) | do_gsl_drag_ls_bl, | ||
| logical, intent(in) | do_gsl_drag_ss, | ||
| logical, intent(in) | do_gsl_drag_tofd, | ||
| logical, intent(in) | do_ngw_ec, | ||
| logical, intent(in) | do_ugwp_v1, | ||
| logical, intent(in) | do_ugwp_v1_orog_only, | ||
| logical, intent(in) | do_ugwp_v1_w_gsldrag, | ||
| character(len=*), intent(out) | errmsg, | ||
| integer, intent(out) | errflg | ||
| ) |
The subroutine initializes the unified UGWP.
Definition at line 70 of file ugwpv1_gsldrag.F90.
| subroutine, public ugwpv1_gsldrag::ugwpv1_gsldrag_run | ( | integer, intent(in) | me, |
| integer, intent(in) | master, | ||
| integer, intent(in) | im, | ||
| integer, intent(in) | levs, | ||
| real(kind=kind_phys), dimension(:), intent(in) | ak, | ||
| real(kind=kind_phys), dimension(:), intent(in) | bk, | ||
| integer, intent(in) | ntrac, | ||
| integer, intent(in) | lonr, | ||
| real(kind=kind_phys), intent(in) | dtp, | ||
| integer, intent(in) | kdt, | ||
| logical, intent(in) | ldiag3d, | ||
| logical, intent(in) | lssav, | ||
| logical, intent(in) | flag_for_gwd_generic_tend, | ||
| logical, intent(in) | do_gsl_drag_ls_bl, | ||
| logical, intent(in) | do_gsl_drag_ss, | ||
| logical, intent(in) | do_gsl_drag_tofd, | ||
| logical, intent(in) | do_gwd_opt_psl, | ||
| real(kind=kind_phys), intent(in) | psl_gwd_dx_factor, | ||
| logical, intent(in) | do_ngw_ec, | ||
| logical, intent(in) | do_ugwp_v1, | ||
| logical, intent(in) | do_ugwp_v1_orog_only, | ||
| logical, intent(in) | do_ugwp_v1_w_gsldrag, | ||
| integer, intent(in) | gwd_opt, | ||
| logical, intent(in) | do_tofd, | ||
| logical, intent(in) | ldiag_ugwp, | ||
| logical, intent(in) | ugwp_seq_update, | ||
| real(kind=kind_phys), dimension(:), intent(in) | cdmbgwd, | ||
| real(kind=kind_phys), intent(in) | alpha_fd, | ||
| integer, dimension(:), intent(in) | jdat, | ||
| integer, intent(in) | nmtvr, | ||
| real(kind=kind_phys), dimension(:), intent(in) | hprime, | ||
| 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(in) | elvmax, | ||
| real(kind=kind_phys), dimension(:,:), intent(in) | clx, | ||
| real(kind=kind_phys), dimension(:,:), intent(in) | oa4, | ||
| real(kind=kind_phys), dimension(:), intent(in) | varss, | ||
| real(kind=kind_phys), dimension(:), intent(in) | oc1ss, | ||
| real(kind=kind_phys), dimension(:,:), intent(in) | oa4ss, | ||
| real(kind=kind_phys), dimension(:,:), intent(in) | ol4ss, | ||
| real(kind=kind_phys), dimension(:), intent(in) | dx, | ||
| 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) | rain, | ||
| real(kind=kind_phys), dimension(:), intent(in) | br1, | ||
| real(kind=kind_phys), dimension(:), intent(in) | hpbl, | ||
| integer, dimension(:), intent(in) | vtype, | ||
| integer, dimension(:), intent(in) | kpbl, | ||
| real(kind=kind_phys), dimension(:), intent(in) | slmsk, | ||
| 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) | q1, | ||
| 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, | ||
| real(kind=kind_phys), dimension(:), intent(in) | tau_amf, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dudt_ogw, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dvdt_ogw, | ||
| real(kind=kind_phys), dimension(:), intent(out) | du_ogwcol, | ||
| real(kind=kind_phys), dimension(:), intent(out) | dv_ogwcol, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dudt_obl, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dvdt_obl, | ||
| real(kind=kind_phys), dimension(:), intent(out) | du_oblcol, | ||
| real(kind=kind_phys), dimension(:), intent(out) | dv_oblcol, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dudt_oss, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dvdt_oss, | ||
| real(kind=kind_phys), dimension(:), intent(out) | du_osscol, | ||
| real(kind=kind_phys), dimension(:), intent(out) | dv_osscol, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dudt_ofd, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dvdt_ofd, | ||
| real(kind=kind_phys), dimension(:), intent(out) | du_ofdcol, | ||
| real(kind=kind_phys), dimension(:), intent(out) | dv_ofdcol, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dudt_ngw, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dvdt_ngw, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dtdt_ngw, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | kdis_ngw, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dudt_gw, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dvdt_gw, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dtdt_gw, | ||
| real(kind=kind_phys), dimension(:,:,:), intent(out) | dqdt_gw, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | kdis_gw, | ||
| 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) | tau_oss, | ||
| real(kind=kind_phys), dimension(:), intent(out) | zogw, | ||
| real(kind=kind_phys), dimension(:), intent(out) | zlwb, | ||
| real(kind=kind_phys), dimension(:), intent(out) | zobl, | ||
| real(kind=kind_phys), dimension(:), intent(out) | zngw, | ||
| real(kind=kind_phys), dimension(:), intent(out) | dusfcg, | ||
| real(kind=kind_phys), dimension(:), intent(out) | dvsfcg, | ||
| real(kind=kind_phys), dimension(:), intent(out) | rdxzb, | ||
| 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) | lprnt, | ||
| integer, intent(in) | ipr, | ||
| 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 physics of NGWs in the UGWP framework (Yudin et al. 2018 [206]) is represented by four GW-solvers, which is introduced in Lindzen (1981) [123], Hines (1997) [91], Alexander and Dunkerton (1999) [1], and Scinocca (2003) [177]. The major modification of these GW solvers is represented by 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, the modification of Scinocca (2003) [177] scheme for NGWs with non-hydrostatic and rotational effects for GW propagations and background dissipation is represented by the subroutine fv3_ugwp_solv2_v0. In the next release of UGWP, additional GW-solvers will 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 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 295 of file ugwpv1_gsldrag.F90.