11 subroutine gfs_scnv_generic_post_run (im, levs, nn, lssav, ldiag3d, qdiag3d, &
12 frain, gu0, gv0, gt0, gq0, save_u, save_v, save_t, save_q, &
13 clw, shcnvcw, rain1, npdf3d, num_p3d, ncnvcld3d, cnvc, cnvw, nsamftrac, &
14 rainc, cnvprcp, cnvprcpb, cnvw_phy_f3d, cnvc_phy_f3d, &
15 dtend, dtidx, index_of_temperature, index_of_x_wind, index_of_y_wind, &
16 index_of_process_scnv, ntqv, flag_for_scnv_generic_tend, &
17 ntcw,ntiw,ntclamt,ntrw,ntsw,ntrnc,ntsnc,ntgl,ntgnc,ntsigma, &
18 imfshalcnv, imfshalcnv_sas, imfshalcnv_samf, ntrac, &
19 cscnv, satmedmf, trans_trac, ras, errmsg, errflg)
25 integer,
intent(in) :: im, levs, nn, ntqv, nsamftrac
26 integer,
intent(in) :: ntcw,ntiw,ntclamt,ntrw,ntsw,ntrnc,ntsnc,ntgl,ntgnc,ntsigma,ntrac
27 logical,
intent(in) :: lssav, ldiag3d, qdiag3d, flag_for_scnv_generic_tend
28 real(kind=kind_phys),
intent(in) :: frain
29 real(kind=kind_phys),
dimension(:,:),
intent(in) :: gu0, gv0, gt0
30 real(kind=kind_phys),
dimension(:,:),
intent(in) :: save_u, save_v, save_t
31 real(kind=kind_phys),
dimension(:,:,:),
intent(in) :: save_q, gq0
34 real(kind=kind_phys),
intent(inout),
optional :: dtend(:,:,:)
35 integer,
intent(in) :: dtidx(:,:)
36 integer,
intent(in) :: index_of_temperature, index_of_x_wind, index_of_y_wind, index_of_process_scnv
37 real(kind=kind_phys),
dimension(:,:,:),
intent(in) :: clw
40 integer,
intent(in) :: npdf3d, num_p3d, ncnvcld3d
41 logical,
intent(in) :: shcnvcw
42 real(kind=kind_phys),
dimension(:),
intent(in) :: rain1
43 real(kind=kind_phys),
dimension(:, :),
intent(in) :: cnvw, cnvc
44 real(kind=kind_phys),
dimension(:),
intent(inout) :: rainc, cnvprcp, cnvprcpb
49 real(kind=kind_phys),
dimension(:,:),
intent(inout),
optional :: cnvw_phy_f3d, cnvc_phy_f3d
50 integer,
intent(in) :: imfshalcnv, imfshalcnv_sas, imfshalcnv_samf
51 logical,
intent(in) :: cscnv, satmedmf, trans_trac, ras
53 character(len=*),
intent(out) :: errmsg
54 integer,
intent(out) :: errflg
56 integer :: i, k, n, idtend, tracers
57 real(kind=kind_phys) :: tem
63 if (imfshalcnv==imfshalcnv_sas .or. imfshalcnv==imfshalcnv_samf)
then
65 rainc(i) = rainc(i) + frain * rain1(i)
68 if (shcnvcw .and. num_p3d == 4 .and. npdf3d == 3)
then
71 cnvw_phy_f3d(i,k) = cnvw_phy_f3d(i,k) + cnvw(i,k)
72 cnvc_phy_f3d(i,k) = cnvc_phy_f3d(i,k) + cnvc(i,k)
75 elseif (npdf3d == 0 .and. ncnvcld3d == 1)
then
78 cnvw_phy_f3d(i,k) = cnvw_phy_f3d(i,k) + cnvw(i,k)
84 if (lssav .and. flag_for_scnv_generic_tend)
then
86 idtend = dtidx(index_of_temperature, index_of_process_scnv)
88 dtend(:,:,idtend) = dtend(:,:,idtend) + (gt0 - save_t) * frain
91 idtend = dtidx(index_of_x_wind, index_of_process_scnv)
93 dtend(:,:,idtend) = dtend(:,:,idtend) + (gu0 - save_u) * frain
96 idtend = dtidx(index_of_y_wind, index_of_process_scnv)
98 dtend(:,:,idtend) = dtend(:,:,idtend) + (gv0 - save_v) * frain
101 if (cscnv .or. satmedmf .or. trans_trac .or. ras)
then
104 if ( n /= ntcw .and. n /= ntiw .and. n /= ntclamt .and. &
105 n /= ntrw .and. n /= ntsw .and. n /= ntrnc .and. &
106 n /= ntsnc .and. n /= ntgl .and. n /= ntgnc .and. n /= ntsigma)
then
107 tracers = tracers + 1
108 idtend = dtidx(100+n,index_of_process_scnv)
110 dtend(:,:,idtend) = dtend(:,:,idtend) + clw(:,:,tracers)-save_q(:,:,n) * frain
116 idtend = dtidx(100+n,index_of_process_scnv)
118 dtend(:,:,idtend) = dtend(:,:,idtend) + (gq0(:,:,n)-save_q(:,:,n))*frain
122 idtend = dtidx(100+ntqv, index_of_process_scnv)
124 dtend(:,:,idtend) = dtend(:,:,idtend) + (gq0(:,:,ntqv) - save_q(:,:,ntqv)) * frain