11 subroutine gfs_dcnv_generic_post_run (im, levs, lssav, ldiag3d, qdiag3d, ras, &
12 cscnv, frain, rain1, dtf, cld1d, save_u, save_v, save_t, gu0, gv0, gt0, &
13 ud_mf, dd_mf, dt_mf, con_g, npdf3d, num_p3d, ncnvcld3d, nsamftrac, &
14 rainc, cldwrk, upd_mf, dwn_mf, det_mf, dtend, dtidx, index_of_process_dcnv, &
15 index_of_temperature, index_of_x_wind, index_of_y_wind, ntqv, gq0, save_q, &
16 cnvw, cnvc, cnvw_phy_f3d, cnvc_phy_f3d, flag_for_dcnv_generic_tend, &
17 ntcw,ntiw,ntclamt,ntrw,ntsw,ntrnc,ntsnc,ntgl, &
18 ntgnc, nthl, nthnc, nthv, ntgv, ntrz, ntgz, nthz, ntsigma, ntrac,clw, &
19 satmedmf, trans_trac, errmsg, errflg)
26 integer,
intent(in) :: im, levs, nsamftrac
27 logical,
intent(in) :: lssav, ldiag3d, qdiag3d, ras, cscnv
28 logical,
intent(in) :: flag_for_dcnv_generic_tend
30 real(kind=kind_phys),
intent(in) :: frain, dtf
31 real(kind=kind_phys),
dimension(:),
intent(in) :: rain1, cld1d
32 real(kind=kind_phys),
dimension(:,:),
intent(in) :: save_u, save_v, save_t
33 real(kind=kind_phys),
dimension(:,:),
intent(in) :: gu0, gv0, gt0
34 real(kind=kind_phys),
dimension(:,:,:),
intent(in) :: gq0, save_q
35 real(kind=kind_phys),
dimension(:,:),
intent(in) :: dd_mf, dt_mf
36 real(kind=kind_phys),
dimension(:,:),
intent(in),
optional :: ud_mf
37 real(kind=kind_phys),
intent(in) :: con_g
38 integer,
intent(in) :: npdf3d, num_p3d, ncnvcld3d
39 logical,
intent(in) :: satmedmf, trans_trac
41 real(kind=kind_phys),
dimension(:),
intent(inout) :: rainc, cldwrk
42 real(kind=kind_phys),
dimension(:,:),
intent(inout),
optional :: upd_mf, dwn_mf, det_mf
43 real(kind=kind_phys),
dimension(:,:),
intent(inout) :: cnvw, cnvc
45 real(kind=kind_phys),
dimension(:,:,:),
intent(inout),
optional :: dtend
46 integer,
intent(in) :: dtidx(:,:), index_of_process_dcnv, index_of_temperature, &
47 index_of_x_wind, index_of_y_wind, ntqv
48 integer,
intent(in) :: ntcw,ntiw,ntclamt,ntrw,ntsw,ntrnc,ntsnc,ntgl, &
49 ntgnc, nthl, nthnc, nthv, ntgv, ntrz, ntgz, nthz, &
51 real(kind=kind_phys),
dimension(:,:,:),
intent(in) :: clw
54 real(kind=kind_phys),
dimension(:,:),
intent(inout),
optional :: cnvw_phy_f3d, cnvc_phy_f3d
56 character(len=*),
intent(out) :: errmsg
57 integer,
intent(out) :: errflg
59 integer :: i, k, n, idtend, tracers
65 if (.not. ras .and. .not. cscnv)
then
66 if (npdf3d == 3 .and. num_p3d == 4)
then
69 cnvw_phy_f3d(i,k) = cnvw(i,k)
70 cnvc_phy_f3d(i,k) = cnvc(i,k)
75 elseif (npdf3d == 0 .and. ncnvcld3d == 1)
then
78 cnvw_phy_f3d(i,k) = cnvw(i,k)
86 rainc(i) = frain * rain1(i)
91 cldwrk(i) = cldwrk(i) + cld1d(i) * dtf
94 if (ldiag3d .and. flag_for_dcnv_generic_tend)
then
95 idtend=dtidx(index_of_temperature,index_of_process_dcnv)
97 dtend(:,:,idtend) = dtend(:,:,idtend) + (gt0-save_t)*frain
100 idtend=dtidx(index_of_x_wind,index_of_process_dcnv)
102 dtend(:,:,idtend) = dtend(:,:,idtend) + (gu0-save_u)*frain
105 idtend=dtidx(index_of_y_wind,index_of_process_dcnv)
107 dtend(:,:,idtend) = dtend(:,:,idtend) + (gv0-save_v)*frain
110 if (cscnv .or. satmedmf .or. trans_trac .or. ras)
then
113 if ( n /= ntcw .and. n /= ntiw .and. n /= ntclamt .and. &
114 n /= ntrw .and. n /= ntsw .and. n /= ntrnc .and. &
115 n /= ntsnc .and. n /= ntgl .and. n /= ntgnc .and. &
116 n /= nthl .and. n /= nthnc .and. n /= nthv .and. &
117 n /= ntrz .and. n /= ntgz .and. n /= nthz .and. &
118 n /= ntgv .and. n /= ntsigma)
then
119 tracers = tracers + 1
120 idtend = dtidx(100+n,index_of_process_dcnv)
122 dtend(:,:,idtend) = dtend(:,:,idtend) + clw(:,:,tracers)-save_q(:,:,n) * frain
128 idtend = dtidx(100+n,index_of_process_dcnv)
130 dtend(:,:,idtend) = dtend(:,:,idtend) + (gq0(:,:,n)-save_q(:,:,n))*frain
134 idtend = dtidx(100+ntqv, index_of_process_dcnv)
136 dtend(:,:,idtend) = dtend(:,:,idtend) + (gq0(:,:,ntqv) - save_q(:,:,ntqv)) * frain
143 upd_mf(i,k) = upd_mf(i,k) + ud_mf(i,k) * (con_g*frain)
144 dwn_mf(i,k) = dwn_mf(i,k) + dd_mf(i,k) * (con_g*frain)
145 det_mf(i,k) = det_mf(i,k) + dt_mf(i,k) * (con_g*frain)