18 public gfdl_cloud_microphys_run, gfdl_cloud_microphys_init, gfdl_cloud_microphys_final
20 logical :: is_initialized = .false.
34 subroutine gfdl_cloud_microphys_init (me, master, nlunit, input_nml_file, logunit, fn_nml, &
35 imp_physics, imp_physics_gfdl, do_shoc, errmsg, errflg)
39 integer,
intent (in) :: me
40 integer,
intent (in) :: master
41 integer,
intent (in) :: nlunit
42 integer,
intent (in) :: logunit
43 character(len=*),
intent (in) :: fn_nml
44 character(len=*),
intent (in) :: input_nml_file(:)
45 integer,
intent( in) :: imp_physics
46 integer,
intent( in) :: imp_physics_gfdl
47 logical,
intent( in) :: do_shoc
48 character(len=*),
intent(out) :: errmsg
49 integer,
intent(out) :: errflg
55 if (is_initialized)
return
57 if (imp_physics/=imp_physics_gfdl)
then
58 write(errmsg,
'(*(a))')
'Namelist option for microphysics does not match choice in suite definition file'
64 write(errmsg,
'(*(a))')
'SHOC is not currently compatible with GFDL MP'
71 is_initialized = .true.
73 end subroutine gfdl_cloud_microphys_init
82 subroutine gfdl_cloud_microphys_final(errmsg, errflg)
86 character(len=*),
intent(out) :: errmsg
87 integer,
intent(out) :: errflg
93 if (.not.is_initialized)
return
97 is_initialized = .false.
99 end subroutine gfdl_cloud_microphys_final
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, ten_t, ten_u, ten_v, ten_qv, ten_ql, ten_qr, &
125 ten_qi, ten_qs, ten_qg, ten_cldfrc, ten_q, errmsg, errflg)
127 use machine,
only: kind_phys
133 real(kind=kind_phys),
parameter :: one = 1.0d0
134 real(kind=kind_phys),
parameter :: con_p001= 0.001d0
135 real(kind=kind_phys),
parameter :: con_day = 86400.d0
140 integer,
intent(in ) :: levs, im
141 real(kind=kind_phys),
intent(in ) :: con_g, con_fvirt, con_rd, con_eps, rainmin
142 real(kind=kind_phys),
intent(in ),
dimension(:) :: frland, garea
143 integer,
intent(in ),
dimension(:) :: islmsk
144 real(kind=kind_phys),
intent(in ),
dimension(:,:) :: gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, &
145 gq0_ntsw, gq0_ntgl, gq0_ntclamt
146 real(kind=kind_phys),
intent(in ),
dimension(:,:) :: gt0, gu0, gv0
147 real(kind=kind_phys),
intent(in ),
dimension(:,:) :: vvl, prsl, del
148 real(kind=kind_phys),
intent(in ),
dimension(:,:) :: phii
151 real(kind_phys),
intent(out ),
dimension(:) :: rain0
152 real(kind_phys),
intent(out ),
dimension(:) :: snow0
153 real(kind_phys),
intent(out ),
dimension(:) :: ice0
154 real(kind_phys),
intent(out ),
dimension(:) :: graupel0
155 real(kind_phys),
intent(out ),
dimension(:) :: prcp0
156 real(kind_phys),
intent(out ),
dimension(:) :: sr
158 real(kind_phys),
intent(out ),
dimension(:,:) :: ten_t, ten_u, ten_v, ten_qv, ten_ql, ten_qr, ten_qi, ten_qs, ten_qg, ten_cldfrc
159 real(kind_phys),
intent(out ),
dimension(:,:,:) :: ten_q
161 real(kind_phys),
intent(in) :: dtp
162 logical,
intent (in) :: hydrostatic, phys_hydrostatic
164 logical,
intent (in) :: lradar
165 real(kind=kind_phys),
intent(inout),
dimension(:,:) :: refl_10cm
166 logical,
intent (in) :: reset, effr_in
167 real(kind=kind_phys),
intent(inout),
dimension(:,:),
optional :: rew, rei, rer, res, reg
168 logical,
intent (in) :: cplchm
170 real(kind=kind_phys),
intent(inout),
dimension(:,:),
optional :: pfi_lsan, pfl_lsan
172 character(len=*),
intent(out) :: errmsg
173 integer,
intent(out) :: errflg
176 integer :: iis, iie, jjs, jje, kks, kke, kbot, ktop
178 real(kind=kind_phys),
dimension(1:im,1:levs) :: delp, dz, uin, vin, pt, qv1, ql1, qr1, qg1, qa1, qn1, qi1, &
179 qs1, pt_dt, qa_dt, u_dt, v_dt, w, qv_dt, ql_dt, qr_dt, qi_dt, &
180 qs_dt, qg_dt, p123, refl, new_qv, new_ql, new_qi, new_qr, &
181 new_qs, new_qg, new_t
182 real(kind=kind_phys),
dimension(1:im,1,1:levs) :: pfils, pflls
183 real(kind=kind_phys),
dimension(:,:),
allocatable :: den
184 real(kind=kind_phys) :: onebg
185 real(kind=kind_phys) :: tem
233 ql1(i,k) = gq0_ntcw(i,kk)
234 qr1(i,k) = gq0_ntrw(i,kk)
235 qi1(i,k) = gq0_ntiw(i,kk)
236 qs1(i,k) = gq0_ntsw(i,kk)
237 qg1(i,k) = gq0_ntgl(i,kk)
238 qa1(i,k) = gq0_ntclamt(i,kk)
240 w(i,k) = -vvl(i,kk) * (one+con_fvirt * gq0(i,kk)) &
241 * gt0(i,kk) / prsl(i,kk) * (con_rd*onebg)
244 delp(i,k) = del(i,kk)
245 dz(i,k) = (phii(i,kk)-phii(i,kk+1))*onebg
246 p123(i,k) = prsl(i,kk)
247 refl(i,k) = refl_10cm(i,kk)
258 qv1, ql1, qr1, qi1, qs1, qg1, qa1, qn1, qv_dt, ql_dt, qr_dt, qi_dt, &
259 qs_dt, qg_dt, qa_dt, pt_dt, pt, w, uin, vin, u_dt, v_dt, dz, delp, &
260 garea, dtp, frland, rain0, snow0, ice0, graupel0, hydrostatic, &
261 phys_hydrostatic, p123, lradar, refl, reset, pfils, pflls)
262 tem = dtp*con_p001/con_day
270 if(rain0(i)*tem < rainmin)
then
273 if(ice0(i)*tem < rainmin)
then
276 if(snow0(i)*tem < rainmin)
then
279 if(graupel0(i)*tem < rainmin)
then
287 prcp0(i) = (rain0(i)+snow0(i)+ice0(i)+graupel0(i)) * tem
288 if ( prcp0(i) > rainmin )
then
289 sr(i) = (snow0(i) + ice0(i) + graupel0(i)) &
290 / (rain0(i) + snow0(i) + ice0(i) + graupel0(i))
300 graupel0 = graupel0*tem
306 ten_qv(i,k) = qv_dt(i,kk)
307 ten_ql(i,k) = ql_dt(i,kk)
308 ten_qr(i,k) = qr_dt(i,kk)
309 ten_qi(i,k) = qi_dt(i,kk)
310 ten_qs(i,k) = qs_dt(i,kk)
311 ten_qg(i,k) = qg_dt(i,kk)
312 ten_cldfrc(i,k) = qa_dt(i,kk)
314 ten_t(i,k) = pt_dt(i,kk)
315 ten_u(i,k) = u_dt(i,kk)
316 ten_v(i,k) = v_dt(i,kk)
318 refl_10cm(i,k) = refl(i,kk)
321 new_qv(i,k) = qv1(i,kk) + qv_dt(i,kk) * dtp
322 new_ql(i,k) = ql1(i,kk) + ql_dt(i,kk) * dtp
323 new_qr(i,k) = qr1(i,kk) + qr_dt(i,kk) * dtp
324 new_qi(i,k) = qi1(i,kk) + qi_dt(i,kk) * dtp
325 new_qs(i,k) = qs1(i,kk) + qs_dt(i,kk) * dtp
326 new_qg(i,k) = qg1(i,kk) + qg_dt(i,kk) * dtp
327 new_t(i,k) = gt0(i,k) + pt_dt(i,kk) * dtp
336 pfi_lsan(i,k) = pfils(i,1,kk)
337 pfl_lsan(i,k) = pflls(i,1,kk)
343 allocate(den(1:im,1:levs))
346 den(i,k)=con_eps*prsl(i,k)/(con_rd*new_t(i,k)*(new_qv(i,k)+con_eps))
350 del(1:im,1:levs), islmsk(1:im), &
351 new_ql(1:im,1:levs), new_qi(1:im,1:levs), &
352 new_qr(1:im,1:levs), &
353 new_qs(1:im,1:levs) + new_qg(1:im,1:levs), &
354 new_qg(1:im,1:levs)*0.0, new_t(1:im,1:levs), &
355 rew(1:im,1:levs), rei(1:im,1:levs), rer(1:im,1:levs),&
356 res(1:im,1:levs), reg(1:im,1:levs))
360 end subroutine gfdl_cloud_microphys_run
subroutine, public cloud_diagnosis(is, ie, ks, ke, den, delp, lsm, qmw, qmi, qmr, qms, qmg, t, rew, rei, rer, res, reg)
The subroutine 'cloud_diagnosis' diagnoses the radius of cloud species.
subroutine, public gfdl_cloud_microphys_mod_end()
The subroutine 'gfdl_cloud_microphys_init' terminates the GFDL cloud microphysics.
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.
subroutine, public gfdl_cloud_microphys_mod_init(me, master, nlunit, input_nml_file, logunit, fn_nml, errmsg, errflg)
The subroutine 'gfdl_cloud_microphys_init' initializes the GFDL cloud microphysics.
This module contains the column GFDL Cloud microphysics scheme.
This module contains the CCPP entry point for the column GFDL cloud microphysics ( Chen and Lin (2013...