341 & ( plyr, plvl, tlyr, tvly, qlyr, qstl, rhly, &
342 & ccnd, ncndl, cnvw, cnvc, tracer1, &
343 & xlat, xlon, slmsk, dz, delp, ix, lm, nlay, nlp1, &
344 & deltaq, sup, dcorr_con, me, icloud, kdt, &
345 & ntrac, ntcw, ntiw, ntrw, ntsw, ntgl, ntclamt, &
346 & imp_physics, imp_physics_nssl, imp_physics_fer_hires, &
347 & imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, &
348 & imp_physics_tempo, &
349 & imp_physics_zhao_carr, imp_physics_zhao_carr_pdf, &
350 & imp_physics_mg, iovr, iovr_rand, iovr_maxrand, iovr_max, &
351 & iovr_dcorr, iovr_exp, iovr_exprand, idcor, idcor_con, &
352 & idcor_hogan, idcor_oreopoulos, lcrick, lcnorm, &
353 & imfdeepcnv, imfdeepcnv_gf, imfdeepcnv_c3, &
354 & do_mynnedmf, lgfdlmprad, xr_cnvcld, &
355 & uni_cld, lmfshal, lmfdeep2, cldcov, clouds1, &
356 & effrl, effri, effrr, effrs, effr_in, &
357 & effrl_inout, effri_inout, effrs_inout, &
358 & lwp_ex, iwp_ex, lwp_fc, iwp_fc, &
359 & dzlay, latdeg, julian, yearlen, gridkm, top_at_1, si, &
360 & xr_con, xr_exp, con_ttp, con_pi, con_g, con_rd, con_thgni, &
361 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
362 & cld_rwp, cld_rerain, cld_swp, cld_resnow, &
363 & clds, mtop, mbot, de_lgth, alpha &
513 integer,
intent(in) :: ix, lm, nlay, nlp1, me, ncndl, icloud
514 integer,
intent(in) :: ntrac, ntcw, ntiw, ntrw, ntsw, ntgl, &
516 integer,
intent(in) :: kdt, imfdeepcnv, imfdeepcnv_gf, &
518 integer,
intent(in) :: &
521 & imp_physics_fer_hires,
523 & imp_physics_thompson,
526 & imp_physics_zhao_carr,
527 & imp_physics_zhao_carr_pdf,
530 integer,
intent(in) :: &
544 logical,
intent(in) :: uni_cld, lmfshal, lmfdeep2, effr_in, &
545 & do_mynnedmf, lgfdlmprad, top_at_1, lcrick, lcnorm, &
548 real (kind=kind_phys),
dimension(:,:,:),
intent(in) :: ccnd, &
550 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plvl, plyr, &
551 & tlyr, tvly, qlyr, qstl, rhly, cnvw, cnvc, cldcov, &
552 & delp, dz, effrl, effri, effrr, effrs, dzlay, clouds1
554 real (kind=kind_phys),
intent(in) :: sup, dcorr_con, con_ttp, &
555 & con_pi, con_g, con_rd, con_thgni, xr_con, xr_exp
556 real (kind=kind_phys),
dimension(:),
intent(in) :: xlat, xlon, &
559 real(kind=kind_phys),
dimension(:),
intent(in) :: latdeg, gridkm
560 real(kind=kind_phys),
intent(in) :: julian
561 integer,
intent(in) :: yearlen
564 real(kind=kind_phys),
dimension(:,:) :: deltaq
565 real(kind=kind_phys),
dimension(:,:),
intent(inout) :: &
566 & effrl_inout, effri_inout, effrs_inout
567 real(kind=kind_phys),
dimension(:),
intent(inout) :: &
568 & lwp_ex, iwp_ex, lwp_fc, iwp_fc
572 real (kind=kind_phys),
dimension(:,:),
intent(out) :: &
573 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
574 & cld_rwp, cld_rerain, cld_swp, cld_resnow
575 real (kind=kind_phys),
dimension(:,:),
intent(out) :: clds
576 real (kind=kind_phys),
dimension(:),
intent(out) :: de_lgth
577 real (kind=kind_phys),
dimension(:,:),
intent(out) :: alpha
579 integer,
dimension(:,:),
intent(out) :: mtop,mbot
582 real (kind=kind_phys),
dimension(IX,NLAY) :: cldtot, cldcnv, &
583 & cwp, cip, crp, csp, rew, rei, res, rer, tem2d, clwf
585 real (kind=kind_phys) :: ptop1(ix,
nk_clds+1), rxlat(ix)
587 real (kind=kind_phys) :: clwmin, clwm, clwt, onemrh,
value, &
590 integer :: i, k, id, nf
595 if (me == 0 .and. kdt == 1)
then &
596 print*,
'in radiation_clouds_prop=', imp_physics, uni_cld, &
597 & ncndl, lgfdlmprad, do_mynnedmf, imfdeepcnv, kdt
608 cld_rerain(i,k) = 0.0
610 cld_resnow(i,k) = 0.0
621 if (imp_physics == imp_physics_zhao_carr .or. &
622 & imp_physics == imp_physics_mg)
then
625 if (uni_cld .and. ncndl >= 2)
then
626 call progclduni (plyr, plvl, tlyr, tvly, ccnd, ncndl, &
627 & xlat, xlon, slmsk, dz, delp, &
628 & ix, nlay, nlp1, cldcov, &
629 & effrl, effri, effrr, effrs, effr_in, &
631 & cldtot, cldcnv, lcrick, lcnorm, con_ttp, &
632 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
633 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
637 & qstl, rhly, ccnd(1:ix,1:nlay,1), xlat, xlon, &
638 & slmsk, dz, delp, ix, nlay, nlp1, uni_cld, &
639 & lmfshal, lmfdeep2, xr_con, xr_exp, &
640 & cldcov, effrl, effri, effrr, effrs, effr_in, &
642 & cldtot, cldcnv, lcrick, lcnorm, con_ttp, &
643 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
644 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
648 elseif(imp_physics == imp_physics_zhao_carr_pdf)
then
651 & qstl, rhly, ccnd(1:ix,1:nlay,1), cnvw, cnvc, &
652 & xlat, xlon, slmsk, dz, delp, ix, nlay, nlp1, &
653 & deltaq, sup, kdt, me, dzlay, &
654 & cldtot, cldcnv, lcrick, lcnorm, con_thgni, &
655 & con_ttp, cld_frac, cld_lwp, cld_reliq, cld_iwp, &
656 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
659 elseif (imp_physics == imp_physics_gfdl)
then
661 if (.not. lgfdlmprad)
then
663 & qstl, rhly, ccnd(1:ix,1:nlay,1), cnvw, cnvc, &
664 & xlat, xlon, slmsk, cldcov, dz, delp, &
665 & ix, nlay, nlp1, dzlay, &
666 & cldtot, cldcnv, lcrick, lcnorm, con_ttp, &
667 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
668 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
672 call progclduni (plyr, plvl, tlyr, tvly, ccnd, ncndl, xlat, &
673 & xlon, slmsk, dz,delp, ix, nlay, nlp1, cldcov, &
674 & effrl, effri, effrr, effrs, effr_in, &
676 & cldtot, cldcnv, lcrick, lcnorm, con_ttp, &
677 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
678 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
683 elseif(imp_physics == imp_physics_fer_hires)
then
685 effrl_inout(:,:) = 10.
686 effri_inout(:,:) = 50.
687 effrs_inout(:,:) = 250.
691 & tracer1,xlat,xlon,slmsk,dz,delp, &
692 & ntrac-1, ntcw-1,ntiw-1,ntrw-1, &
693 & ix,nlay,nlp1, icloud, xr_con, xr_exp, uni_cld,&
694 & lmfshal, lmfdeep2, &
695 & cldcov(:,1:nlay),effrl_inout(:,:), &
696 & effri_inout(:,:), effrs_inout(:,:), &
698 & cldtot, cldcnv, lcnorm, &
699 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
700 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
703 elseif ( imp_physics == imp_physics_nssl )
then
705 if(do_mynnedmf .or. imfdeepcnv == imfdeepcnv_gf .or. &
706 & imfdeepcnv == imfdeepcnv_c3)
then
711 cld_frac(i,k) = clouds1(i,k)
717 call progclduni (plyr, plvl, tlyr, tvly, ccnd, ncndl, &
718 & xlat, xlon, slmsk, dz, delp, ix, nlay, nlp1, &
720 & effrl, effri, effrr, effrs, effr_in , &
722 & cldtot, cldcnv, lcrick, lcnorm, con_ttp, &
723 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
724 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
729 & rhly,tracer1,xlat,xlon,slmsk,dz,delp, &
730 & ntrac-1, ntcw-1,ntiw-1,ntrw-1, &
731 & ntsw-1,ntgl-1,con_ttp,xr_cnvcld, &
732 & ix, nlay, nlp1, xr_con, xr_exp, uni_cld, &
733 & lmfshal, lmfdeep2, &
734 & cldcov(:,1:nlay), cnvw, effrl_inout, &
735 & effri_inout, effrs_inout, &
736 & lwp_ex, iwp_ex, lwp_fc, iwp_fc, &
738 & cldtot, cldcnv, lcnorm, &
739 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
740 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
744 elseif(imp_physics == imp_physics_thompson &
745 & .or. imp_physics == imp_physics_tempo)
then
747 if(do_mynnedmf .or. imfdeepcnv == imfdeepcnv_gf &
748 & .or. imfdeepcnv == imfdeepcnv_c3)
then
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, &
769 cld_frac(i,k) = clouds1(i,k)
775 call progclduni (plyr, plvl, tlyr, tvly, ccnd, ncndl, &
776 & xlat, xlon, slmsk, dz, delp, ix, nlay, nlp1, &
778 & effrl, effri, effrr, effrs, effr_in , &
780 & cldtot, cldcnv, lcrick, lcnorm, con_ttp, &
781 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
782 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
789 if (icloud == 3)
then
791 & tracer1,xlat,xlon,slmsk,dz,delp, &
792 & ntrac-1, ntcw-1,ntiw-1,ntrw-1, &
794 & ix, lm, nlp1, uni_cld, lmfshal, lmfdeep2, &
795 & cldcov(:,1:lm), effrl, effri, effrs, &
796 & lwp_ex, iwp_ex, lwp_fc, iwp_fc, &
797 & dzlay, gridkm, top_at_1, &
799 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
800 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
805 & rhly,tracer1,xlat,xlon,slmsk,dz,delp, &
806 & ntrac-1, ntcw-1,ntiw-1,ntrw-1, &
807 & ntsw-1,ntgl-1,con_ttp,xr_cnvcld, &
808 & ix, nlay, nlp1, xr_con, xr_exp, uni_cld, &
809 & lmfshal, lmfdeep2, &
810 & cldcov(:,1:nlay), cnvw, effrl, effri, effrs, &
811 & lwp_ex, iwp_ex, lwp_fc, iwp_fc, &
813 & cldtot, cldcnv, lcnorm, &
814 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
815 & cld_reice,cld_rwp, cld_rerain,cld_swp, &
828 rxlat(i) = abs( xlat(i) / con_pi )
836 ptop1(i,id) =
ptopc(id,1) + tem1*max( 0.0, 4.0*rxlat(i)-1.0 )
841 if (idcor == idcor_hogan)
then
844 if (idcor == idcor_oreopoulos)
then
847 if (idcor == idcor_con)
then
848 de_lgth(:) = dcorr_con
852 if ( iovr == iovr_dcorr .or. iovr == iovr_exp &
853 & .or. iovr == iovr_exprand)
then
854 call get_alpha_exper(ix, nlay, iovr, iovr_exprand, dzlay, &
855 & de_lgth, cld_frac, alpha)
872 & ( plyr, ptop1, cldtot, cldcnv, dz, de_lgth, alpha, &
873 & ix, nlay, iovr, iovr_rand, iovr_maxrand, iovr_max, &
874 & iovr_dcorr, iovr_exp, iovr_exprand, top_at_1, si, &
886 & ( plyr,plvl,tlyr,tvly,qlyr,qstl,rhly,clw, &
887 & xlat,xlon,slmsk,dz,delp, ix, nlay, nlp1, &
888 & uni_cld, lmfshal, lmfdeep2, xr_con, xr_exp, cldcov, &
889 & effrl,effri,effrr,effrs,effr_in, &
890 & dzlay, cldtot, cldcnv, lcrick, lcnorm, con_ttp, &
891 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
892 & cld_reice,cld_rwp, cld_rerain,cld_swp, cld_resnow &
969 integer,
intent(in) :: ix, nlay, nlp1
971 logical,
intent(in) :: uni_cld, lmfshal, lmfdeep2, effr_in, &
974 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plvl, plyr, &
975 & tlyr, tvly, qlyr, qstl, rhly, clw, cldcov, delp, dz, &
976 & effrl, effri, effrr, effrs, dzlay
978 real (kind=kind_phys),
dimension(:),
intent(in) :: xlat, xlon, &
980 real (kind=kind_phys),
intent(in) :: con_ttp, xr_con, xr_exp
984 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
985 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
986 & cld_rwp, cld_rerain, cld_swp, cld_resnow
989 real (kind=kind_phys),
dimension(IX,NLAY) :: cldtot, cldcnv, &
990 & cwp, cip, crp, csp, rew, rei, res, rer, tem2d, clwf
992 real (kind=kind_phys) :: clwmin, clwm, clwt, onemrh,
value, &
995 integer :: i, k, id, nf
1010 rew(i,k) = effrl(i,k)
1011 rei(i,k) = effri(i,k)
1012 rer(i,k) = effrr(i,k)
1013 res(i,k) = effrs(i,k)
1014 tem2d(i,k) = min(1.0, max(0.0,(con_ttp-tlyr(i,k))*0.05))
1031 tem2d(i,k) = min(1.0, max(0.0, (con_ttp-tlyr(i,k))*0.05))
1039 clwf(i,1) = 0.75*clw(i,1) + 0.25*clw(i,2)
1040 clwf(i,nlay) = 0.75*clw(i,nlay) + 0.25*clw(i,nlay-1)
1044 clwf(i,k) = 0.25*clw(i,k-1) + 0.5*clw(i,k) + 0.25*clw(i,k+1)
1050 clwf(i,k) = clw(i,k)
1059 clwt = max(0.0, clwf(i,k)) *
gfac * delp(i,k)
1060 cip(i,k) = clwt * tem2d(i,k)
1061 cwp(i,k) = clwt - cip(i,k)
1067 if(.not. effr_in)
then
1069 if (nint(slmsk(i)) == 1)
then
1071 rew(i,k) = 5.0 + 5.0 * tem2d(i,k)
1080 cldtot(i,k) = cldcov(i,k)
1089 if (.not. lmfshal)
then
1091 & ( ix, nlay, xr_con, xr_exp, plyr, clwf, rhly, qstl, &
1095 & ( ix, nlay, lmfdeep2, xr_con, xr_exp, plyr, clwf, rhly, &
1104 if (cldtot(i,k) <
climit)
then
1117 if (cldtot(i,k) >=
climit)
then
1118 tem1 = 1.0 / max(
climit2, cldtot(i,k))
1119 cwp(i,k) = cwp(i,k) * tem1
1120 cip(i,k) = cip(i,k) * tem1
1121 crp(i,k) = crp(i,k) * tem1
1122 csp(i,k) = csp(i,k) * tem1
1131 if(.not.effr_in)
then
1134 tem2 = tlyr(i,k) - con_ttp
1136 if (cip(i,k) > 0.0)
then
1137 tem3 =
gord * cip(i,k) * plyr(i,k) / (delp(i,k)*tvly(i,k))
1139 if (tem2 < -50.0)
then
1140 rei(i,k) = (1250.0/9.917) * tem3 ** 0.109
1141 elseif (tem2 < -40.0)
then
1142 rei(i,k) = (1250.0/9.337) * tem3 ** 0.08
1143 elseif (tem2 < -30.0)
then
1144 rei(i,k) = (1250.0/9.208) * tem3 ** 0.055
1146 rei(i,k) = (1250.0/9.387) * tem3 ** 0.031
1150 rei(i,k) = max(10.0, min(rei(i,k), 150.0))
1160 cld_frac(i,k) = cldtot(i,k)
1161 cld_lwp(i,k) = cwp(i,k)
1162 cld_reliq(i,k) = rew(i,k)
1163 cld_iwp(i,k) = cip(i,k)
1164 cld_reice(i,k) = rei(i,k)
1166 cld_rerain(i,k) = rer(i,k)
1168 cld_resnow(i,k) = res(i,k)
1181 & ( plyr,plvl,tlyr,tvly,qlyr,qstl,rhly,clw,cnvw,cnvc, &
1182 & xlat,xlon,slmsk, dz, delp, &
1184 & deltaq,sup,kdt,me, &
1185 & dzlay, cldtot, cldcnv, lcrick, lcnorm, con_thgni, con_ttp, &
1186 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
1187 & cld_reice,cld_rwp, cld_rerain,cld_swp, cld_resnow &
1257 integer,
intent(in) :: ix, nlay, nlp1,kdt
1258 logical,
intent(in) :: lcrick, lcnorm
1259 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plvl, plyr, &
1260 & tlyr, tvly, qlyr, qstl, rhly, clw, dz, delp, dzlay
1263 real (kind=kind_phys),
intent(in) :: con_thgni, con_ttp
1264 real (kind=kind_phys),
dimension(:,:) :: deltaq, cnvw, cnvc
1265 real (kind=kind_phys) qtmp,qsc,rhs
1266 real (kind=kind_phys),
intent(in) :: sup
1267 real (kind=kind_phys),
parameter :: epsq = 1.0e-12
1269 real (kind=kind_phys),
dimension(:),
intent(in) :: xlat, xlon, &
1275 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
1276 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
1277 & cld_rwp, cld_rerain, cld_swp, cld_resnow
1280 real (kind=kind_phys),
dimension(ix,nlay) :: cldtot, cldcnv, &
1281 & cwp, cip, crp, csp, rew, rei, res, rer, tem2d, clwf
1283 real (kind=kind_phys) :: clwmin, clwm, clwt, onemrh,
value, &
1286 integer :: i, k, id, nf
1303 tem2d(i,k) = min( 1.0, max( 0.0, (con_ttp-tlyr(i,k))*0.05 ) )
1310 clwf(i,1) = 0.75*clw(i,1) + 0.25*clw(i,2)
1311 clwf(i,nlay) = 0.75*clw(i,nlay) + 0.25*clw(i,nlay-1)
1315 clwf(i,k) = 0.25*clw(i,k-1) + 0.5*clw(i,k) + 0.25*clw(i,k+1)
1321 clwf(i,k) = clw(i,k)
1329 deltaq(i,k) = (1.-0.95)*qstl(i,k)
1338 clwt = max(0.0,(clwf(i,k)+cnvw(i,k))) *
gfac * delp(i,k)
1339 cip(i,k) = clwt * tem2d(i,k)
1340 cwp(i,k) = clwt - cip(i,k)
1347 if (nint(slmsk(i)) == 1)
then
1349 rew(i,k) = 5.0 + 5.0 * tem2d(i,k)
1358 tem1 = tlyr(i,k) - 273.16
1359 if(tem1 < (con_thgni - 273.16))
then
1360 qsc = sup * qstl(i,k)
1366 if(rhly(i,k) >= rhs)
then
1369 qtmp = qlyr(i,k) + clwf(i,k) - qsc
1370 if(deltaq(i,k) > epsq)
then
1372 if(qtmp <= -deltaq(i,k))
then
1374 elseif(qtmp >= deltaq(i,k))
then
1377 cldtot(i,k) = 0.5*qtmp/deltaq(i,k) + 0.5
1378 cldtot(i,k) = max(cldtot(i,k),0.0)
1379 cldtot(i,k) = min(cldtot(i,k),1.0)
1389 cldtot(i,k) = cnvc(i,k) + (1-cnvc(i,k))*cldtot(i,k)
1390 cldtot(i,k) = max(cldtot(i,k),0.)
1391 cldtot(i,k) = min(cldtot(i,k),1.)
1398 if (cldtot(i,k) <
climit)
then
1411 if (cldtot(i,k) >=
climit)
then
1412 tem1 = 1.0 / max(
climit2, cldtot(i,k))
1413 cwp(i,k) = cwp(i,k) * tem1
1414 cip(i,k) = cip(i,k) * tem1
1415 crp(i,k) = crp(i,k) * tem1
1416 csp(i,k) = csp(i,k) * tem1
1427 tem2 = tlyr(i,k) - con_ttp
1429 if (cip(i,k) > 0.0)
then
1431 tem3 =
gord * cip(i,k) * plyr(i,k) / (delp(i,k)*tvly(i,k))
1433 if (tem2 < -50.0)
then
1434 rei(i,k) = (1250.0/9.917) * tem3 ** 0.109
1435 elseif (tem2 < -40.0)
then
1436 rei(i,k) = (1250.0/9.337) * tem3 ** 0.08
1437 elseif (tem2 < -30.0)
then
1438 rei(i,k) = (1250.0/9.208) * tem3 ** 0.055
1440 rei(i,k) = (1250.0/9.387) * tem3 ** 0.031
1444 rei(i,k) = max(10.0, min(rei(i,k), 150.0))
1453 cld_frac(i,k) = cldtot(i,k)
1454 cld_lwp(i,k) = cwp(i,k)
1455 cld_reliq(i,k) = rew(i,k)
1456 cld_iwp(i,k) = cip(i,k)
1457 cld_reice(i,k) = rei(i,k)
1459 cld_rerain(i,k) = rer(i,k)
1461 cld_resnow(i,k) = res(i,k)
1714 & ( plyr,plvl,tlyr,tvly,qlyr,qstl,rhly,clw, &
1715 & xlat,xlon,slmsk,dz,delp, &
1716 & ntrac,ntcw,ntiw,ntrw, &
1717 & ix, nlay, nlp1, icloud, xr_con, xr_exp, &
1718 & uni_cld, lmfshal, lmfdeep2, cldcov, &
1719 & re_cloud,re_ice,re_snow, &
1720 & dzlay, cldtot, cldcnv, lcnorm, &
1721 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
1722 & cld_reice,cld_rwp, cld_rerain,cld_swp, cld_resnow &
1795 integer,
intent(in) :: ix, nlay, nlp1, icloud
1796 integer,
intent(in) :: ntrac, ntcw, ntiw, ntrw
1798 logical,
intent(in) :: uni_cld, lmfshal, lmfdeep2, lcnorm
1800 real (kind=kind_phys),
intent(in) :: xr_con, xr_exp
1801 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plvl, plyr, &
1802 & tlyr, tvly, qlyr, qstl, rhly, cldcov, delp, dz, dzlay
1804 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
1805 & re_cloud, re_ice, re_snow
1807 real (kind=kind_phys),
dimension(:,:,:),
intent(in) :: clw
1809 real (kind=kind_phys),
dimension(:),
intent(in) :: xlat, xlon, &
1814 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
1815 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
1816 & cld_rwp, cld_rerain, cld_swp, cld_resnow
1819 real (kind=kind_phys),
dimension(IX,NLAY) :: cldtot, cldcnv, &
1820 & cwp, cip, crp, csp, rew, rei, res, rer, tem2d, clwf
1822 real (kind=kind_phys) :: clwmin, clwm, clwt, onemrh,
value, &
1825 integer :: i, k, id, nf
1838 rew(i,k) = re_cloud(i,k)
1839 rei(i,k) = re_ice(i,k)
1841 res(i,k) = re_snow(i,k)
1867 clwf(i,k) = clw(i,k,ntcw) + clw(i,k,ntiw)
1875 cwp(i,k) = max(0.0, clw(i,k,ntcw) *
gfac * delp(i,k))
1876 cip(i,k) = max(0.0, clw(i,k,ntiw) *
gfac * delp(i,k))
1877 crp(i,k) = max(0.0, clw(i,k,ntrw) *
gfac * delp(i,k))
1887 cldtot(i,k) = cldcov(i,k)
1895 if (.not. lmfshal)
then
1897 & ( ix, nlay, xr_con, xr_exp, plyr, clwf, rhly, qstl, &
1901 & ( ix, nlay, lmfdeep2, xr_con, xr_exp, plyr, clwf, rhly, &
1910 if (cldtot(i,k) <
climit)
then
1923 if (cldtot(i,k) >=
climit)
then
1924 tem1 = 1.0 / max(
climit2, cldtot(i,k))
1925 cwp(i,k) = cwp(i,k) * tem1
1926 cip(i,k) = cip(i,k) * tem1
1927 crp(i,k) = crp(i,k) * tem1
1928 csp(i,k) = csp(i,k) * tem1
1936 cld_frac(i,k) = cldtot(i,k)
1937 cld_lwp(i,k) = cwp(i,k)
1938 cld_reliq(i,k) = rew(i,k)
1939 cld_iwp(i,k) = cip(i,k)
1940 cld_reice(i,k) = rei(i,k)
1941 cld_rwp(i,k) = crp(i,k)
1942 cld_rerain(i,k) = rer(i,k)
1944 cld_resnow(i,k) = 10.0
1945 re_cloud(i,k) = rew(i,k)
1946 re_ice(i,k) = rei(i,k)
1958 & ( plyr,plvl,tlyr,qlyr,qstl,rhly,clw, &
1959 & xlat,xlon,slmsk,dz,delp, &
1960 & ntrac,ntcw,ntiw,ntrw,ntsw,ntgl,con_ttp, &
1961 & xr_cnvcld, ix, nlay, nlp1, xr_con, xr_exp, &
1962 & uni_cld, lmfshal, lmfdeep2, cldcov, cnvw, &
1963 & re_cloud,re_ice,re_snow, &
1964 & lwp_ex, iwp_ex, lwp_fc, iwp_fc, &
1965 & dzlay, cldtot, cldcnv, lcnorm, &
1966 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
1967 & cld_reice,cld_rwp, cld_rerain,cld_swp, cld_resnow &
2045 integer,
intent(in) :: ix, nlay, nlp1
2046 integer,
intent(in) :: ntrac, ntcw, ntiw, ntrw, ntsw, ntgl
2048 logical,
intent(in) :: uni_cld, lmfshal, lmfdeep2, lcnorm, &
2051 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plvl, plyr, &
2052 & tlyr, qlyr, qstl, rhly, cldcov, delp, dz, dzlay, &
2053 & re_cloud, re_ice, re_snow, cnvw
2054 real (kind=kind_phys),
dimension(:),
intent(inout) :: &
2055 & lwp_ex, iwp_ex, lwp_fc, iwp_fc
2057 real (kind=kind_phys),
dimension(:,:,:),
intent(in) :: clw
2059 real (kind=kind_phys),
dimension(:),
intent(in) :: xlat, xlon, &
2061 real (kind=kind_phys),
intent(in) :: con_ttp, xr_con, xr_exp
2064 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
2065 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
2066 & cld_rwp, cld_rerain, cld_swp, cld_resnow
2069 real (kind=kind_phys),
dimension(IX,NLAY) :: cldtot, cldcnv, &
2070 & cwp, cip, crp, csp, rew, rei, res, rer, tem2d, clwf
2072 real (kind=kind_phys) :: clwmin, clwm, clwt, onemrh,
value, &
2075 integer :: i, k, id, nf
2078 real (kind=kind_phys),
parameter :: snow2ice = 0.25
2079 real (kind=kind_phys),
parameter :: coef_t = 0.025
2091 rew(i,k) = re_cloud(i,k)
2092 rei(i,k) = re_ice(i,k)
2094 res(i,k) = re_snow(i,k)
2095 tem2d(i,k) = min(1.0, max( 0.0, (con_ttp-tlyr(i,k))*coef_t))
2125 clwf(i,k) = clw(i,k,ntcw) + clw(i,k,ntiw) + clw(i,k,ntsw)
2126 & + clw(i,k,ntrw) + cnvw(i,k)
2132 clwf(i,k) = clw(i,k,ntcw) + clw(i,k,ntiw) + clw(i,k,ntsw)
2143 tem1 = cnvw(i,k)*(1.-tem2d(i,k))
2147 cwp(i,k) = max(0.0, (clw(i,k,ntcw)+tem1) *
2149 if(tem1 > 1.e-12 .and. clw(i,k,ntcw) < 1.e-12)
2152 tem2 = cnvw(i,k)*tem2d(i,k)
2156 cip(i,k) = max(0.0, (clw(i,k,ntiw) +
2157 & snow2ice*clw(i,k,ntsw) + tem2) *
2159 if(tem2 > 1.e-12 .and. clw(i,k,ntiw) < 1.e-12)
then
2160 if(nint(slmsk(i))==1)
then
2166 crp(i,k) = max(0.0, clw(i,k,ntrw) *
gfac * delp(i,k))
2167 csp(i,k) = max(0.0, (1.-snow2ice)*clw(i,k,ntsw) *
2180 lwp_ex(i) = lwp_ex(i) + cwp(i,k)
2181 iwp_ex(i) = iwp_ex(i) + cip(i,k) + csp(i,k)
2183 lwp_ex(i) = lwp_ex(i)*1.e-3
2184 iwp_ex(i) = iwp_ex(i)*1.e-3
2190 cldtot(i,k) = cldcov(i,k)
2198 if (.not. lmfshal)
then
2200 & ( ix, nlay, xr_con, xr_exp, plyr, clwf, rhly, qstl, &
2204 & ( ix, nlay, lmfdeep2, xr_con, xr_exp, plyr, clwf, rhly, &
2213 if (cldtot(i,k) <
climit)
then
2227 if (cldtot(i,k).ge.
climit .and. cldtot(i,k).lt.
ovcst)
then
2228 lwp_fc(i) = lwp_fc(i) + cwp(i,k)
2229 iwp_fc(i) = iwp_fc(i) + cip(i,k) + csp(i,k)
2232 lwp_fc(i) = lwp_fc(i)*1.e-3
2233 iwp_fc(i) = iwp_fc(i)*1.e-3
2239 if (cldtot(i,k) >=
climit)
then
2240 tem1 = 1.0 / max(
climit2, cldtot(i,k))
2241 cwp(i,k) = cwp(i,k) * tem1
2242 cip(i,k) = cip(i,k) * tem1
2243 crp(i,k) = crp(i,k) * tem1
2244 csp(i,k) = csp(i,k) * tem1
2252 cld_frac(i,k) = cldtot(i,k)
2253 cld_lwp(i,k) = cwp(i,k)
2254 cld_reliq(i,k) = rew(i,k)
2255 cld_iwp(i,k) = cip(i,k)
2256 cld_reice(i,k) = rei(i,k)
2257 cld_rwp(i,k) = crp(i,k)
2258 cld_rerain(i,k) = rer(i,k)
2259 cld_swp(i,k) = csp(i,k)
2260 cld_resnow(i,k) = res(i,k)
2279 & ( plyr,plvl,tlyr,qlyr,qstl,rhly,clw, &
2280 & xlat,xlon,slmsk,dz,delp, &
2281 & ntrac,ntcw,ntiw,ntrw,ntsw,ntgl, &
2283 & uni_cld, lmfshal, lmfdeep2, cldcov, &
2284 & re_cloud,re_ice,re_snow, &
2285 & lwp_ex, iwp_ex, lwp_fc, iwp_fc, &
2286 & dzlay, gridkm, top_at_1, cldtot, cldcnv, &
2287 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
2288 & cld_reice,cld_rwp, cld_rerain,cld_swp, cld_resnow &
2362 integer,
intent(in) :: ix, nlay, nlp1
2363 integer,
intent(in) :: ntrac, ntcw, ntiw, ntrw, ntsw, ntgl
2365 logical,
intent(in) :: uni_cld, lmfshal, lmfdeep2, top_at_1
2367 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plvl, plyr, &
2368 & tlyr, qlyr, qstl, rhly, cldcov, delp, dz, dzlay, &
2369 & re_cloud, re_ice, re_snow
2370 real (kind=kind_phys),
dimension(:),
intent(inout) :: &
2371 & lwp_ex, iwp_ex, lwp_fc, iwp_fc
2373 real (kind=kind_phys),
dimension(:,:,:),
intent(in) :: clw
2375 real (kind=kind_phys),
dimension(:),
intent(in) :: xlat, xlon, &
2377 real(kind=kind_phys),
dimension(:),
intent(in) :: gridkm
2381 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
2382 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
2383 & cld_rwp, cld_rerain, cld_swp, cld_resnow
2386 real (kind=kind_phys),
dimension(IX,NLAY) :: cldtot, cldcnv, &
2387 & cwp, cip, crp, csp, rew, rei, res, rer
2389 real (kind=kind_phys),
dimension(NLAY) :: cldfra1d, qv1d, &
2390 & qc1d, qi1d, qs1d, dz1d, p1d, t1d
2392 real (kind=kind_phys) :: clwmin, tem1
2393 real (kind=kind_phys) :: corr, xland, snow_mass_factor
2394 real (kind=kind_phys),
parameter :: max_relh = 1.5
2395 real (kind=kind_phys),
parameter :: snow_max_radius = 130.0
2397 integer :: i, k, k2, id, nf, idx_rei
2412 rew(i,k) = re_cloud(i,k)
2413 rei(i,k) = re_ice(i,k)
2415 res(i,k) = re_snow(i,k)
2425 cwp(i,k) = max(0.0, clw(i,k,ntcw) * dz(i,k)*1.e6)
2427 snow_mass_factor = 0.90
2428 cip(i,k) = max(0.0, (clw(i,k,ntiw) &
2429 & + (1.0-snow_mass_factor)*clw(i,k,ntsw))*dz(i,k)*1.e6)
2430 if (re_snow(i,k) .gt. snow_max_radius)
then
2431 snow_mass_factor = min(snow_mass_factor, &
2432 & (snow_max_radius/re_snow(i,k)) &
2433 & *(snow_max_radius/re_snow(i,k)))
2434 res(i,k) = snow_max_radius
2436 csp(i,k) = max(0.,snow_mass_factor*clw(i,k,ntsw)*dz(i,k)*1.e6)
2446 lwp_ex(i) = lwp_ex(i) + cwp(i,k)
2447 iwp_ex(i) = iwp_ex(i) + cip(i,k) + csp(i,k)
2461 if (slmsk(i)-0.5 .gt. 0.5 .and. slmsk(i)+0.5 .lt. 1.5)
then
2469 if (.not. top_at_1)
then
2472 qc1d(k) = max(0.0, clw(i,k,ntcw))
2473 qi1d(k) = max(0.0, clw(i,k,ntiw))
2474 qs1d(k) = max(0.0, clw(i,k,ntsw))
2475 dz1d(k) = dz(i,k)*1.e3
2476 p1d(k) = plyr(i,k)*100.0
2482 qv1d(k2) = qlyr(i,k)
2483 qc1d(k2) = max(0.0, clw(i,k,ntcw))
2484 qi1d(k2) = max(0.0, clw(i,k,ntiw))
2485 qs1d(k2) = max(0.0, clw(i,k,ntsw))
2486 dz1d(k2) = dz(i,k)*1.e3
2487 p1d(k2) = plyr(i,k)*100.0
2492 call cal_cldfra3(cldfra1d, qv1d, qc1d, qi1d, qs1d, dz1d, &
2493 & p1d, t1d, xland, gridkm(i), &
2494 & .false., max_relh, 1, nlay, .false.)
2497 cldtot(i,k) = cldfra1d(k)
2498 if (qc1d(k).gt.clwmin .and. cldfra1d(k).lt.
ovcst)
then
2499 cwp(i,k) = qc1d(k) * dz1d(k)*1000.
2500 if ((xland-1.5).GT.0.)
then
2506 if (qi1d(k).gt.clwmin .and. cldfra1d(k).lt.
ovcst)
then
2507 cip(i,k) = qi1d(k) * dz1d(k)*1000.
2508 idx_rei = int(t1d(k)-179.)
2509 idx_rei = min(max(idx_rei,1),75)
2510 corr = t1d(k) - int(t1d(k))
2511 rei(i,k) = max(5.0,
retab(idx_rei)*(1.-corr) + &
2512 &
retab(idx_rei+1)*corr)
2519 cld_frac(i,k) = cldtot(i,k)
2520 cld_lwp(i,k) = cwp(i,k)
2521 cld_reliq(i,k) = rew(i,k)
2522 cld_iwp(i,k) = cip(i,k)
2523 cld_reice(i,k) = rei(i,k)
2524 cld_rwp(i,k) = crp(i,k)
2525 cld_rerain(i,k) = rer(i,k)
2526 cld_swp(i,k) = csp(i,k)
2527 cld_resnow(i,k) = res(i,k)
2537 lwp_fc(i) = lwp_fc(i) + cwp(i,k)
2538 iwp_fc(i) = iwp_fc(i) + cip(i,k) + csp(i,k)
2540 lwp_fc(i) = max(0.0, lwp_fc(i) - lwp_ex(i))
2541 iwp_fc(i) = max(0.0, iwp_fc(i) - iwp_ex(i))
2542 lwp_fc(i) = lwp_fc(i)*1.e-3
2543 iwp_fc(i) = iwp_fc(i)*1.e-3
2544 lwp_ex(i) = lwp_ex(i)*1.e-3
2545 iwp_ex(i) = iwp_ex(i)*1.e-3
2558 & ( plyr,plvl,tlyr,tvly,ccnd,ncnd, &
2559 & xlat,xlon,slmsk,dz,delp, ix, nlay, nlp1, cldtot, &
2560 & effrl,effri,effrr,effrs,effr_in, &
2561 & dzlay, cldtot1, cldcnv, lcrick, lcnorm, con_ttp, &
2562 & cld_frac, cld_lwp, cld_reliq, cld_iwp, &
2563 & cld_reice,cld_rwp, cld_rerain,cld_swp, cld_resnow &
2645 integer,
intent(in) :: ix, nlay, nlp1, ncnd
2646 logical,
intent(in) :: effr_in, lcrick, lcnorm
2648 real (kind=kind_phys),
intent(in) :: con_ttp
2649 real (kind=kind_phys),
dimension(:,:,:),
intent(in) :: ccnd
2650 real (kind=kind_phys),
dimension(:,:),
intent(in) :: plvl, plyr,&
2651 & tlyr, tvly, cldtot, effrl, effri, effrr, effrs, dz, delp, &
2654 real (kind=kind_phys),
dimension(:),
intent(in) :: xlat, xlon, &
2657 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: cldtot1
2661 real (kind=kind_phys),
dimension(:,:),
intent(inout) :: &
2662 & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, &
2663 & cld_rwp, cld_rerain, cld_swp, cld_resnow
2666 real (kind=kind_phys),
dimension(IX,NLAY) :: cldcnv, cwp, cip, &
2667 & crp, csp, rew, rei, res, rer
2668 real (kind=kind_phys),
dimension(IX,NLAY,ncnd) :: cndf
2670 real (kind=kind_phys) :: tem1, tem2, tem3
2672 integer :: i, k, id, nf, n
2689 cndf(i,k,n) = ccnd(i,k,n)
2696 cndf(i,1,n) = 0.75*ccnd(i,1,n) + 0.25*ccnd(i,2,n)
2697 cndf(i,nlay,n) = 0.75*ccnd(i,nlay,n) + 0.25*ccnd(i,nlay-1,n)
2701 cndf(i,k,n) = 0.25 * (ccnd(i,k-1,n) + ccnd(i,k+1,n)) &
2702 & + 0.5 * ccnd(i,k,n)
2713 tem1 =
gfac * delp(i,k)
2714 cwp(i,k) = cndf(i,k,1) * tem1
2715 cip(i,k) = cndf(i,k,2) * tem1
2718 elseif (ncnd == 4)
then
2721 tem1 =
gfac * delp(i,k)
2722 cwp(i,k) = cndf(i,k,1) * tem1
2723 cip(i,k) = cndf(i,k,2) * tem1
2724 crp(i,k) = cndf(i,k,3) * tem1
2725 csp(i,k) = cndf(i,k,4) * tem1
2732 if (cldtot(i,k) <
climit)
then
2744 if (cldtot(i,k) >=
climit)
then
2745 tem1 = 1.0 / max(
climit2, cldtot(i,k))
2746 cwp(i,k) = cwp(i,k) * tem1
2747 cip(i,k) = cip(i,k) * tem1
2748 crp(i,k) = crp(i,k) * tem1
2749 csp(i,k) = csp(i,k) * tem1
2760 rew(i,k) = effrl(i,k)
2761 rei(i,k) = max(10.0, min(150.0,effri(i,k)))
2762 rer(i,k) = effrr(i,k)
2763 res(i,k) = effrs(i,k)
2777 if (nint(slmsk(i)) == 1)
then
2779 tem1 = min(1.0, max(0.0, (con_ttp-tlyr(i,k))*0.05))
2780 rew(i,k) = 5.0 + 5.0 * tem1
2790 tem2 = tlyr(i,k) - con_ttp
2792 if (cip(i,k) > 0.0)
then
2793 tem3 =
gord * cip(i,k) * plyr(i,k) / (delp(i,k)*tvly(i,k))
2795 if (tem2 < -50.0)
then
2796 rei(i,k) = (1250.0/9.917) * tem3 ** 0.109
2797 elseif (tem2 < -40.0)
then
2798 rei(i,k) = (1250.0/9.337) * tem3 ** 0.08
2799 elseif (tem2 < -30.0)
then
2800 rei(i,k) = (1250.0/9.208) * tem3 ** 0.055
2802 rei(i,k) = (1250.0/9.387) * tem3 ** 0.031
2806 rei(i,k) = max(10.0, min(rei(i,k), 150.0))
2815 cldtot1(i,k) = cldtot(i,k)
2821 cld_frac(i,k) = cldtot(i,k)
2822 cld_lwp(i,k) = cwp(i,k)
2823 cld_reliq(i,k) = rew(i,k)
2824 cld_iwp(i,k) = cip(i,k)
2825 cld_reice(i,k) = rei(i,k)
2826 cld_rwp(i,k) = crp(i,k)
2827 cld_rerain(i,k) = rer(i,k)
2828 cld_swp(i,k) = csp(i,k)
2829 cld_resnow(i,k) = res(i,k)
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_zhao_carr, imp_physics_zhao_carr_pdf, 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...