26 subroutine tempo_init(l_mp_tables, hail_aware_flag, aerosol_aware_flag)
29 logical,
intent(in) :: l_mp_tables
30 logical,
intent(in),
optional :: aerosol_aware_flag, hail_aware_flag
32 integer,
parameter :: open_OK = 0
33 integer,
parameter :: num_records = 5
34 integer :: qr_acr_qg_filesize, qr_acr_qg_check, qr_acr_qg_dim1size, qr_acr_qg_dim9size
35 logical :: qr_acr_qg_exists, qr_acr_qg_hailaware_exists
36 integer :: i, j, k, l, m, n
40 character(len=132) :: message
43 call mp_tempo_params_init()
45 if (
present(hail_aware_flag))
then
46 configs%hail_aware = hail_aware_flag
48 call physics_message(
'--- tempo_init() called without hail_aware_flag... setting value to .false.')
49 configs%hail_aware = .false.
55 write(message,
'(L1)') configs%hail_aware
56 call physics_message(
'--- tempo_init() called with hail_aware_flag = ' // trim(message))
58 if (
present(aerosol_aware_flag))
then
59 configs%aerosol_aware = aerosol_aware_flag
60 write(message,
'(L1)') configs%aerosol_aware
61 call physics_message(
'--- tempo_init() called with aerosol_aware_flag = ' // trim(message))
65 if (configs%hail_aware)
then
68 av_g(idx_bg1) = av_g_old
69 bv_g(idx_bg1) = bv_g_old
117 if (.not.
allocated(tcg_racg))
then
118 allocate(tcg_racg(ntb_g1,ntb_g,dimnrhg,ntb_r1,ntb_r))
123 if (.not.
allocated(tmr_racg))
allocate(tmr_racg(ntb_g1,ntb_g,dimnrhg,ntb_r1,ntb_r))
124 if (.not.
allocated(tcr_gacr))
allocate(tcr_gacr(ntb_g1,ntb_g,dimnrhg,ntb_r1,ntb_r))
125 if (.not.
allocated(tnr_racg))
allocate(tnr_racg(ntb_g1,ntb_g,dimnrhg,ntb_r1,ntb_r))
126 if (.not.
allocated(tnr_gacr))
allocate(tnr_gacr(ntb_g1,ntb_g,dimnrhg,ntb_r1,ntb_r))
129 if (.not.
allocated(tcs_racs1))
allocate(tcs_racs1(ntb_s,ntb_t,ntb_r1,ntb_r))
130 if (.not.
allocated(tmr_racs1))
allocate(tmr_racs1(ntb_s,ntb_t,ntb_r1,ntb_r))
131 if (.not.
allocated(tcs_racs2))
allocate(tcs_racs2(ntb_s,ntb_t,ntb_r1,ntb_r))
132 if (.not.
allocated(tmr_racs2))
allocate(tmr_racs2(ntb_s,ntb_t,ntb_r1,ntb_r))
133 if (.not.
allocated(tcr_sacr1))
allocate(tcr_sacr1(ntb_s,ntb_t,ntb_r1,ntb_r))
134 if (.not.
allocated(tms_sacr1))
allocate(tms_sacr1(ntb_s,ntb_t,ntb_r1,ntb_r))
135 if (.not.
allocated(tcr_sacr2))
allocate(tcr_sacr2(ntb_s,ntb_t,ntb_r1,ntb_r))
136 if (.not.
allocated(tms_sacr2))
allocate(tms_sacr2(ntb_s,ntb_t,ntb_r1,ntb_r))
137 if (.not.
allocated(tnr_racs1))
allocate(tnr_racs1(ntb_s,ntb_t,ntb_r1,ntb_r))
138 if (.not.
allocated(tnr_racs2))
allocate(tnr_racs2(ntb_s,ntb_t,ntb_r1,ntb_r))
139 if (.not.
allocated(tnr_sacr1))
allocate(tnr_sacr1(ntb_s,ntb_t,ntb_r1,ntb_r))
140 if (.not.
allocated(tnr_sacr2))
allocate(tnr_sacr2(ntb_s,ntb_t,ntb_r1,ntb_r))
143 if (.not.
allocated(tpi_qcfz))
allocate(tpi_qcfz(ntb_c,nbc,ntb_t1,ntb_in))
144 if (.not.
allocated(tni_qcfz))
allocate(tni_qcfz(ntb_c,nbc,ntb_t1,ntb_in))
147 if (.not.
allocated(tpi_qrfz))
allocate(tpi_qrfz(ntb_r,ntb_r1,ntb_t1,ntb_in))
148 if (.not.
allocated(tpg_qrfz))
allocate(tpg_qrfz(ntb_r,ntb_r1,ntb_t1,ntb_in))
149 if (.not.
allocated(tni_qrfz))
allocate(tni_qrfz(ntb_r,ntb_r1,ntb_t1,ntb_in))
150 if (.not.
allocated(tnr_qrfz))
allocate(tnr_qrfz(ntb_r,ntb_r1,ntb_t1,ntb_in))
153 if (.not.
allocated(tps_iaus))
allocate(tps_iaus(ntb_i,ntb_i1))
154 if (.not.
allocated(tni_iaus))
allocate(tni_iaus(ntb_i,ntb_i1))
155 if (.not.
allocated(tpi_ide))
allocate(tpi_ide(ntb_i,ntb_i1))
158 if (.not.
allocated(t_efrw))
allocate(t_efrw(nbr,nbc))
159 if (.not.
allocated(t_efsw))
allocate(t_efsw(nbs,nbc))
162 if (.not.
allocated(tnr_rev))
allocate(tnr_rev(nbr,ntb_r1,ntb_r))
163 if (.not.
allocated(tpc_wev))
allocate(tpc_wev(nbc,ntb_c,nbc))
164 if (.not.
allocated(tnc_wev))
allocate(tnc_wev(nbc,ntb_c,nbc))
167 if (.not.
allocated(tnccn_act))
allocate(tnccn_act(ntb_arc,ntb_arw,ntb_art,ntb_arr,ntb_ark))
176 d0i = (xm0i/am_i)**(1.0/bm_i)
177 xm0s = am_s * d0s**bm_s
178 xm0g = am_g(nrhg) * d0g**bm_g
183 cce(2,n) = bm_r + n + 1.
184 cce(3,n) = bm_r + n + 4.
185 cce(4,n) = n + bv_c + 1.
186 cce(5,n) = bm_r + n + bv_c + 1.
187 ccg(1,n) = gamma(cce(1,n))
188 ccg(2,n) = gamma(cce(2,n))
189 ccg(3,n) = gamma(cce(3,n))
190 ccg(4,n) = gamma(cce(4,n))
191 ccg(5,n) = gamma(cce(5,n))
192 ocg1(n) = 1.0 / ccg(1,n)
193 ocg2(n) = 1.0 / ccg(2,n)
197 cie(2) = bm_i + mu_i + 1.
198 cie(3) = bm_i + mu_i + bv_i + 1.
199 cie(4) = mu_i + bv_i + 1.
201 cie(6) = bm_i*0.5 + mu_i + bv_i + 1.
202 cie(7) = bm_i*0.5 + mu_i + 1.
203 cig(1) = gamma(cie(1))
204 cig(2) = gamma(cie(2))
205 cig(3) = gamma(cie(3))
206 cig(4) = gamma(cie(4))
207 cig(5) = gamma(cie(5))
208 cig(6) = gamma(cie(6))
209 cig(7) = gamma(cie(7))
216 cre(3) = bm_r + mu_r + 1.
217 cre(4) = bm_r*2. + mu_r + 1.
218 cre(5) = mu_r + bv_r + 1.
219 cre(6) = bm_r + mu_r + bv_r + 1.
220 cre(7) = bm_r*0.5 + mu_r + bv_r + 1.
221 cre(8) = bm_r + mu_r + bv_r + 3.
222 cre(9) = mu_r + bv_r + 3.
224 cre(11) = 0.5*(bv_r + 5. + 2.*mu_r)
225 cre(12) = bm_r*0.5 + mu_r + 1.
226 cre(13) = bm_r*2. + mu_r + bv_r + 1.
229 crg(n) = gamma(cre(n))
241 cse(4) = bm_s + bv_s + 1.
242 cse(5) = bm_s*2. + bv_s + 1.
243 cse(6) = bm_s*2. + 1.
244 cse(7) = bm_s + mu_s + 1.
245 cse(8) = bm_s + mu_s + 2.
246 cse(9) = bm_s + mu_s + 3.
247 cse(10) = bm_s + mu_s + bv_s + 1.
248 cse(11) = bm_s*2. + mu_s + bv_s + 1.
249 cse(12) = bm_s*2. + mu_s + 1.
251 cse(14) = bm_s + bv_s
253 cse(16) = 1.0 + (1.0 + bv_s)/2.
254 cse(17) = bm_s + bv_s + 2.
257 csg(n) = gamma(cse(n))
266 cge(3,:) = bm_g + mu_g + 1.
267 cge(4,:) = bm_g*2. + mu_g + 1.
268 cge(10,:) = mu_g + 2.
269 cge(12,:) = bm_g*0.5 + mu_g + 1.
272 cge(5,m) = bm_g*2. + mu_g + bv_g(m) + 1.
273 cge(6,m) = bm_g + mu_g + bv_g(m) + 1.
274 cge(7,m) = bm_g*0.5 + mu_g + bv_g(m) + 1.
275 cge(8,m) = mu_g + bv_g(m) + 1.
276 cge(9,m) = mu_g + bv_g(m) + 3.
277 cge(11,m) = 0.5*(bv_g(m) + 5. + 2.*mu_g)
282 cgg(n,m) = gamma(cge(n,m))
290 oamg(m) = 1.0 / am_g(m)
291 ocmg(m) = oamg(m)**obmg
294 oge1 = 1.0 / cge(1,1)
295 ogg1 = 1.0 / cgg(1,1)
296 ogg2 = 1.0 / cgg(2,1)
297 ogg3 = 1.0 / cgg(3,1)
303 t1_qr_qc = pi * 0.25 * av_r * crg(9)
304 t1_qr_qi = pi * 0.25 * av_r * crg(9)
305 t2_qr_qi = pi * 0.25 * am_r*av_r * crg(8)
311 t1_qs_qc = pi * 0.25 * av_s
314 t1_qs_qi = pi * 0.25 * av_s
317 t1_qr_ev = 0.78 * crg(10)
318 t2_qr_ev = 0.308 * sc3 * sqrt(av_r) * crg(11)
322 t2_qs_sd = 0.28 * sc3 * sqrt(av_s)
325 t1_qs_me = pi * 4. *c_sqrd * olfus * 0.86
326 t2_qs_me = pi * 4. *c_sqrd * olfus * 0.28 * sc3 * sqrt(av_s)
329 t1_qg_sd = 0.86 * cgg(10,1)
333 t1_qg_me = pi * 4. * c_cube * olfus * 0.86 * cgg(10,1)
338 nic2 = nint(log10(r_c(1)))
339 nii2 = nint(log10(r_i(1)))
340 nii3 = nint(log10(nt_i(1)))
341 nir2 = nint(log10(r_r(1)))
342 nir3 = nint(log10(n0r_exp(1)))
343 nis2 = nint(log10(r_s(1)))
344 nig2 = nint(log10(r_g(1)))
345 nig3 = nint(log10(n0g_exp(1)))
346 niin2 = nint(log10(nt_in(1)))
352 dc(n) = dc(n-1) + 1.0e-6_dp
353 dtc(n) = (dc(n) - dc(n-1))
357 call create_bins(numbins=nbi, lowbin=d0i*1.0_dp, highbin=d0s*2.0_dp, &
358 bins=di, deltabins=dti)
361 call create_bins(numbins=nbr, lowbin=d0r*1.0_dp, highbin=0.005_dp, &
362 bins=dr, deltabins=dtr)
365 call create_bins(numbins=nbs, lowbin=d0s*1.0_dp, highbin=0.02_dp, &
366 bins=ds, deltabins=dts)
369 call create_bins(numbins=nbg, lowbin=d0g*1.0_dp, highbin=0.05_dp, &
370 bins=dg, deltabins=dtg)
373 call create_bins(numbins=nbc, lowbin=1.0_dp, highbin=3000.0_dp, &
375 t_nc = t_nc * 1.0e6_dp
376 nic1 = log(t_nc(nbc)/t_nc(1))
386 tcg_racg(i,j,n,k,m) = 0.0_dp
387 tmr_racg(i,j,n,k,m) = 0.0_dp
388 tcr_gacr(i,j,n,k,m) = 0.0_dp
389 tnr_racg(i,j,n,k,m) = 0.0_dp
390 tnr_gacr(i,j,n,k,m) = 0.0_dp
401 tcs_racs1(i,j,k,m) = 0.0_dp
402 tmr_racs1(i,j,k,m) = 0.0_dp
403 tcs_racs2(i,j,k,m) = 0.0_dp
404 tmr_racs2(i,j,k,m) = 0.0_dp
405 tcr_sacr1(i,j,k,m) = 0.0_dp
406 tms_sacr1(i,j,k,m) = 0.0_dp
407 tcr_sacr2(i,j,k,m) = 0.0_dp
408 tms_sacr2(i,j,k,m) = 0.0_dp
409 tnr_racs1(i,j,k,m) = 0.0_dp
410 tnr_racs2(i,j,k,m) = 0.0_dp
411 tnr_sacr1(i,j,k,m) = 0.0_dp
412 tnr_sacr2(i,j,k,m) = 0.0_dp
422 tpi_qrfz(i,j,k,m) = 0.0_dp
423 tni_qrfz(i,j,k,m) = 0.0_dp
424 tpg_qrfz(i,j,k,m) = 0.0_dp
425 tnr_qrfz(i,j,k,m) = 0.0_dp
430 tpi_qcfz(i,j,k,m) = 0.0_dp
431 tni_qcfz(i,j,k,m) = 0.0_dp
439 tps_iaus(i,j) = 0.0_dp
440 tni_iaus(i,j) = 0.0_dp
441 tpi_ide(i,j) = 0.0_dp
457 tnr_rev(i,j,k) = 0.0_dp
465 tpc_wev(i,j,k) = 0.0_dp
466 tnc_wev(i,j,k) = 0.0_dp
476 tnccn_act(i,j,k,l,m) = 1.0
485 if (.not. l_mp_tables)
return
496 call mpas_new_unit(mp_unit, unformatted = .true.)
506 if (configs%hail_aware)
then
507 using_hail_aware_table = .true.
508 open(unit=mp_unit,file=
'MP_TEMPO_HAILAWARE_QRacrQG_DATA.DBL',form=
'unformatted',status=
'old',action=
'read', &
510 if (istat /= open_ok)
then
511 call physics_error_fatal(
'--- tempo_init() failure opening MP_TEMPO_HAILAWARE_QRacrQG.DBL')
513 read(mp_unit) tcg_racg
514 read(mp_unit) tmr_racg
515 read(mp_unit) tcr_gacr
516 read(mp_unit) tnr_racg
517 read(mp_unit) tnr_gacr
520 inquire(file=
'MP_TEMPO_HAILAWARE_QRacrQG_DATA.DBL', exist=qr_acr_qg_hailaware_exists)
521 inquire(file=
'MP_TEMPO_QRacrQG_DATA.DBL', exist=qr_acr_qg_exists)
523 if (qr_acr_qg_hailaware_exists)
then
524 using_hail_aware_table = .true.
525 open(unit=mp_unit,file=
'MP_TEMPO_HAILAWARE_QRacrQG_DATA.DBL',form=
'unformatted',status=
'old', &
526 action=
'read',iostat=istat)
527 if (istat /= open_ok)
then
528 call physics_error_fatal(
'--- tempo_init() failure opening MP_TEMPO_HAILAWARE_QRacrQG.DBL')
530 elseif (qr_acr_qg_exists)
then
531 using_hail_aware_table = .false.
532 open(unit=mp_unit,file=
'MP_TEMPO_QRacrQG_DATA.DBL',form=
'unformatted',status=
'old', &
533 action=
'read',iostat=istat)
534 if (istat /= open_ok)
then
535 call physics_error_fatal(
'--- tempo_init() failure opening MP_TEMPO_QRacrQG.DBL')
538 call physics_error_fatal(
'--- tempo_init() could not find file to read QRacrQG data.')
540 read(mp_unit) tcg_racg
541 read(mp_unit) tmr_racg
542 read(mp_unit) tcr_gacr
543 read(mp_unit) tnr_racg
544 read(mp_unit) tnr_gacr
549 open(unit=mp_unit,file=
'MP_TEMPO_QRacrQS_DATA.DBL',form=
'unformatted',status=
'old',action=
'read', &
551 if (istat /= open_ok)
then
552 call physics_error_fatal(
'--- tempo_init() failure opening MP_TEMPO_QRacrQS.DBL')
554 read(mp_unit) tcs_racs1
555 read(mp_unit) tmr_racs1
556 read(mp_unit) tcs_racs2
557 read(mp_unit) tmr_racs2
558 read(mp_unit) tcr_sacr1
559 read(mp_unit) tms_sacr1
560 read(mp_unit) tcr_sacr2
561 read(mp_unit) tms_sacr2
562 read(mp_unit) tnr_racs1
563 read(mp_unit) tnr_racs2
564 read(mp_unit) tnr_sacr1
565 read(mp_unit) tnr_sacr2
569 open(unit=mp_unit,file=
'MP_TEMPO_freezeH2O_DATA.DBL',form=
'unformatted',status=
'old',action=
'read', &
571 if (istat /= open_ok)
then
572 call physics_error_fatal(
'--- tempo_init() failure opening MP_TEMPO_freezeH2O.DBL')
574 read(mp_unit) tpi_qrfz
575 read(mp_unit) tni_qrfz
576 read(mp_unit) tpg_qrfz
577 read(mp_unit) tnr_qrfz
578 read(mp_unit) tpi_qcfz
579 read(mp_unit) tni_qcfz
583 open(unit=mp_unit,file=
'MP_TEMPO_QIautQS_DATA.DBL',form=
'unformatted',status=
'old',action=
'read', &
585 if (istat /= open_ok)
then
586 call physics_error_fatal(
'--- tempo_init() failure opening MP_TEMPO_QIautQS.DBL')
588 read(mp_unit) tpi_ide
589 read(mp_unit) tps_iaus
590 read(mp_unit) tni_iaus
592 call mpas_release_unit(mp_unit)
601 xam_g = am_g(idx_bg1)
615 subroutine tempo_3d_to_1d_driver(qv, qc, qr, qi, qs, qg, qb, ni, nr, nc, ng, &
616 nwfa, nifa, nwfa2d, nifa2d, th, pii, p, w, dz, dt_in, itimestep, &
617 rainnc, rainncv, snownc, snowncv, graupelnc, graupelncv, sr, frainnc, &
618 refl_10cm, diagflag, do_radar_ref, re_cloud, re_ice, re_snow, qcbl, cldfrac, &
619 has_reqc, has_reqi, has_reqs, ntc, muc, rainprod, evapprod, &
620 max_hail_diameter_column, max_hail_diameter_sfc, &
621 ids, ide, jds, jde, kds, kde, ims, ime, jms, jme, kms, kme, its, ite, jts, jte, kts, kte)
624 integer,
intent(in) :: ids,ide, jds,jde, kds,kde, ims,ime, jms,jme, kms,kme, its,ite, jts,jte, kts,kte
625 real,
dimension(ims:ime, kms:kme, jms:jme),
intent(inout) :: qv, qc, qr, qi, qs, qg, ni, nr, th
626 real,
dimension(ims:ime, kms:kme, jms:jme),
intent(inout) :: re_cloud, re_ice, re_snow
627 integer,
intent(in) :: has_reqc, has_reqi, has_reqs
628 real,
dimension(ims:ime, kms:kme, jms:jme),
intent(in) :: pii, p, w, dz
629 real,
dimension(ims:ime, jms:jme),
intent(inout) :: rainnc, rainncv, sr
630 real,
optional,
dimension(ims:ime,jms:jme),
intent(inout) :: frainnc, max_hail_diameter_column, max_hail_diameter_sfc
631 real,
dimension(ims:ime, kms:kme, jms:jme),
intent(inout) :: rainprod, evapprod
632 real,
dimension(ims:ime, jms:jme),
intent(in),
optional :: ntc, muc
633 real,
dimension(ims:ime, kms:kme, jms:jme),
intent(inout),
optional :: nc, nwfa, nifa, qb, ng
634 real,
dimension(ims:ime, jms:jme),
intent(in),
optional :: nwfa2d, nifa2d
635 real,
dimension(ims:ime, kms:kme, jms:jme),
intent(inout),
optional :: refl_10cm
636 real,
dimension(ims:ime, kms:kme, jms:jme),
intent(in),
optional :: qcbl, cldfrac
637 real,
dimension(ims:ime, jms:jme),
intent(inout),
optional :: snownc, snowncv, graupelnc, graupelncv
638 real,
intent(in) :: dt_in
639 integer,
intent(in) :: itimestep
642 real,
dimension(kts:kte) :: qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, qb1d, ni1d, nr1d, nc1d, ng1d, &
643 nwfa1d, nifa1d, t1d, p1d, w1d, dz1d, rho, dbz, qcbl1d, cldfrac1d, qg_max_diam1d
644 real,
dimension(kts:kte) :: re_qc1d, re_qi1d, re_qs1d
645 real,
dimension(kts:kte):: rainprod1d, evapprod1d
646 double precision,
dimension(kts:kte) :: ncbl1d
647 real,
dimension(its:ite, jts:jte) :: pcp_ra, pcp_sn, pcp_gr, pcp_ic, frain
648 real :: dt, pptrain, pptsnow, pptgraul, pptice
649 real :: qc_max, qr_max, qs_max, qi_max, qg_max, ni_max, nr_max
653 real :: tmprc, tmpnc, xDc
655 logical,
dimension(kts:kte) :: sgs_clouds
656 double precision :: lamg, lam_exp, lamr, n0_min, n0_exp, lamc
658 integer :: imax_qc, imax_qr, imax_qi, imax_qs, imax_qg, imax_ni, imax_nr
659 integer :: jmax_qc, jmax_qr, jmax_qi, jmax_qs, jmax_qg, jmax_ni, jmax_nr
660 integer :: kmax_qc, kmax_qr, kmax_qi, kmax_qs, kmax_qg, kmax_ni, kmax_nr
661 integer :: i_start, j_start, i_end, j_end
662 logical,
optional,
intent(in) :: diagflag
663 integer,
optional,
intent(in) :: do_radar_ref
664 character(len=132) :: message
669 i_end = min(ite, ide-1)
670 j_end = min(jte, jde-1)
703 j_loop:
do j = j_start, j_end
704 i_loop:
do i = i_start, i_end
710 if (
present(snowncv))
then
713 if (
present(graupelncv))
then
714 graupelncv(i,j) = 0.0
719 if (
present(ntc))
then
730 t1d(k) = th(i,k,j) * pii(i,k,j)
742 rho(k) = roverrv * p1d(k) / (r * t1d(k) * (qv1d(k)+roverrv))
744 sgs_clouds(k) = .false.
745 if (
present(qcbl) .and.
present(cldfrac))
then
746 qcbl1d(k) = qcbl(i,k,j)
747 cldfrac1d(k) = cldfrac(i,k,j)
752 if (
present(nwfa))
then
753 if (
present(nwfa2d))
then
755 nwfa(i,k,j) = nwfa(i,k,j) + nwfa2d(i,j) * dt
758 nwfa(i,k,j) = max(nwfa_default, min(aero_max, nwfa(i,k,j)))
759 nwfa1d(k) = nwfa(i,k,j)
761 nwfa1d(k) = nwfa_default / rho(k)
762 configs%aerosol_aware = .false.
765 if (
present(nifa))
then
766 nifa1d(k) = nifa(i,k,j)
768 nifa1d(k) = nifa_default / rho(k)
769 configs%aerosol_aware = .false.
772 if (
present(nc))
then
775 nc1d(k) = nt_c / rho(k)
776 configs%aerosol_aware = .false.
781 if ((
present(ng)) .and. (
present(qb)))
then
782 configs%hail_aware = .true.
790 if (qg1d(k) > r1)
then
791 ygra1 = log10(max(1.e-9, qg1d(k)*rho(k)))
792 zans1 = 3.0 + 2.0/7.0*(ygra1+8.0)
793 zans1 = max(2.0, min(zans1, 6.0))
794 n0_exp = 10.0**(zans1)
795 lam_exp = (n0_exp*am_g(idx_bg1)*cgg(1,1) / (rho(k)*qg1d(k)))**oge1
796 lamg = lam_exp * (cgg(3,1)*ogg2*ogg1)**obmg
797 ng1d(k) = cgg(2,1) * ogg3*rho(k) * qg1d(k) * lamg**bm_g / am_g(idx_bg1)
798 ng1d(k) = max(r2, (ng1d(k)/rho(k)))
799 qb1d(k) = qg1d(k) / rho_g(idx_bg1)
818 call mp_tempo_main(qv1d=qv1d, qc1d=qc1d, qi1d=qi1d, qr1d=qr1d, qs1d=qs1d, qg1d=qg1d, qb1d=qb1d, &
819 ni1d=ni1d, nr1d=nr1d, nc1d=nc1d, ng1d=ng1d, nwfa1d=nwfa1d, nifa1d=nifa1d, t1d=t1d, p1d=p1d, &
820 w1d=w1d, dzq=dz1d, pptrain=pptrain, pptsnow=pptsnow, pptgraul=pptgraul, pptice=pptice, &
821 rainprod=rainprod1d, evapprod=evapprod1d, kts=kts, kte=kte, dt=dt, ii=i, jj=j, configs=configs)
825 pcp_ra(i,j) = pptrain
826 pcp_sn(i,j) = pptsnow
827 pcp_gr(i,j) = pptgraul
829 rainncv(i,j) = pptrain + pptsnow + pptgraul + pptice
830 rainnc(i,j) = rainnc(i,j) + pptrain + pptsnow + pptgraul + pptice
831 if (
present(snowncv) .and.
present(snownc))
then
832 snowncv(i,j) = pptsnow + pptice
833 snownc(i,j) = snownc(i,j) + pptsnow + pptice
835 if (
present(graupelncv) .and.
present(graupelnc))
then
836 graupelncv(i,j) = pptgraul
837 graupelnc(i,j) = graupelnc(i,j) + pptgraul
839 if (
present(frainnc))
then
841 if(t1d(1) <= 273.)
then
842 frain(i,j) = pcp_ra(i,j)
844 frainnc(i,j) = frainnc(i,j) + frain(i,j)
847 sr(i,j) = (pptsnow + pptgraul + pptice) / (rainncv(i,j) + r1)
850 if ((
present(ng)) .and. (
present(qb)))
then
858 if (qg1d(k) > r1)
then
859 rho(k) = roverrv * p1d(k) / (r * t1d(k) * (qv1d(k)+roverrv))
860 ygra1 = log10(max(1.e-9, qg1d(k)*rho(k)))
861 zans1 = 3.0 + 2.0/7.0*(ygra1+8.0)
862 zans1 = max(2.0, min(zans1, 6.0))
863 n0_exp = 10.0**(zans1)
864 lam_exp = (n0_exp*am_g(idx_bg1)*cgg(1,1) / (rho(k)*qg1d(k)))**oge1
865 lamg = lam_exp * (cgg(3,1)*ogg2*ogg1)**obmg
866 ng1d(k) = cgg(2,1) * ogg3*rho(k) * qg1d(k) * lamg**bm_g / am_g(idx_bg1)
867 ng1d(k) = max(r2, (ng1d(k)/rho(k)))
868 qb1d(k) = qg1d(k) / rho_g(idx_bg1)
877 if (
present(nc)) nc(i,k,j) = nc1d(k)
878 if (
present(nwfa)) nwfa(i,k,j) = nwfa1d(k)
879 if (
present(nifa)) nifa(i,k,j) = nifa1d(k)
888 th(i,k,j) = t1d(k) / pii(i,k,j)
889 rainprod(i,k,j) = rainprod1d(k)
890 evapprod(i,k,j) = evapprod1d(k)
892 if (
present(qcbl) .and.
present(cldfrac))
then
893 if ((qc1d(k) <= r1) .and. (qcbl1d(k) > 1.e-9) .and. (cldfrac1d(k) > 0.))
then
894 qc1d(k) = qc1d(k) + qcbl1d(k)/cldfrac1d(k)
895 sgs_clouds(k) = .true.
897 sgs_clouds(k) = .false.
900 sgs_clouds(k) = .false.
904 if (any(sgs_clouds))
then
906 call predict_number_sub(kts, kte, qc1d, qr1d, qi1d, qs1d, p1d, t1d, w1d, &
907 ncbl1d, predict_nc=.true.)
909 if (sgs_clouds(k))
then
910 nc1d(k) = nc1d(k) + real(ncbl1d(k))
911 rho(k) = roverrv * p1d(k) / (r * t1d(k) * (qv1d(k)+roverrv))
912 tmprc = qc1d(k)*rho(k)
913 tmpnc = max(2., min(nc1d(k)*rho(k), nt_c_max))
914 if (tmpnc.gt.10000.e6)
then
916 elseif (tmpnc.lt.100.)
then
919 nu_c = nint(nu_c_scale/tmpnc) + 2
920 nu_c = max(2, min(nu_c, 15))
922 lamc = (tmpnc*am_r*ccg(2,nu_c)*ocg1(nu_c)/tmprc)**obmr
923 xdc = (bm_r + nu_c + 1.) / lamc
924 if (xdc .lt. d0c)
then
925 lamc = cce(2,nu_c)/d0c
926 elseif (xdc.gt. d0r*2.)
then
927 lamc = cce(2,nu_c)/(d0r*2.)
929 tmpnc = min(real(nt_c_max, kind=dp), ccg(1,nu_c)*ocg2(nu_c)*tmprc / am_r*lamc**bm_r)
930 nc1d(k) = tmpnc/rho(k)
968 call calc_refl10cm (qv1d=qv1d, qc1d=qc1d, qr1d=qr1d, nr1d=nr1d, qs1d=qs1d, qg1d=qg1d, ng1d=ng1d, qb1d=qb1d, &
969 t1d=t1d, p1d=p1d, dbz=dbz, kts=kts, kte=kte, ii=i, jj=j, configs=configs)
971 refl_10cm(i,k,j) = max(-35.0_wp, dbz(k))
974 if ((
present(max_hail_diameter_sfc)) .and. (
present(max_hail_diameter_column)))
then
976 call hail_size_diagnostics(kts=kts, kte=kte, qg1d=qg1d, ng1d=ng1d, qb1d=qb1d, t1d=t1d, p1d=p1d, qv1d=qv1d, &
977 qg_max_diam1d=qg_max_diam1d, configs=configs)
979 max_hail_diameter_sfc(i,j) = max(0.0_wp, qg_max_diam1d(kts))
980 max_hail_diameter_column(i,j) = max(0.0_wp, maxval(qg_max_diam1d))
984 if (has_reqc /= 0 .and. has_reqi /= 0 .and. has_reqs /= 0)
then
990 call calc_effectrad (t1d=t1d, p1d=p1d, qv1d=qv1d, qc1d=qc1d, nc1d=nc1d, qi1d=qi1d, &
991 ni1d=ni1d, qs1d=qs1d, re_qc1d=re_qc1d, re_qi1d=re_qi1d, re_qs1d=re_qs1d, &
992 kts=kts, kte=kte, configs=configs)
994 re_cloud(i,k,j) = max(2.49e-6, min(re_qc1d(k), 50.e-6))
995 re_ice(i,k,j) = max(4.99e-6, min(re_qi1d(k), 125.e-6))
996 re_snow(i,k,j) = max(9.99e-6, min(re_qs1d(k), 999.e-6))