This subroutine contains the entirety of the SAMF shallow convection scheme.This routine follows the GFS saSAS Deep Convection Module quite closely, although it can be interpreted as only having the "static" and "feedback" control portions, since the "dynamic" control is not necessary to find the cloud base mass flux. The algorithm is simplified from SAMF deep convection by excluding convective downdrafts and being confined to operate below \(p=0.7p_{sfc}\). Also, entrainment is both simpler and stronger in magnitude compared to the deep scheme. More...
Functions/Subroutines | |
| subroutine | samfshalcnv::samfshalcnv_run (im, km, nn, itc, ntc, cliq, cp, cvap, eps, epsm1, fv, grav, hvap, rd, rv, t0c, delt, ntk, ntr, delp, first_time_step, restart, tmf, qmicro, progsigma, progomega, prslp, psp, phil, tkeh, qtr, dqtr, prevsq, q, q1, t1, u1, v1, fscav, rn, kbot, ktop, kcnv, islimsk, garea, cscale, ten_t, ten_u, ten_v, ten_q, dot, ncloud, hpbl, ud_mf, dt_mf, cnvw, cnvc, clam, c0s, c1, evef, pgcon, asolfac, hwrf_samfshal, sigmain, sigmaout, omegain, omegaout, betadcu, betamcu, betascu, lbb1, lbb2, lbb3, dt_decay, cat_adj_shal, errmsg, errflg) |
This subroutine contains the entirety of the SAMF shallow convection scheme.
This routine follows the GFS saSAS Deep Convection Module quite closely, although it can be interpreted as only having the "static" and "feedback" control portions, since the "dynamic" control is not necessary to find the cloud base mass flux. The algorithm is simplified from SAMF deep convection by excluding convective downdrafts and being confined to operate below \(p=0.7p_{sfc}\). Also, entrainment is both simpler and stronger in magnitude compared to the deep scheme.
| subroutine samfshalcnv::samfshalcnv_run | ( | integer, intent(in) | im, |
| integer, intent(in) | km, | ||
| integer, intent(in) | nn, | ||
| integer, intent(in) | itc, | ||
| integer, intent(in) | ntc, | ||
| real(kind=kind_phys), intent(in) | cliq, | ||
| real(kind=kind_phys), intent(in) | cp, | ||
| real(kind=kind_phys), intent(in) | cvap, | ||
| real(kind=kind_phys), intent(in) | eps, | ||
| real(kind=kind_phys), intent(in) | epsm1, | ||
| real(kind=kind_phys), intent(in) | fv, | ||
| real(kind=kind_phys), intent(in) | grav, | ||
| real(kind=kind_phys), intent(in) | hvap, | ||
| real(kind=kind_phys), intent(in) | rd, | ||
| real(kind=kind_phys), intent(in) | rv, | ||
| real(kind=kind_phys), intent(in) | t0c, | ||
| real(kind=kind_phys), intent(in) | delt, | ||
| integer, intent(in) | ntk, | ||
| integer, intent(in) | ntr, | ||
| real(kind=kind_phys), dimension(:,:), intent(in) | delp, | ||
| logical, intent(in) | first_time_step, | ||
| logical, intent(in) | restart, | ||
| real(kind=kind_phys), dimension(:,:,:), intent(in) | tmf, | ||
| real(kind=kind_phys), dimension(:,:), intent(in), optional | qmicro, | ||
| logical, intent(in) | progsigma, | ||
| logical, intent(in) | progomega, | ||
| real(kind=kind_phys), dimension(:,:), intent(in) | prslp, | ||
| real(kind=kind_phys), dimension(:), intent(in) | psp, | ||
| real(kind=kind_phys), dimension(:,:), intent(in) | phil, | ||
| real(kind=kind_phys), dimension(:,:), intent(inout) | tkeh, | ||
| real(kind=kind_phys), dimension(:,:,:), intent(in) | qtr, | ||
| real(kind=kind_phys), dimension(:,:,:), intent(out) | dqtr, | ||
| real(kind=kind_phys), dimension(:,:), intent(in), optional | prevsq, | ||
| real(kind=kind_phys), dimension(:,:), intent(in) | q, | ||
| real(kind=kind_phys), dimension(:,:), intent(in) | q1, | ||
| real(kind=kind_phys), dimension(:,:), intent(in) | t1, | ||
| real(kind=kind_phys), dimension(:,:), intent(in) | u1, | ||
| real(kind=kind_phys), dimension(:,:), intent(in) | v1, | ||
| real(kind=kind_phys), dimension(:), intent(in) | fscav, | ||
| real(kind=kind_phys), dimension(:), intent(out) | rn, | ||
| integer, dimension(:), intent(out) | kbot, | ||
| integer, dimension(:), intent(out) | ktop, | ||
| integer, dimension(:), intent(inout) | kcnv, | ||
| integer, dimension(:), intent(in) | islimsk, | ||
| real(kind=kind_phys), dimension(:), intent(in) | garea, | ||
| real(kind=kind_phys), intent(in) | cscale, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | ten_t, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | ten_u, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | ten_v, | ||
| real(kind=kind_phys), dimension(:,:,:), intent(out) | ten_q, | ||
| real(kind=kind_phys), dimension(:,:), intent(in) | dot, | ||
| integer, intent(in) | ncloud, | ||
| real(kind=kind_phys), dimension(:), intent(in) | hpbl, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | ud_mf, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | dt_mf, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | cnvw, | ||
| real(kind=kind_phys), dimension(:,:), intent(out) | cnvc, | ||
| real(kind=kind_phys), intent(in) | clam, | ||
| real(kind=kind_phys), intent(in) | c0s, | ||
| real(kind=kind_phys), intent(in) | c1, | ||
| real(kind=kind_phys), intent(in) | evef, | ||
| real(kind=kind_phys), intent(in) | pgcon, | ||
| real(kind=kind_phys), intent(in) | asolfac, | ||
| logical, intent(in) | hwrf_samfshal, | ||
| real(kind=kind_phys), dimension(:,:), intent(in), optional | sigmain, | ||
| real(kind=kind_phys), dimension(:,:), intent(inout), optional | sigmaout, | ||
| real(kind=kind_phys), dimension(:,:), intent(in), optional | omegain, | ||
| real(kind=kind_phys), dimension(:,:), intent(inout), optional | omegaout, | ||
| real(kind=kind_phys), intent(in) | betadcu, | ||
| real(kind=kind_phys), intent(in) | betamcu, | ||
| real(kind=kind_phys), intent(in) | betascu, | ||
| real(kind=kind_phys), intent(in) | lbb1, | ||
| real(kind=kind_phys), intent(in) | lbb2, | ||
| real(kind=kind_phys), intent(in) | lbb3, | ||
| real(kind=kind_phys), intent(in) | dt_decay, | ||
| real(kind_phys), intent(in) | cat_adj_shal, | ||
| character(len=*), intent(out) | errmsg, | ||
| integer, intent(out) | errflg | ||
| ) |
\[ \frac{1}{\eta}\frac{\partial \eta}{\partial z} = \lambda_e - \lambda_d \]
where \(\eta\) is the normalized mass flux, \(\lambda_e\) is the entrainment rate and \(\lambda_d\) is the detrainment rate. The normalized mass flux increases upward below the cloud base and decreases upward above.\[ A_u=\int_{z_0}^{z_t}\frac{g}{c_pT(z)}\frac{\eta}{1 + \gamma}[h(z)-h^*(z)]dz \]
(discretized according to Grell (1993) [74] equation B.10 using B.2 and B.3 of Arakawa and Schubert (1974) [6] and assuming \(\eta=1\)) where \(A_u\) is the updraft cloud work function, \(z_0\) and \(z_t\) are cloud base and cloud top, respectively, \(\gamma = \frac{L}{c_p}\left(\frac{\partial \overline{q_s}}{\partial T}\right)_p\) and other quantities are previously defined.- if progomega = true, calculate prognostic updraft velocity (Pa/s) according to progomega routine.
Definition at line 53 of file samfshalcnv.f.