117 subroutine gfdl_cloud_microphys_run( &
118 levs, im, rainmin, con_g, con_fvirt, con_rd, con_eps, frland, garea, islmsk, &
119 gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, gq0_ntsw, gq0_ntgl, gq0_ntclamt, &
120 gt0, gu0, gv0, vvl, prsl, phii, del, &
121 rain0, ice0, snow0, graupel0, prcp0, sr, &
122 dtp, hydrostatic, phys_hydrostatic, lradar, refl_10cm, &
123 reset, effr_in, rew, rei, rer, res, reg, &
124 cplchm, pfi_lsan, pfl_lsan, errmsg, errflg)
126 use machine,
only: kind_phys
132 real(kind=kind_phys),
parameter :: one = 1.0d0
133 real(kind=kind_phys),
parameter :: con_p001= 0.001d0
134 real(kind=kind_phys),
parameter :: con_day = 86400.d0
139 integer,
intent(in ) :: levs, im
140 real(kind=kind_phys),
intent(in ) :: con_g, con_fvirt, con_rd, con_eps, rainmin
141 real(kind=kind_phys),
intent(in ),
dimension(:) :: frland, garea
142 integer,
intent(in ),
dimension(:) :: islmsk
143 real(kind=kind_phys),
intent(inout),
dimension(:,:) :: gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, &
144 gq0_ntsw, gq0_ntgl, gq0_ntclamt
145 real(kind=kind_phys),
intent(inout),
dimension(:,:) :: gt0, gu0, gv0
146 real(kind=kind_phys),
intent(in ),
dimension(:,:) :: vvl, prsl, del
147 real(kind=kind_phys),
intent(in ),
dimension(:,:) :: phii
150 real(kind_phys),
intent(out ),
dimension(:),
optional :: rain0
151 real(kind_phys),
intent(out ),
dimension(:),
optional :: snow0
152 real(kind_phys),
intent(out ),
dimension(:),
optional :: ice0
153 real(kind_phys),
intent(out ),
dimension(:),
optional :: graupel0
154 real(kind_phys),
intent(out ),
dimension(:) :: prcp0
155 real(kind_phys),
intent(out ),
dimension(:) :: sr
157 real(kind_phys),
intent(in) :: dtp
158 logical,
intent (in) :: hydrostatic, phys_hydrostatic
160 logical,
intent (in) :: lradar
161 real(kind=kind_phys),
intent(inout),
dimension(:,:) :: refl_10cm
162 logical,
intent (in) :: reset, effr_in
163 real(kind=kind_phys),
intent(inout),
dimension(:,:),
optional :: rew, rei, rer, res, reg
164 logical,
intent (in) :: cplchm
166 real(kind=kind_phys),
intent(inout),
dimension(:,:),
optional :: pfi_lsan, pfl_lsan
168 character(len=*),
intent(out) :: errmsg
169 integer,
intent(out) :: errflg
172 integer :: iis, iie, jjs, jje, kks, kke, kbot, ktop
174 real(kind=kind_phys),
dimension(1:im,1:levs) :: delp, dz, uin, vin, pt, qv1, ql1, qr1, qg1, qa1, qn1, qi1, &
175 qs1, pt_dt, qa_dt, u_dt, v_dt, w, qv_dt, ql_dt, qr_dt, qi_dt, &
176 qs_dt, qg_dt, p123, refl
177 real(kind=kind_phys),
dimension(1:im,1,1:levs) :: pfils, pflls
178 real(kind=kind_phys),
dimension(:,:),
allocatable :: den
179 real(kind=kind_phys) :: onebg
180 real(kind=kind_phys) :: tem
216 ql1(i,k) = gq0_ntcw(i,kk)
217 qr1(i,k) = gq0_ntrw(i,kk)
218 qi1(i,k) = gq0_ntiw(i,kk)
219 qs1(i,k) = gq0_ntsw(i,kk)
220 qg1(i,k) = gq0_ntgl(i,kk)
221 qa1(i,k) = gq0_ntclamt(i,kk)
223 w(i,k) = -vvl(i,kk) * (one+con_fvirt * gq0(i,kk)) &
224 * gt0(i,kk) / prsl(i,kk) * (con_rd*onebg)
227 delp(i,k) = del(i,kk)
228 dz(i,k) = (phii(i,kk)-phii(i,kk+1))*onebg
229 p123(i,k) = prsl(i,kk)
230 refl(i,k) = refl_10cm(i,kk)
241 qv1, ql1, qr1, qi1, qs1, qg1, qa1, qn1, qv_dt, ql_dt, qr_dt, qi_dt, &
242 qs_dt, qg_dt, qa_dt, pt_dt, pt, w, uin, vin, u_dt, v_dt, dz, delp, &
243 garea, dtp, frland, rain0, snow0, ice0, graupel0, hydrostatic, &
244 phys_hydrostatic, p123, lradar, refl, reset, pfils, pflls)
245 tem = dtp*con_p001/con_day
253 if(rain0(i)*tem < rainmin)
then
256 if(ice0(i)*tem < rainmin)
then
259 if(snow0(i)*tem < rainmin)
then
262 if(graupel0(i)*tem < rainmin)
then
270 prcp0(i) = (rain0(i)+snow0(i)+ice0(i)+graupel0(i)) * tem
271 if ( prcp0(i) > rainmin )
then
272 sr(i) = (snow0(i) + ice0(i) + graupel0(i)) &
273 / (rain0(i) + snow0(i) + ice0(i) + graupel0(i))
283 graupel0 = graupel0*tem
289 gq0(i,k) = qv1(i,kk) + qv_dt(i,kk) * dtp
290 gq0_ntcw(i,k) = ql1(i,kk) + ql_dt(i,kk) * dtp
291 gq0_ntrw(i,k) = qr1(i,kk) + qr_dt(i,kk) * dtp
292 gq0_ntiw(i,k) = qi1(i,kk) + qi_dt(i,kk) * dtp
293 gq0_ntsw(i,k) = qs1(i,kk) + qs_dt(i,kk) * dtp
294 gq0_ntgl(i,k) = qg1(i,kk) + qg_dt(i,kk) * dtp
295 gq0_ntclamt(i,k) = qa1(i,kk) + qa_dt(i,kk) * dtp
296 gt0(i,k) = gt0(i,k) + pt_dt(i,kk) * dtp
297 gu0(i,k) = gu0(i,k) + u_dt(i,kk) * dtp
298 gv0(i,k) = gv0(i,k) + v_dt(i,kk) * dtp
299 refl_10cm(i,k) = refl(i,kk)
308 pfi_lsan(i,k) = pfils(i,1,kk)
309 pfl_lsan(i,k) = pflls(i,1,kk)
315 allocate(den(1:im,1:levs))
318 den(i,k)=con_eps*prsl(i,k)/(con_rd*gt0(i,k)*(gq0(i,k)+con_eps))
322 del(1:im,1:levs), islmsk(1:im), &
323 gq0_ntcw(1:im,1:levs), gq0_ntiw(1:im,1:levs), &
324 gq0_ntrw(1:im,1:levs), &
325 gq0_ntsw(1:im,1:levs) + gq0_ntgl(1:im,1:levs), &
326 gq0_ntgl(1:im,1:levs)*0.0, gt0(1:im,1:levs), &
327 rew(1:im,1:levs), rei(1:im,1:levs), rer(1:im,1:levs),&
328 res(1:im,1:levs), reg(1:im,1:levs))
subroutine, public gfdl_cloud_microphys_mod_driver(iis, iie, jjs, jje, kks, kke, ktop, kbot, qv, ql, qr, qi, qs, qg, qa, qn, qv_dt, ql_dt, qr_dt, qi_dt, qs_dt, qg_dt, qa_dt, pt_dt, pt, w, uin, vin, udt, vdt, dz, delp, area, dt_in, land, rain, snow, ice, graupel, hydrostatic, phys_hydrostatic, p, lradar, refl_10cm, reset, pfils, pflls)
This subroutine is the driver of the GFDL cloud microphysics.