332 & ( plyr, plvl, tlyr, tvly, qlyr, qstl, rhly, &
333 & ccnd, ncndl, cnvw, cnvc, tracer1, &
334 & xlat, xlon, slmsk, dz, delp, ix, lm, nlay, nlp1, &
335 & deltaq, sup, dcorr_con, me, icloud, kdt, &
336 & ntrac, ntcw, ntiw, ntrw, ntsw, ntgl, ntclamt, &
337 & imp_physics, imp_physics_nssl, imp_physics_fer_hires, &
338 & imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, &
339 & imp_physics_tempo, &
340 & imp_physics_mg, iovr, iovr_rand, iovr_maxrand, iovr_max, &
341 & iovr_dcorr, iovr_exp, iovr_exprand, idcor, idcor_con, &
342 & idcor_hogan, idcor_oreopoulos, lcrick, lcnorm, &
343 & imfdeepcnv, imfdeepcnv_gf, imfdeepcnv_c3, &
344 & do_mynnedmf, lgfdlmprad, xr_cnvcld, &
345 & uni_cld, lmfshal, lmfdeep2, cldcov, clouds1, &
346 & effrl, effri, effrr, effrs, effr_in, &
347 & effrl_inout, effri_inout, effrs_inout, &
348 & lwp_ex, iwp_ex, lwp_fc, iwp_fc, &
349 & dzlay, latdeg, julian, yearlen, gridkm, top_at_1, si, &
350 & xr_con, xr_exp, con_ttp, con_pi, con_g, con_rd, con_thgni, &
351 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
352 & cld_rwp, cld_rerain, cld_swp, cld_resnow, &
353 & clds, mtop, mbot, de_lgth, alpha &
499 integer,
intent(in) :: ix, lm, nlay, nlp1, me, ncndl, icloud
500 integer,
intent(in) :: ntrac, ntcw, ntiw, ntrw, ntsw, ntgl, &
502 integer,
intent(in) :: kdt, imfdeepcnv, imfdeepcnv_gf, &
504 integer,
intent(in) :: &
507 & imp_physics_fer_hires,
509 & imp_physics_thompson,
514 integer,
intent(in) :: &
528 logical,
intent(in) :: uni_cld, lmfshal, lmfdeep2, effr_in, &
529 & do_mynnedmf, lgfdlmprad, top_at_1, lcrick, lcnorm, &
532 real (kind=kind_phys),
dimension(:,:,:),
intent(in) :: ccnd, &
534 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plvl, plyr, &
535 & tlyr, tvly, qlyr, qstl, rhly, cnvw, cnvc, cldcov, &
536 & delp, dz, effrl, effri, effrr, effrs, dzlay, clouds1
538 real (kind=kind_phys),
intent(in) :: sup, dcorr_con, con_ttp, &
539 & con_pi, con_g, con_rd, con_thgni, xr_con, xr_exp
540 real (kind=kind_phys),
dimension(:),
intent(in) :: xlat, xlon, &
543 real(kind=kind_phys),
dimension(:),
intent(in) :: latdeg, gridkm
544 real(kind=kind_phys),
intent(in) :: julian
545 integer,
intent(in) :: yearlen
548 real(kind=kind_phys),
dimension(:,:) :: deltaq
549 real(kind=kind_phys),
dimension(:,:),
intent(inout) :: &
550 & effrl_inout, effri_inout, effrs_inout
551 real(kind=kind_phys),
dimension(:),
intent(inout) :: &
552 & lwp_ex, iwp_ex, lwp_fc, iwp_fc
556 real (kind=kind_phys),
dimension(:,:),
intent(out) :: &
557 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
558 & cld_rwp, cld_rerain, cld_swp, cld_resnow
559 real (kind=kind_phys),
dimension(:,:),
intent(out) :: clds
560 real (kind=kind_phys),
dimension(:),
intent(out) :: de_lgth
561 real (kind=kind_phys),
dimension(:,:),
intent(out) :: alpha
563 integer,
dimension(:,:),
intent(out) :: mtop,mbot
566 real (kind=kind_phys),
dimension(IX,NLAY) :: cldtot, cldcnv, &
567 & cwp, cip, crp, csp, rew, rei, res, rer, tem2d, clwf
569 real (kind=kind_phys) :: ptop1(ix,
nk_clds+1), rxlat(ix)
571 real (kind=kind_phys) :: clwmin, clwm, clwt, onemrh,
value, &
574 integer :: i, k, id, nf
579 if (me == 0 .and. kdt == 1)
then &
580 print*,
'in radiation_clouds_prop=', imp_physics, uni_cld, &
581 & ncndl, lgfdlmprad, do_mynnedmf, imfdeepcnv, kdt
592 cld_rerain(i,k) = 0.0
594 cld_resnow(i,k) = 0.0
605 if (imp_physics == imp_physics_mg)
then
608 if (uni_cld .and. ncndl >= 2)
then
609 call progclduni (plyr, plvl, tlyr, tvly, ccnd, ncndl, &
610 & xlat, xlon, slmsk, dz, delp, &
611 & ix, nlay, nlp1, cldcov, &
612 & effrl, effri, effrr, effrs, effr_in, &
614 & cldtot, cldcnv, lcrick, lcnorm, con_ttp, &
615 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
616 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
620 elseif (imp_physics == imp_physics_gfdl)
then
622 if (.not. lgfdlmprad)
then
624 & qstl, rhly, ccnd(1:ix,1:nlay,1), cnvw, cnvc, &
625 & xlat, xlon, slmsk, cldcov, dz, delp, &
626 & ix, nlay, nlp1, dzlay, &
627 & cldtot, cldcnv, lcrick, lcnorm, con_ttp, &
628 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
629 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
633 call progclduni (plyr, plvl, tlyr, tvly, ccnd, ncndl, xlat, &
634 & xlon, slmsk, dz,delp, ix, nlay, nlp1, cldcov, &
635 & effrl, effri, effrr, effrs, effr_in, &
637 & cldtot, cldcnv, lcrick, lcnorm, con_ttp, &
638 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
639 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
644 elseif(imp_physics == imp_physics_fer_hires)
then
646 effrl_inout(:,:) = 10.
647 effri_inout(:,:) = 50.
648 effrs_inout(:,:) = 250.
652 & tracer1,xlat,xlon,slmsk,dz,delp, &
653 & ntrac-1, ntcw-1,ntiw-1,ntrw-1, &
654 & ix,nlay,nlp1, icloud, xr_con, xr_exp, uni_cld,&
655 & lmfshal, lmfdeep2, &
656 & cldcov(:,1:nlay),effrl_inout(:,:), &
657 & effri_inout(:,:), effrs_inout(:,:), &
659 & cldtot, cldcnv, lcnorm, &
660 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
661 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
664 elseif ( imp_physics == imp_physics_nssl )
then
666 if(do_mynnedmf .or. imfdeepcnv == imfdeepcnv_gf .or. &
667 & imfdeepcnv == imfdeepcnv_c3)
then
672 cld_frac(i,k) = clouds1(i,k)
678 call progclduni (plyr, plvl, tlyr, tvly, ccnd, ncndl, &
679 & xlat, xlon, slmsk, dz, delp, ix, nlay, nlp1, &
681 & effrl, effri, effrr, effrs, effr_in , &
683 & cldtot, cldcnv, lcrick, lcnorm, con_ttp, &
684 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
685 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
690 & rhly,tracer1,xlat,xlon,slmsk,dz,delp, &
691 & ntrac-1, ntcw-1,ntiw-1,ntrw-1, &
692 & ntsw-1,ntgl-1,con_ttp,xr_cnvcld, &
693 & ix, nlay, nlp1, xr_con, xr_exp, uni_cld, &
694 & lmfshal, lmfdeep2, &
695 & cldcov(:,1:nlay), cnvw, effrl_inout, &
696 & effri_inout, effrs_inout, &
697 & lwp_ex, iwp_ex, lwp_fc, iwp_fc, &
699 & cldtot, cldcnv, lcnorm, &
700 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
701 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
705 elseif(imp_physics == imp_physics_thompson &
706 & .or. imp_physics == imp_physics_tempo)
then
708 if(do_mynnedmf .or. imfdeepcnv == imfdeepcnv_gf &
709 & .or. imfdeepcnv == imfdeepcnv_c3)
then
711 if (icloud == 3)
then
713 & tracer1,xlat,xlon,slmsk,dz,delp, &
714 & ntrac-1, ntcw-1,ntiw-1,ntrw-1, &
716 & ix, lm, nlp1, uni_cld, lmfshal, lmfdeep2, &
717 & cldcov(:,1:lm), effrl, effri, effrs, &
718 & lwp_ex, iwp_ex, lwp_fc, iwp_fc, &
719 & dzlay, gridkm, top_at_1, &
721 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
722 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
730 cld_frac(i,k) = clouds1(i,k)
736 call progclduni (plyr, plvl, tlyr, tvly, ccnd, ncndl, &
737 & xlat, xlon, slmsk, dz, delp, ix, nlay, nlp1, &
739 & effrl, effri, effrr, effrs, effr_in , &
741 & cldtot, cldcnv, lcrick, lcnorm, con_ttp, &
742 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
743 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
750 if (icloud == 3)
then
752 & tracer1,xlat,xlon,slmsk,dz,delp, &
753 & ntrac-1, ntcw-1,ntiw-1,ntrw-1, &
755 & ix, lm, nlp1, uni_cld, lmfshal, lmfdeep2, &
756 & cldcov(:,1:lm), effrl, effri, effrs, &
757 & lwp_ex, iwp_ex, lwp_fc, iwp_fc, &
758 & dzlay, gridkm, top_at_1, &
760 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
761 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
766 & rhly,tracer1,xlat,xlon,slmsk,dz,delp, &
767 & ntrac-1, ntcw-1,ntiw-1,ntrw-1, &
768 & ntsw-1,ntgl-1,con_ttp,xr_cnvcld, &
769 & ix, nlay, nlp1, xr_con, xr_exp, uni_cld, &
770 & lmfshal, lmfdeep2, &
771 & cldcov(:,1:nlay), cnvw, effrl, effri, effrs, &
772 & lwp_ex, iwp_ex, lwp_fc, iwp_fc, &
774 & cldtot, cldcnv, lcnorm, &
775 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
776 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
789 rxlat(i) = abs( xlat(i) / con_pi )
794 tem1 = ptopc(id,2) - ptopc(id,1)
797 ptop1(i,id) = ptopc(id,1) + tem1*max( 0.0, 4.0*rxlat(i)-1.0 )
802 if (idcor == idcor_hogan)
then
805 if (idcor == idcor_oreopoulos)
then
808 if (idcor == idcor_con)
then
809 de_lgth(:) = dcorr_con
813 if ( iovr == iovr_dcorr .or. iovr == iovr_exp &
814 & .or. iovr == iovr_exprand)
then
815 call get_alpha_exper(ix, nlay, iovr, iovr_exprand, dzlay, &
816 & de_lgth, cld_frac, alpha)
833 & ( plyr, ptop1, cldtot, cldcnv, dz, de_lgth, alpha, &
834 & ix, nlay, iovr, iovr_rand, iovr_maxrand, iovr_max, &
835 & iovr_dcorr, iovr_exp, iovr_exprand, top_at_1, si, &
849 & ( plyr,plvl,tlyr,tvly,qlyr,qstl,rhly,clw,cnvw,cnvc, &
850 & xlat,xlon,slmsk,cldtot, dz, delp, &
852 & dzlay, cldtot1, cldcnv, lcrick, lcnorm, con_ttp, &
853 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
854 & cld_reice,cld_rwp, cld_rerain,cld_swp, cld_resnow &
922 integer,
intent(in) :: ix, nlay, nlp1
923 logical,
intent(in) :: lcrick, lcnorm
924 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plvl, plyr, &
925 & tlyr, tvly, qlyr, qstl, rhly, clw, cldtot, cnvw, cnvc, &
927 real (kind=kind_phys) :: con_ttp
929 real (kind=kind_phys),
dimension(:),
intent(in) :: xlat, xlon, &
932 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: cldtot1
936 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
937 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
938 & cld_rwp, cld_rerain, cld_swp, cld_resnow
941 real (kind=kind_phys),
dimension(IX,NLAY) :: cldcnv, &
942 & cwp, cip, crp, csp, rew, rei, res, rer, tem2d, clwf
944 real (kind=kind_phys) :: clwmin, clwm, clwt, onemrh,
value, &
947 integer :: i, k, id, nf
964 tem2d(i,k) = min( 1.0, max( 0.0, (con_ttp-tlyr(i,k))*0.05 ) )
971 clwf(i,1) = 0.75*clw(i,1) + 0.25*clw(i,2)
972 clwf(i,nlay) = 0.75*clw(i,nlay) + 0.25*clw(i,nlay-1)
976 clwf(i,k) = 0.25*clw(i,k-1) + 0.5*clw(i,k) + 0.25*clw(i,k+1)
991 clwt = max(0.0,(clwf(i,k)+cnvw(i,k))) * gfac * delp(i,k)
992 cip(i,k) = clwt * tem2d(i,k)
993 cwp(i,k) = clwt - cip(i,k)
1000 if (nint(slmsk(i)) == 1)
then
1002 rew(i,k) = 5.0 + 5.0 * tem2d(i,k)
1009 if (cldtot(i,k) < climit)
then
1021 if (cldtot(i,k) >= climit)
then
1022 tem1 = 1.0 / max(climit2, cldtot(i,k))
1023 cwp(i,k) = cwp(i,k) * tem1
1024 cip(i,k) = cip(i,k) * tem1
1025 crp(i,k) = crp(i,k) * tem1
1026 csp(i,k) = csp(i,k) * tem1
1037 tem2 = tlyr(i,k) - con_ttp
1039 if (cip(i,k) > 0.0)
then
1040 tem3 = gord * cip(i,k) * plyr(i,k) / (delp(i,k)*tvly(i,k))
1042 if (tem2 < -50.0)
then
1043 rei(i,k) = (1250.0/9.917) * tem3 ** 0.109
1044 elseif (tem2 < -40.0)
then
1045 rei(i,k) = (1250.0/9.337) * tem3 ** 0.08
1046 elseif (tem2 < -30.0)
then
1047 rei(i,k) = (1250.0/9.208) * tem3 ** 0.055
1049 rei(i,k) = (1250.0/9.387) * tem3 ** 0.031
1053 rei(i,k) = max(10.0, min(rei(i,k), 150.0))
1061 cldtot1(i,k) = cldtot(i,k)
1068 cld_frac(i,k) = cldtot(i,k)
1069 cld_lwp(i,k) = cwp(i,k)
1070 cld_reliq(i,k) = rew(i,k)
1071 cld_iwp(i,k) = cip(i,k)
1072 cld_reice(i,k) = rei(i,k)
1074 cld_rerain(i,k) = rer(i,k)
1076 cld_resnow(i,k) = res(i,k)
1088 & ( plyr,plvl,tlyr,tvly,qlyr,qstl,rhly,clw, &
1089 & xlat,xlon,slmsk,dz,delp, &
1090 & ntrac,ntcw,ntiw,ntrw, &
1091 & ix, nlay, nlp1, icloud, xr_con, xr_exp, &
1092 & uni_cld, lmfshal, lmfdeep2, cldcov, &
1093 & re_cloud,re_ice,re_snow, &
1094 & dzlay, cldtot, cldcnv, lcnorm, &
1095 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
1096 & cld_reice,cld_rwp, cld_rerain,cld_swp, cld_resnow &
1169 integer,
intent(in) :: ix, nlay, nlp1, icloud
1170 integer,
intent(in) :: ntrac, ntcw, ntiw, ntrw
1172 logical,
intent(in) :: uni_cld, lmfshal, lmfdeep2, lcnorm
1174 real (kind=kind_phys),
intent(in) :: xr_con, xr_exp
1175 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plvl, plyr, &
1176 & tlyr, tvly, qlyr, qstl, rhly, cldcov, delp, dz, dzlay
1178 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
1179 & re_cloud, re_ice, re_snow
1181 real (kind=kind_phys),
dimension(:,:,:),
intent(in) :: clw
1183 real (kind=kind_phys),
dimension(:),
intent(in) :: xlat, xlon, &
1188 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
1189 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
1190 & cld_rwp, cld_rerain, cld_swp, cld_resnow
1193 real (kind=kind_phys),
dimension(IX,NLAY) :: cldtot, cldcnv, &
1194 & cwp, cip, crp, csp, rew, rei, res, rer, tem2d, clwf
1196 real (kind=kind_phys) :: clwmin, clwm, clwt, onemrh,
value, &
1199 real (kind=kind_phys) :: xrc3
1201 integer :: i, k, id, nf
1214 rew(i,k) = re_cloud(i,k)
1215 rei(i,k) = re_ice(i,k)
1216 rer(i,k) = rrain_def
1217 res(i,k) = re_snow(i,k)
1243 clwf(i,k) = clw(i,k,ntcw) + clw(i,k,ntiw)
1251 cwp(i,k) = max(0.0, clw(i,k,ntcw) * gfac * delp(i,k))
1252 cip(i,k) = max(0.0, clw(i,k,ntiw) * gfac * delp(i,k))
1253 crp(i,k) = max(0.0, clw(i,k,ntrw) * gfac * delp(i,k))
1263 cldtot(i,k) = cldcov(i,k)
1271 if (.not. lmfshal)
then
1276 & rhly(i,k), clwf(i,k), xrc3, xr_exp, 0.)
1281 if (lmfdeep2) xrc3 = xr_con
1285 & rhly(i,k), clwf(i,k), xrc3, xr_exp, 0.)
1294 if (cldtot(i,k) < climit)
then
1307 if (cldtot(i,k) >= climit)
then
1308 tem1 = 1.0 / max(climit2, cldtot(i,k))
1309 cwp(i,k) = cwp(i,k) * tem1
1310 cip(i,k) = cip(i,k) * tem1
1311 crp(i,k) = crp(i,k) * tem1
1312 csp(i,k) = csp(i,k) * tem1
1320 cld_frac(i,k) = cldtot(i,k)
1321 cld_lwp(i,k) = cwp(i,k)
1322 cld_reliq(i,k) = rew(i,k)
1323 cld_iwp(i,k) = cip(i,k)
1324 cld_reice(i,k) = rei(i,k)
1325 cld_rwp(i,k) = crp(i,k)
1326 cld_rerain(i,k) = rer(i,k)
1328 cld_resnow(i,k) = 10.0
1329 re_cloud(i,k) = rew(i,k)
1330 re_ice(i,k) = rei(i,k)
1342 & ( plyr,plvl,tlyr,qlyr,qstl,rhly,clw, &
1343 & xlat,xlon,slmsk,dz,delp, &
1344 & ntrac,ntcw,ntiw,ntrw,ntsw,ntgl,con_ttp, &
1345 & xr_cnvcld, ix, nlay, nlp1, xr_con, xr_exp, &
1346 & uni_cld, lmfshal, lmfdeep2, cldcov, cnvw, &
1347 & re_cloud,re_ice,re_snow, &
1348 & lwp_ex, iwp_ex, lwp_fc, iwp_fc, &
1349 & dzlay, cldtot, cldcnv, lcnorm, &
1350 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
1351 & cld_reice,cld_rwp, cld_rerain,cld_swp, cld_resnow &
1429 integer,
intent(in) :: ix, nlay, nlp1
1430 integer,
intent(in) :: ntrac, ntcw, ntiw, ntrw, ntsw, ntgl
1432 logical,
intent(in) :: uni_cld, lmfshal, lmfdeep2, lcnorm, &
1435 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plvl, plyr, &
1436 & tlyr, qlyr, qstl, rhly, cldcov, delp, dz, dzlay, &
1437 & re_cloud, re_ice, re_snow, cnvw
1438 real (kind=kind_phys),
dimension(:),
intent(inout) :: &
1439 & lwp_ex, iwp_ex, lwp_fc, iwp_fc
1441 real (kind=kind_phys),
dimension(:,:,:),
intent(in) :: clw
1443 real (kind=kind_phys),
dimension(:),
intent(in) :: xlat, xlon, &
1445 real (kind=kind_phys),
intent(in) :: con_ttp, xr_con, xr_exp
1448 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
1449 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
1450 & cld_rwp, cld_rerain, cld_swp, cld_resnow
1453 real (kind=kind_phys),
dimension(IX,NLAY) :: cldtot, cldcnv, &
1454 & cwp, cip, crp, csp, rew, rei, res, rer, tem2d, clwf
1456 real (kind=kind_phys) :: clwmin, clwm, clwt, onemrh,
value, &
1459 real (kind=kind_phys) :: xrc3
1461 integer :: i, k, id, nf
1463 logical :: cond_cfrac_onrh
1466 real (kind=kind_phys),
parameter :: snow2ice = 0.25
1467 real (kind=kind_phys),
parameter :: coef_t = 0.025
1479 rew(i,k) = re_cloud(i,k)
1480 rei(i,k) = re_ice(i,k)
1481 rer(i,k) = rrain_def
1482 res(i,k) = re_snow(i,k)
1483 tem2d(i,k) = min(1.0, max( 0.0, (con_ttp-tlyr(i,k))*coef_t))
1513 clwf(i,k) = clw(i,k,ntcw) + clw(i,k,ntiw) + clw(i,k,ntsw)
1514 & + clw(i,k,ntrw) + cnvw(i,k)
1520 clwf(i,k) = clw(i,k,ntcw) + clw(i,k,ntiw) + clw(i,k,ntsw)
1531 tem1 = cnvw(i,k)*(1.-tem2d(i,k))
1535 cwp(i,k) = max(0.0, (clw(i,k,ntcw)+tem1) *
1537 if(tem1 > 1.e-12 .and. clw(i,k,ntcw) < 1.e-12)
1538 & rew(i,k)=reliq_def
1540 tem2 = cnvw(i,k)*tem2d(i,k)
1544 cip(i,k) = max(0.0, (clw(i,k,ntiw) +
1545 & snow2ice*clw(i,k,ntsw) + tem2) *
1547 if(tem2 > 1.e-12 .and. clw(i,k,ntiw) < 1.e-12)
then
1548 if(nint(slmsk(i))==1)
then
1554 crp(i,k) = max(0.0, clw(i,k,ntrw) * gfac * delp(i,k))
1555 csp(i,k) = max(0.0, (1.-snow2ice)*clw(i,k,ntsw) *
1568 lwp_ex(i) = lwp_ex(i) + cwp(i,k)
1569 iwp_ex(i) = iwp_ex(i) + cip(i,k) + csp(i,k)
1571 lwp_ex(i) = lwp_ex(i)*1.e-3
1572 iwp_ex(i) = iwp_ex(i)*1.e-3
1578 cldtot(i,k) = cldcov(i,k)
1586 if (.not. lmfshal)
then
1591 & rhly(i,k), clwf(i,k), xrc3, xr_exp, 0.)
1596 if (lmfdeep2) xrc3 = xr_con
1597 cond_cfrac_onrh = .true.
1601 & rhly(i,k), clwf(i,k), xrc3, xr_exp, 0., &
1611 if (cldtot(i,k) < climit)
then
1625 if (cldtot(i,k).ge.climit .and. cldtot(i,k).lt.ovcst)
then
1626 lwp_fc(i) = lwp_fc(i) + cwp(i,k)
1627 iwp_fc(i) = iwp_fc(i) + cip(i,k) + csp(i,k)
1630 lwp_fc(i) = lwp_fc(i)*1.e-3
1631 iwp_fc(i) = iwp_fc(i)*1.e-3
1637 if (cldtot(i,k) >= climit)
then
1638 tem1 = 1.0 / max(climit2, cldtot(i,k))
1639 cwp(i,k) = cwp(i,k) * tem1
1640 cip(i,k) = cip(i,k) * tem1
1641 crp(i,k) = crp(i,k) * tem1
1642 csp(i,k) = csp(i,k) * tem1
1650 cld_frac(i,k) = cldtot(i,k)
1651 cld_lwp(i,k) = cwp(i,k)
1652 cld_reliq(i,k) = rew(i,k)
1653 cld_iwp(i,k) = cip(i,k)
1654 cld_reice(i,k) = rei(i,k)
1655 cld_rwp(i,k) = crp(i,k)
1656 cld_rerain(i,k) = rer(i,k)
1657 cld_swp(i,k) = csp(i,k)
1658 cld_resnow(i,k) = res(i,k)
1678 & ( plyr,plvl,tlyr,qlyr,qstl,rhly,clw, &
1679 & xlat,xlon,slmsk,dz,delp, &
1680 & ntrac,ntcw,ntiw,ntrw,ntsw,ntgl, &
1682 & uni_cld, lmfshal, lmfdeep2, cldcov, &
1683 & re_cloud,re_ice,re_snow, &
1684 & lwp_ex, iwp_ex, lwp_fc, iwp_fc, &
1685 & dzlay, gridkm, top_at_1, cldtot, cldcnv, &
1686 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
1687 & cld_reice,cld_rwp, cld_rerain,cld_swp, cld_resnow &
1761 integer,
intent(in) :: ix, nlay, nlp1
1762 integer,
intent(in) :: ntrac, ntcw, ntiw, ntrw, ntsw, ntgl
1764 logical,
intent(in) :: uni_cld, lmfshal, lmfdeep2, top_at_1
1766 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plvl, plyr, &
1767 & tlyr, qlyr, qstl, rhly, cldcov, delp, dz, dzlay, &
1768 & re_cloud, re_ice, re_snow
1769 real (kind=kind_phys),
dimension(:),
intent(inout) :: &
1770 & lwp_ex, iwp_ex, lwp_fc, iwp_fc
1772 real (kind=kind_phys),
dimension(:,:,:),
intent(in) :: clw
1774 real (kind=kind_phys),
dimension(:),
intent(in) :: xlat, xlon, &
1776 real(kind=kind_phys),
dimension(:),
intent(in) :: gridkm
1780 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
1781 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
1782 & cld_rwp, cld_rerain, cld_swp, cld_resnow
1785 real (kind=kind_phys),
dimension(IX,NLAY) :: cldtot, cldcnv, &
1786 & cwp, cip, crp, csp, rew, rei, res, rer
1788 real (kind=kind_phys),
dimension(NLAY) :: cldfra1d, qv1d, &
1789 & qc1d, qi1d, qs1d, dz1d, p1d, t1d
1791 real (kind=kind_phys) :: clwmin, tem1
1792 real (kind=kind_phys) :: corr, xland, snow_mass_factor
1793 real (kind=kind_phys),
parameter :: max_relh = 1.5
1794 real (kind=kind_phys),
parameter :: snow_max_radius = 130.0
1796 integer :: i, k, k2, id, nf, idx_rei
1811 rew(i,k) = re_cloud(i,k)
1812 rei(i,k) = re_ice(i,k)
1813 rer(i,k) = rrain_def
1814 res(i,k) = re_snow(i,k)
1824 cwp(i,k) = max(0.0, clw(i,k,ntcw) * dz(i,k)*1.e6)
1826 snow_mass_factor = 0.90
1827 cip(i,k) = max(0.0, (clw(i,k,ntiw) &
1828 & + (1.0-snow_mass_factor)*clw(i,k,ntsw))*dz(i,k)*1.e6)
1829 if (re_snow(i,k) .gt. snow_max_radius)
then
1830 snow_mass_factor = min(snow_mass_factor, &
1831 & (snow_max_radius/re_snow(i,k)) &
1832 & *(snow_max_radius/re_snow(i,k)))
1833 res(i,k) = snow_max_radius
1835 csp(i,k) = max(0.,snow_mass_factor*clw(i,k,ntsw)*dz(i,k)*1.e6)
1845 lwp_ex(i) = lwp_ex(i) + cwp(i,k)
1846 iwp_ex(i) = iwp_ex(i) + cip(i,k) + csp(i,k)
1860 if (slmsk(i)-0.5 .gt. 0.5 .and. slmsk(i)+0.5 .lt. 1.5)
then
1868 if (.not. top_at_1)
then
1871 qc1d(k) = max(0.0, clw(i,k,ntcw))
1872 qi1d(k) = max(0.0, clw(i,k,ntiw))
1873 qs1d(k) = max(0.0, clw(i,k,ntsw))
1874 dz1d(k) = dz(i,k)*1.e3
1875 p1d(k) = plyr(i,k)*100.0
1881 qv1d(k2) = qlyr(i,k)
1882 qc1d(k2) = max(0.0, clw(i,k,ntcw))
1883 qi1d(k2) = max(0.0, clw(i,k,ntiw))
1884 qs1d(k2) = max(0.0, clw(i,k,ntsw))
1885 dz1d(k2) = dz(i,k)*1.e3
1886 p1d(k2) = plyr(i,k)*100.0
1891 call cal_cldfra3(cldfra1d, qv1d, qc1d, qi1d, qs1d, dz1d, &
1892 & p1d, t1d, xland, gridkm(i), &
1893 & .false., max_relh, 1, nlay, .false.)
1896 cldtot(i,k) = cldfra1d(k)
1897 if (qc1d(k).gt.clwmin .and. cldfra1d(k).lt.ovcst)
then
1898 cwp(i,k) = qc1d(k) * dz1d(k)*1000.
1899 if ((xland-1.5).GT.0.)
then
1905 if (qi1d(k).gt.clwmin .and. cldfra1d(k).lt.ovcst)
then
1906 cip(i,k) = qi1d(k) * dz1d(k)*1000.
1907 idx_rei = int(t1d(k)-179.)
1908 idx_rei = min(max(idx_rei,1),75)
1909 corr = t1d(k) - int(t1d(k))
1910 rei(i,k) = max(5.0, retab(idx_rei)*(1.-corr) + &
1911 & retab(idx_rei+1)*corr)
1918 cld_frac(i,k) = cldtot(i,k)
1919 cld_lwp(i,k) = cwp(i,k)
1920 cld_reliq(i,k) = rew(i,k)
1921 cld_iwp(i,k) = cip(i,k)
1922 cld_reice(i,k) = rei(i,k)
1923 cld_rwp(i,k) = crp(i,k)
1924 cld_rerain(i,k) = rer(i,k)
1925 cld_swp(i,k) = csp(i,k)
1926 cld_resnow(i,k) = res(i,k)
1936 lwp_fc(i) = lwp_fc(i) + cwp(i,k)
1937 iwp_fc(i) = iwp_fc(i) + cip(i,k) + csp(i,k)
1939 lwp_fc(i) = max(0.0, lwp_fc(i) - lwp_ex(i))
1940 iwp_fc(i) = max(0.0, iwp_fc(i) - iwp_ex(i))
1941 lwp_fc(i) = lwp_fc(i)*1.e-3
1942 iwp_fc(i) = iwp_fc(i)*1.e-3
1943 lwp_ex(i) = lwp_ex(i)*1.e-3
1944 iwp_ex(i) = iwp_ex(i)*1.e-3
1958 & ( plyr,plvl,tlyr,tvly,ccnd,ncnd, &
1959 & xlat,xlon,slmsk,dz,delp, ix, nlay, nlp1, cldtot, &
1960 & effrl,effri,effrr,effrs,effr_in, &
1961 & dzlay, cldtot1, cldcnv, lcrick, lcnorm, con_ttp, &
1962 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
1963 & cld_reice,cld_rwp, cld_rerain,cld_swp, cld_resnow &
2045 integer,
intent(in) :: ix, nlay, nlp1, ncnd
2046 logical,
intent(in) :: effr_in, lcrick, lcnorm
2048 real (kind=kind_phys),
intent(in) :: con_ttp
2049 real (kind=kind_phys),
dimension(:,:,:),
intent(in) :: ccnd
2050 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plvl, plyr,&
2051 & tlyr, tvly, cldtot, effrl, effri, effrr, effrs, dz, delp, &
2054 real (kind=kind_phys),
dimension(:),
intent(in) :: xlat, xlon, &
2057 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: cldtot1
2061 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
2062 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
2063 & cld_rwp, cld_rerain, cld_swp, cld_resnow
2066 real (kind=kind_phys),
dimension(IX,NLAY) :: cldcnv, cwp, cip, &
2067 & crp, csp, rew, rei, res, rer
2068 real (kind=kind_phys),
dimension(IX,NLAY,ncnd) :: cndf
2070 real (kind=kind_phys) :: tem1, tem2, tem3
2072 integer :: i, k, id, nf, n
2089 cndf(i,k,n) = ccnd(i,k,n)
2096 cndf(i,1,n) = 0.75*ccnd(i,1,n) + 0.25*ccnd(i,2,n)
2097 cndf(i,nlay,n) = 0.75*ccnd(i,nlay,n) + 0.25*ccnd(i,nlay-1,n)
2101 cndf(i,k,n) = 0.25 * (ccnd(i,k-1,n) + ccnd(i,k+1,n)) &
2102 & + 0.5 * ccnd(i,k,n)
2113 tem1 = gfac * delp(i,k)
2114 cwp(i,k) = cndf(i,k,1) * tem1
2115 cip(i,k) = cndf(i,k,2) * tem1
2118 elseif (ncnd == 4)
then
2121 tem1 = gfac * delp(i,k)
2122 cwp(i,k) = cndf(i,k,1) * tem1
2123 cip(i,k) = cndf(i,k,2) * tem1
2124 crp(i,k) = cndf(i,k,3) * tem1
2125 csp(i,k) = cndf(i,k,4) * tem1
2132 if (cldtot(i,k) < climit)
then
2144 if (cldtot(i,k) >= climit)
then
2145 tem1 = 1.0 / max(climit2, cldtot(i,k))
2146 cwp(i,k) = cwp(i,k) * tem1
2147 cip(i,k) = cip(i,k) * tem1
2148 crp(i,k) = crp(i,k) * tem1
2149 csp(i,k) = csp(i,k) * tem1
2160 rew(i,k) = effrl(i,k)
2161 rei(i,k) = max(10.0, min(150.0,effri(i,k)))
2162 rer(i,k) = effrr(i,k)
2163 res(i,k) = effrs(i,k)
2169 rew(i,k) = reliq_def
2170 rei(i,k) = reice_def
2171 rer(i,k) = rrain_def
2172 res(i,k) = rsnow_def
2177 if (nint(slmsk(i)) == 1)
then
2179 tem1 = min(1.0, max(0.0, (con_ttp-tlyr(i,k))*0.05))
2180 rew(i,k) = 5.0 + 5.0 * tem1
2190 tem2 = tlyr(i,k) - con_ttp
2192 if (cip(i,k) > 0.0)
then
2193 tem3 = gord * cip(i,k) * plyr(i,k) / (delp(i,k)*tvly(i,k))
2195 if (tem2 < -50.0)
then
2196 rei(i,k) = (1250.0/9.917) * tem3 ** 0.109
2197 elseif (tem2 < -40.0)
then
2198 rei(i,k) = (1250.0/9.337) * tem3 ** 0.08
2199 elseif (tem2 < -30.0)
then
2200 rei(i,k) = (1250.0/9.208) * tem3 ** 0.055
2202 rei(i,k) = (1250.0/9.387) * tem3 ** 0.031
2206 rei(i,k) = max(10.0, min(rei(i,k), 150.0))
2215 cldtot1(i,k) = cldtot(i,k)
2221 cld_frac(i,k) = cldtot(i,k)
2222 cld_lwp(i,k) = cwp(i,k)
2223 cld_reliq(i,k) = rew(i,k)
2224 cld_iwp(i,k) = cip(i,k)
2225 cld_reice(i,k) = rei(i,k)
2226 cld_rwp(i,k) = crp(i,k)
2227 cld_rerain(i,k) = rer(i,k)
2228 cld_swp(i,k) = csp(i,k)
2229 cld_resnow(i,k) = res(i,k)
2264 & ( plyr, ptop1, cldtot, cldcnv, dz, de_lgth, alpha, &
2265 & ix, nlay, iovr, iovr_rand, iovr_maxrand, iovr_max, &
2266 & iovr_dcorr, iovr_exp, iovr_exprand, top_at_1, si, &
2267 & clds, mtop, mbot &
2319 logical,
intent(in) :: top_at_1
2320 integer,
intent(in) :: ix, nlay
2321 integer,
intent(in) :: &
2330 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plyr, ptop1, &
2331 & cldtot, cldcnv, dz
2332 real (kind=kind_phys),
dimension(:),
intent(in) :: de_lgth, si
2333 real (kind=kind_phys),
dimension(:,:),
intent(in) :: alpha
2336 real (kind=kind_phys),
dimension(:,:),
intent(out) :: clds
2338 integer,
dimension(:,:),
intent(out) :: mtop, mbot
2341 real (kind=kind_phys) :: cl1(ix), cl2(ix), dz1(ix)
2342 real (kind=kind_phys) :: pcur, pnxt, ccur, cnxt, alfa
2344 integer,
dimension(IX):: idom, kbt1, kth1, kbt2, kth2
2345 integer :: i, k, id, id1, kstr, kend, kinc,kl
2355 lab_do_k0 :
do k = nlay, 2, -1
2357 if (si(k) < 0.9e0)
exit lab_do_k0
2361 lab_do_k1 :
do k = 2, nlay
2363 if (si(k) < 0.9e0)
exit lab_do_k1
2392 if ( iovr == iovr_rand )
then
2394 do k = kstr, kend, kinc
2396 ccur = min( ovcst, max( cldtot(i,k), cldcnv(i,k) ))
2397 if (ccur >= climit) cl1(i) = cl1(i) * (1.0 - ccur)
2402 clds(i,5) = 1.0 - cl1(i)
2408 clds(i,4) = 1.0 - cl1(i)
2411 elseif ( iovr == iovr_maxrand )
then
2413 do k = kstr, kend, kinc
2415 ccur = min( ovcst, max( cldtot(i,k), cldcnv(i,k) ))
2416 if (ccur >= climit)
then
2417 cl2(i) = min( cl2(i), (1.0 - ccur) )
2419 cl1(i) = cl1(i) * cl2(i)
2426 clds(i,5) = 1.0 - cl1(i) * cl2(i)
2432 clds(i,4) = 1.0 - cl1(i) * cl2(i)
2435 elseif ( iovr == iovr_max )
then
2439 do k = kstr, kend, kinc
2441 ccur = min( ovcst, max( cldtot(i,k), cldcnv(i,k) ))
2442 if (ccur >= climit) cl1(i) = max( cl1(i), ccur )
2456 elseif ( iovr == iovr_dcorr )
then
2459 dz1(i) = - dz(i,kstr)
2462 do k = kstr, kend, kinc
2464 ccur = min( ovcst, max( cldtot(i,k), cldcnv(i,k) ))
2465 if (ccur >= climit)
then
2466 alfa = exp( -0.5*((dz1(i)+dz(i,k)))/de_lgth(i) )
2468 cl2(i) = alfa * min(cl2(i), (1.0 - ccur)) &
2469 & + (1.0 - alfa) * (cl2(i) * (1.0 - ccur))
2471 cl1(i) = cl1(i) * cl2(i)
2473 if (k /= kend) dz1(i) = -dz(i,k+kinc)
2479 clds(i,5) = 1.0 - cl1(i) * cl2(i)
2485 clds(i,4) = 1.0 - cl1(i) * cl2(i)
2488 elseif ( iovr == iovr_exp .or. iovr == iovr_exprand )
then
2492 do k = kstr, kend, kinc
2494 ccur = min( ovcst, max( cldtot(i,k), cldcnv(i,k) ))
2495 if (ccur >= climit)
then
2496 cl2(i) = alpha(i,k) * min(cl2(i), (1.0 - ccur)) &
2497 & + (1.0 - alpha(i,k)) * (cl2(i) * (1.0 - ccur))
2499 cl1(i) = cl1(i) * cl2(i)
2506 clds(i,5) = 1.0 - cl1(i) * cl2(i)
2512 clds(i,4) = 1.0 - cl1(i) * cl2(i)
2536 mbot(i,2) = nlay - 1
2537 mtop(i,2) = nlay - 1
2538 mbot(i,3) = nlay - 1
2539 mtop(i,3) = nlay - 1
2549 ccur = min( ovcst, max( cldtot(i,k), cldcnv(i,k) ))
2553 cnxt = min( ovcst, max( cldtot(i,k-1), cldcnv(i,k-1) ))
2559 if (pcur < ptop1(i,id1))
then
2565 if (ccur >= climit)
then
2566 if (kth2(i) == 0) kbt2(i) = k
2567 kth2(i) = kth2(i) + 1
2569 if ( iovr == iovr_rand )
then
2570 cl2(i) = cl2(i) + ccur - cl2(i)*ccur
2572 cl2(i) = max( cl2(i), ccur )
2575 if (cnxt < climit .or. pnxt < ptop1(i,id1))
then
2576 kbt1(i) = nint( (cl1(i)*kbt1(i) + cl2(i)*kbt2(i) ) &
2577 & / (cl1(i) + cl2(i)) )
2578 kth1(i) = nint( (cl1(i)*kth1(i) + cl2(i)*kth2(i) ) &
2579 & / (cl1(i) + cl2(i)) )
2580 cl1(i) = cl1(i) + cl2(i) - cl1(i)*cl2(i)
2588 if (pnxt < ptop1(i,id1))
then
2590 mtop(i,id) = min( kbt1(i), kbt1(i)-kth1(i)+1 )
2591 mbot(i,id) = kbt1(i)
2598 mbot(i,id1) = kbt1(i)
2599 mtop(i,id1) = kbt1(i)
2631 ccur = min( ovcst, max( cldtot(i,k), cldcnv(i,k) ))
2635 cnxt = min( ovcst, max( cldtot(i,k+1), cldcnv(i,k+1) ))
2641 if (pcur < ptop1(i,id1))
then
2647 if (ccur >= climit)
then
2648 if (kth2(i) == 0) kbt2(i) = k
2649 kth2(i) = kth2(i) + 1
2651 if ( iovr == iovr_rand )
then
2652 cl2(i) = cl2(i) + ccur - cl2(i)*ccur
2654 cl2(i) = max( cl2(i), ccur )
2657 if (cnxt < climit .or. pnxt < ptop1(i,id1))
then
2658 kbt1(i) = nint( (cl1(i)*kbt1(i) + cl2(i)*kbt2(i)) &
2659 & / (cl1(i) + cl2(i)) )
2660 kth1(i) = nint( (cl1(i)*kth1(i) + cl2(i)*kth2(i)) &
2661 & / (cl1(i) + cl2(i)) )
2662 cl1(i) = cl1(i) + cl2(i) - cl1(i)*cl2(i)
2670 if (pnxt < ptop1(i,id1))
then
2672 mtop(i,id) = max( kbt1(i), kbt1(i)+kth1(i)-1 )
2673 mbot(i,id) = kbt1(i)
2676 kbt1(i) = min(k+1, nlay)
2680 mbot(i,id1) = kbt1(i)
2681 mtop(i,id1) = kbt1(i)
subroutine, public radiation_clouds_prop(plyr, plvl, tlyr, tvly, qlyr, qstl, rhly, ccnd, ncndl, cnvw, cnvc, tracer1, xlat, xlon, slmsk, dz, delp, ix, lm, nlay, nlp1, deltaq, sup, dcorr_con, me, icloud, kdt, ntrac, ntcw, ntiw, ntrw, ntsw, ntgl, ntclamt, imp_physics, imp_physics_nssl, imp_physics_fer_hires, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, imp_physics_tempo, imp_physics_mg, iovr, iovr_rand, iovr_maxrand, iovr_max, iovr_dcorr, iovr_exp, iovr_exprand, idcor, idcor_con, idcor_hogan, idcor_oreopoulos, lcrick, lcnorm, imfdeepcnv, imfdeepcnv_gf, imfdeepcnv_c3, do_mynnedmf, lgfdlmprad, xr_cnvcld, uni_cld, lmfshal, lmfdeep2, cldcov, clouds1, effrl, effri, effrr, effrs, effr_in, effrl_inout, effri_inout, effrs_inout, lwp_ex, iwp_ex, lwp_fc, iwp_fc, dzlay, latdeg, julian, yearlen, gridkm, top_at_1, si, xr_con, xr_exp, con_ttp, con_pi, con_g, con_rd, con_thgni, cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, cld_rwp, cld_rerain, cld_swp, cld_resnow, clds, mtop, mbot, de_lgth, alpha)
Subroutine radiation_clouds_prop computes cloud related quantities for different cloud microphysics s...