54 subroutine canopy_driver_run(im,km,ntrac,ntcw,ntrw,
55 & ntiw,ntke,ntchm,ntchs,ntche, ntoz,nto3,
58 & grav,pi,rd,cp,rv,hvap,hfus,fv,eps,epsm1,
59!The following three variables are for SA-3D-TKE
60 & def_1,def_2,def_3,sa3dtke,dku3d_h,dku3d_e,
61 & dv,du,tdt,rtg, ! inout: dv,du,tdt,rtg
62 & u1,v1,t1,q1,usfco,vsfco,use_oceanuv, ! in
63 & swh,hlw,xmu,garea,zvfun,sigmaf, ! in
64 & psk,rbsoil,zorl,u10m,v10m,t2m, q2m,fm,fh,
65 & tsea,heat,evap,stress,spd1,
68 & prsi,del,prsl,prslk,phii,phil,delt,tte_edmf,
70 & dusfc,dvsfc,dtsfc,dqsfc,hpbl, ! in: dusfc,dvsfc,dtsfc,dqsfc,hpbl
71 & dkt,dku,tkeh, ! inout: dkt,dku, tkeh
72 & dkt_can,dku_can, ! out
73 & kinver,xkzm_m,xkzm_h,xkzm_s,dspfac,bl_upfr,bl_dnfr, ! in
74 & rlmx,elmx,sfc_rlm,tc_pbl,use_lpt, ! in
75 & do_canopy, cplaqm, claie, cfch, cfrt, cclu, cpopu, ! in
76 & ntqv,dtend,dtidx,index_of_temperature,index_of_x_wind, ! inout: dtend (.ldiag3d.)
77 & index_of_y_wind,index_of_process_pbl,gen_tend,ldiag3d,
81 use machine ,
only : kind_phys
82 use funcphys ,
only : fpvs
87 integer,
intent(in) :: im, km,
88 & ntrac, ntcw, ntrw, ntiw, ntke, ntqv,
89 & ntchm,ntchs,ntche, ntoz,nto3, ndtend
90 integer,
intent(in) :: sfc_rlm
91 integer,
intent(in) :: tc_pbl
92 integer,
intent(in) :: use_lpt
93 integer,
intent(in) :: kinver(:)
94 integer,
intent(in) :: kpbl(:)
95 logical,
intent(in) :: gen_tend,ldiag3d
97 real(kind=kind_phys),
intent(in) :: grav,pi,rd,cp,rv,hvap,hfus,fv,
100 real(kind=kind_phys),
intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s
101 real(kind=kind_phys),
intent(in) :: dspfac, bl_upfr, bl_dnfr
102 real(kind=kind_phys),
intent(in) :: rlmx, elmx
104 logical,
intent(in) :: do_canopy, cplaqm
106 real(kind=kind_phys),
optional,
intent(in) ::
108 & claie(:) , cfch(:),
109 & cfrt(:) , cclu(:), cpopu(:)
112 real(kind=kind_phys),
intent(inout) ::
114 & tdt(:,:), tkeh(:,:),
116 real(kind=kind_phys),
intent(in) ::
118 & usfco(:), vsfco(:),
119 & t1(:,:), q1(:,:,:),
121 & def_1(:,:), def_2(:,:), def_3(:,:),
122 & swh(:,:), hlw(:,:),
124 & zvfun(:), sigmaf(:),
131 & stress(:), spd1(:),
133 & prsi(:,:), del(:,:),
134 & prsl(:,:), prslk(:,:),
135 & phii(:,:), phil(:,:)
137 real(kind=kind_phys),
intent(inout),
dimension(:,:,:),
optional ::
140 integer,
intent(in) :: dtidx(:,:), index_of_temperature,
141 & index_of_x_wind, index_of_y_wind, index_of_process_pbl
142 logical,
intent(in) :: use_oceanuv
143 real(kind=kind_phys),
intent(in) ::
144 & dusfc(:), dvsfc(:),
146 real(kind=kind_phys),
intent(in) ::
148 real(kind=kind_phys),
intent(inout) ::
150 real(kind=kind_phys),
optional,
intent(out) ::
151 & dkt_can(:,:), dku_can(:,:)
153 logical,
intent(in) :: sa3dtke
157 logical,
intent(in) :: dspheat
159 logical,
intent(in) :: tte_edmf
161 character(len=*),
intent(out) :: errmsg
162 integer,
intent(out) :: errflg
165 real(kind=kind_phys),
intent(in) ::
166 & dku3d_h(:,:),dku3d_e(:,:)
173 integer i,is,k,n,ndt,km1,kmpbl,kmscu,ntrac1,
176 real(kind=kind_phys) dtdz1(im), gdx(im),
177 & phih(im), phim(im),
178 & phims(im), prn(im,km-1),
179 & rbdn(im), rbup(im), thermal(im),
180 & ustar(im), wstar(im),
181 & ust3(im), wst3(im),
182 & z0(im), crb(im), tkemean(im),
183 & hgamt(im), hgamq(im),
184 & wscale(im),vpert(im),
185 & zol(im), sflux(im),
186 & sumx(im), tx1(im), tx2(im)
188 real(kind=kind_phys) zi(im,km+1), zl(im,km), zm(im,km),
189 & xkzo(im,km-1),xkzmo(im,km-1),
190 & xkzm_hx(im), xkzm_mx(im), tkmnz(im,km-1),
191 & rdzt(im,km-1),rlmnz(im,km),
192 & al(im,km-1), ad(im,km), au(im,km-1),
193 & f1(im,km), f2(im,km*(ntrac-1))
195 real(kind=kind_phys) elm(im,km), ele(im,km),
196 & ckz(im,km), chz(im,km),
197 & diss(im,km-1),prod(im,km-1),
198 & bf(im,km-1), shr2(im,km-1),
199 & xlamue(im,km-1), xlamde(im,km-1),
200 & gotvx(im,km), rlam(im,km-1)
202 real(kind=kind_phys) aphi16, aphi5,
204 & gamcrt, gamcrq, sfcfrac,
206 & dsdz2, dsdzt, dkmax,
208 & dtodsu, g, factor, dz,
209 & gocp, gravi, zol1, zolcru,
212 & prnum, prmax, prmin, prtke,
215 & elmfac, elefac, dspmax,
217 & f0, robn, crbmin, crbmax,
218 & es, qs,
value, onemrh,
219 & cfh, gamma, elocp, el2orc,
220 & epsi, beta, chx, cqx,
221 & rdt, rdz, qmin, qlmin,
222 & rimin, rbcr, rbint, tdzmin,
223 & rlmn, rlmn0, rlmn1, rlmn2,
224 & ttend, utend, vtend, qtend,
225 & zfac, zfmin, vk, spdk2,
226 & tkmin, tkbmx, xkgdx,
228 & zlup, zldn, cs0, csmf,
229 & tem, tem1, tem2, tem3,
230 & ptem, ptem0, ptem1, ptem2
232 real(kind=kind_phys) slfac
234 real(kind=kind_phys) vegflo, vegfup, z0lo, z0up, vc0, zc0
236 real(kind=kind_phys) ck0, ck1, ch0, ch1, ce0, rchck
238 real(kind=kind_phys) qlcr, zstblmax, hcrinv
240 real(kind=kind_phys) h1
242 real(kind=kind_phys) bfac, mffac
244 real(kind=kind_phys) q1_new(im,km,ntrac-1)
249 integer COUNTCAN,KCAN
251 integer,
parameter :: MAXCAN = 1000
253 real(kind=kind_phys) :: fch,
254 & zi05, zfl, dzfl, botcan, fzi05, ttcorr,
255 & uucan, vvcan, ttcan, tkecan, tkehcan,
256 & uu1, vv1, tt1, tke1, tkeh1,
257 & uu_int,vv_int,tt_int,tke_int, tkeh_int,
260 real(kind=kind_phys) :: zcanx(maxcan), zooox(maxcan),
261 & uux(maxcan), vvx(maxcan), ttx(maxcan),
262 & tkex(maxcan), tkehx(maxcan)
265 real(kind=kind_phys) ::
266 & dv_can(im,km), du_can(im,km),
268 & tdt_can(im,km), rtg_can(im,km,ntrac)
270 real(kind=kind_phys) ::
271 & dum3d_h(im, km) , dum3d_e(im, km),
274 real(kind=kind_phys) :: dtend_can(im, km , ndtend)
277 real(kind=kind_phys) :: dusfc_can(im), dvsfc_can(im),
278 & dtsfc_can(im), dqsfc_can(im),
281 integer :: kpbl_can(im)
283 real(kind=kind_phys) ::
286 & u2(im,km), v2(im,km), ws2(im,km),
287 & rho2(im,km), duv(im,km)
290 integer,
parameter :: nkc = 3
298 & nfrct(km+nkc, im) ,
299 & ifrct(km+nkc, 2, im)
301 real(kind=kind_phys) ::
305 & u2_mod(im, km) , v2_mod(im, km),
306 & ws2_mod(im, km) , t2_mod(im, km),
307 & du_mod(im, km) , dv_mod(im, km),
308 & duv_mod(im, km) , tdt_mod(im, km),
313 & rtg1_mod(im, km, ntrac),
314 & q1_mod(im, km, ntrac),
315 & q2_mod(im, km, ntrac),
317 & rtg_mod(im, km, ntrac),
319 & q1_can(im, km , ntrac),
320 & q2_can(im, km , ntrac),
325 & tkeh_can(im, km ) ,
330 & phii_can(im, km+1) ,
331 & prsi_can(im, km+1) ,
334 & prslk_can(im, km) ,
337 & dkt_can3(im, km+nkc) ,
338 & dku_can3(im, km+nkc) ,
339 & qv_can3(im, km+nkc) ,
340 & q1_can3(im, km+nkc, ntrac),
341 & q2_can3(im, km+nkc, ntrac),
343 & ws1_can3(im, km+nkc) ,
344 & u1_can3(im, km+nkc) ,
345 & v1_can3(im, km+nkc) ,
346 & t1_can3(im, km+nkc) ,
347 & rho1_can3(im, km+nkc) ,
348 & tkeh_can3(im, km+nkc) ,
350 & ws2_can3(im, km+nkc) ,
351 & u2_can3(im, km+nkc) ,
352 & v2_can3(im, km+nkc) ,
353 & t2_can3(im, km+nkc) ,
354 & rho2_can3(im, km+nkc) ,
359 & phii_can3(im, km+nkc+1) ,
360 & phil_can3(im, km+nkc) ,
361 & prsi_can3(im, km+nkc+1) ,
362 & prsl_can3(im, km+nkc) ,
363 & prslk_can3(im, km+nkc) ,
364 & del_can3(im, km+nkc) ,
366 & zi_can3(im, km+nkc+1) ,
367 & zl_can3(im, km+nkc) ,
368 & zm_can3(im, km+nkc) ,
369 & dz_can3(im, km+nkc) ,
372 & wind_dir_to_rad(im, km) ,
380 & zmom_can3(im, km+nkc+1) ,
381 & zmid_can3(im, km+nkc) ,
382 & sigmom_can3(im, km+nkc+1) ,
383 & sigmid_can3(im, km+nkc) ,
384 & massair_can3(im, km+nkc) ,
386 & mmr_o3_can3(im, km+nkc) ,
387 & frctr2c(km+nkc, 2, im) ,
388 & frctc2r(km+nkc, 2, im)
392 parameter(wfac=7.0,cfac=4.5)
393 parameter(gamcrt=3.,gamcrq=0.,sfcfrac=0.1)
394 parameter(vk=0.4,rimin=-100.,slfac=0.1)
395 parameter(rbcr=0.25,zolcru=-0.02,tdzmin=1.e-3)
396 parameter(rlmn=30.,rlmn0=5.,rlmn1=5.,rlmn2=10.)
397 parameter(prmin=0.25,prmax=4.0)
398 parameter(pr0=1.0,prtke=1.0,prscu=0.67)
399 parameter(f0=1.e-4,crbmin=0.15,crbmax=0.35)
400 parameter(tkmin=1.e-9,tkbmx=0.2,dspmax=10.0)
401 parameter(qmin=1.e-8,qlmin=1.e-12,zfmin=1.e-8)
402 parameter(concmin = 1.0e-30)
403 parameter(aphi5=5.,aphi16=16.)
404 parameter(elmfac=1.0,elefac=1.0,cql=100.)
405 parameter(dw2min=1.e-4,dkmax=1000.,xkgdx=1000.)
406 parameter(qlcr=3.5e-5,zstblmax=2500.)
407 parameter(xkinv1=0.15,xkinv2=0.3)
408 parameter(h1=0.33333333,hcrinv=250.)
409 parameter(vegflo=0.1,vegfup=1.0,z0lo=0.1,z0up=1.0)
410 parameter(vc0=1.0,zc0=1.0)
411 parameter(ck1=0.15,ch1=0.15)
412 parameter(cs0=0.4,csmf=0.5)
413 parameter(rchck=1.5,ndt=20)
414 real(kind=kind_phys),
parameter :: epsilon = 1.e-10
417 if (.not. (do_canopy .and. cplaqm ) )
then
418 write(errmsg,fmt=
'(*(a))')
'Logic error: do_canopy = .false.'
426 if (tc_pbl == 0)
then
430 else if (tc_pbl == 1)
then
443 el2orc = hvap * hvap / (rv * cp)
466 zi(i,k) = phii(i,k) * gravi
467 zl(i,k) = phil(i,k) * gravi
474 zi(i,km+1) = phii(i,km+1) * gravi
483 gdx(i) = sqrt(garea(i))
506 if (do_canopy .and. cplaqm)
then
510 rho1(i,k) = prsl(i,k)/
512 & (1.+fv*max(q1(i,k, 1),qmin)))
517 CALL canopy_mask_init( im, km, nkc, nkt,
518 & claie, cfch, cfrt, cclu, cpopu,
522 if (errflg /= 0)
return
524 CALL canopy_levs_init( im, km, nkc, nkt,
532 & zmom_can3, zmid_can3,
533 & sigmom_can3, sigmid_can3,
535 & prsl_can3, prsi_can3,
536 & dv_can, du_can, tdt_can, rtg_can,
537 & t1_can3, qv_can3,rho1_can3,
538 & ws1_can3, dkt_can3, dku_can3,
544 dtend_can(:, :, : ) = 0.0
546 if (errflg /= 0)
return
553 CALL canopy_transfer_init(im, km, nkc, nkt,
554 & massair_can3, massair,
560 if (errflg /= 0)
return
568 if (do_canopy .and. cplaqm)
then
572 CALL canopy_mask_run( im, km, nkc, nkt,
573 & claie, cfch, cfrt, cclu, cpopu,
586 ws1(i,k) = sqrt(u1(i,k)**2+v1(i,k)**2)
588 wind_dir_to_rad(i,k) =
589 & atan2(u1(i,k),v1(i,k))
607 CALL canopy_levs_run(im, km, nkc, nkt,
613 & garea, u10m,v10m, fm, fh,
622 & zmom_can3, zmid_can3,
623 & sigmom_can3, sigmid_can3,
625 & prsl_can3, prsi_can3,
626 & dv_can, du_can, tdt_can, rtg_can,
627 & t1_can3, qv_can3, rho1_can3,
628 & ws1_can3, dkt_can3, dku_can3,
632 if (errflg /= 0)
return
666 q1_can3(i,k, ntqv) = qv_can3(i,k)
668 rho1_can3(i,k) = prsl_can3(i,k)/
670 & (1.+fv*max(q1_can3(i,k, ntqv),qmin)))
684 del_can3(i,kc) = prsi_can3(i,kc) - prsi_can3(i,kc+1)
688 prslk_can3(i,kc) = (prsl_can3(i,kc) /pgr(i)) ** con_rocp
698 IF (frt_mask(i) > 0.)
THEN
699 del_can3(i,kc) = prsi_can3(i, kc) - prsi_can3(i, kc+1)
702 ELSE IF (frt_mask(i) <= 0.)
THEN
703 del_can3(i,kc) = del(i,1)
709 prslk_can3(i,kc) = (prsl_can3(i,kc) /pgr(i)) ** con_rocp
729 zi_can3(i,kc+1) = zm_can3(i, kc)
730 dz_can3(i,kc) = zi_can3(i, kc+1) - zi_can3(i, kc)
741 zi_can3(i,kc+1) = zm_can3(i, kc)
747 dz_can3(i,kc) = zi_can3(i, kc+1) - zi_can3(i, kc)
757 phil_can3(i,k) = zl_can3(i,k) * grav
758 phii_can3(i,k) = zi_can3(i,k) * grav
762 phii_can3(i,nkt+1) = zi_can3(i,nkt+1) * grav
773 u1_can3(i,kc) = ws1_can3(i,kc) * sin(wind_dir_to_rad(i,k))
774 v1_can3(i,kc) = ws1_can3(i,kc) * cos(wind_dir_to_rad(i,k))
783 u1_can3(i,kc) = ws1_can3(i,kc) * sin(wind_dir_to_rad(i,1))
784 v1_can3(i,kc) = ws1_can3(i,kc) * cos(wind_dir_to_rad(i,1))
790 q1_mod(:,1:km, :) = q1(:,1:km, :)
798 CALL canopy_transfer_run(im, km, nkc, nkt,
806 & zmom_can3, zmid_can3,
807 & prsl_can3, rho1_can3,
808 & q1_mod, q1_can3, q1_2m,
809 & massair_can3, massair,
815 if (errflg /= 0)
return
832 prsi_can(:,1:km+1) = prsi_can3(:,1:km+1)
833 prsl_can(:,1:km) = prsl_can3(:,1:km)
834 prslk_can(:,1:km) = prslk_can3(:,1:km)
837 IF (frt_mask(i) > 0.)
THEN
838 del_can(i,1:km) = del_can3(i,1:km)
839 phii_can(i,1:km+1) = phii_can3(i,1:km+1)
840 phil_can(i,1:km) = phil_can3(i,1:km)
842 ELSE IF (frt_mask(i) <= 0.)
THEN
843 del_can(i,1:km) = del(i,1:km)
844 phii_can(i,1:km+1) = phii(i,1:km+1)
845 phil_can(i,1:km) = phil(i,1:km)
850 u1_can(:,1:km) = u1_can3(:,1:km)
851 v1_can(:,1:km) = v1_can3(:,1:km)
853 ws1_can(:,1:km) = sqrt(u1_can(:,1:km)**2+v1_can(:,1:km)**2)
855 t1_can(:,1:km) = t1_can3(:,1:km)
857 dku_can(:,1:km) = dku_can3(:,1:km)
858 dkt_can(:,1:km) = dkt_can3(:,1:km)
862 q1_can(:,1:km, 1:ntrac1) = q1_can3(:,1:km, 1:ntrac1)
864 q1_can(:,1:km, ntke ) = q1_can3(:,1:km, ntke )
868 if (do_canopy .and. cplaqm)
then
876 swh_can(:, nkc+1:km ) = swh(:,1:km-nkc)
877 swh_can(:, 3 ) = swh(:,1 )
878 swh_can(:, 2 ) = swh(:,1 )
879 swh_can(:, 1 ) = swh(:,1 )
881 hlw_can(:, nkc+1:km ) = hlw(:,1:km-nkc)
882 hlw_can(:, 3 ) = hlw(:,1 )
883 hlw_can(:, 2 ) = hlw(:,1 )
884 hlw_can(:, 1 ) = hlw(:,1 )
893 q1_can(:,kc, ntke ) = q1(:,k, ntke )
907 q1_can(:,kc, ntke ) = q1(:,1, ntke )
920 & ntiw,ntke,grav,pi,rd,cp,rv,hvap,hfus,fv,eps,epsm1,
922 & def_1,def_2,def_3,sa3dtke,dum3d_h,dum3d_e,
923 & dv_can,du_can,tdt_can,rtg_can,
924 & u1_can,v1_can,t1_can, q1_can,
925 & usfco,vsfco,use_oceanuv,
927 & xmu,garea,zvfun,sigmaf,
928 & psk,rbsoil,zorl,u10m,v10m,fm,fh,
929 & tsea,heat,evap,stress,spd1,
931 & prsi_can,del_can,prsl_can,prslk_can,phii_can,phil_can,
934 & dusfc_can,dvsfc_can,dtsfc_can,dqsfc_can,hpbl_can,
935 & dkt, dku, tkeh_can,
937 & kinver,xkzm_m,xkzm_h,xkzm_s,dspfac,bl_upfr,bl_dnfr,
938 & rlmx,elmx,sfc_rlm,tc_pbl,use_lpt,
940 & ntqv, dtend_can, dtidx,index_of_temperature,index_of_x_wind,
941 & index_of_y_wind,index_of_process_pbl,gen_tend,ldiag3d,
947 IF (frt_mask(i) <= 0.)
THEN
950 kpbl_can(i) = kpbl(i)
951 hpbl_can(i) = hpbl(i)
954 dusfc_can(i) = dusfc(i)
955 dvsfc_can(i) = dvsfc(i)
956 dtsfc_can(i) = dtsfc(i)
957 dqsfc_can(i) = dqsfc(i)
968 u2(:,1:km) = u1(:,1:km) +
970 v2(:,1:km) = v1(:,1:km) +
973 ws2(:,1:km) = sqrt(u2(:,1:km)**2+v2(:,1:km)**2)
974 duv(:,1:km) = (ws2(:,1:km) - ws1(:,1:km) )*rdt
977 t2(:,1:km) = t1(:,1:km) +
981 q2(:,1:km, 1:ntrac1) = q1(:,1:km, 1:ntrac1) +
982 & rtg(:,1:km, 1:ntrac1) * dt2
985 q2(:,1:km, ntke ) = q1(:,1:km, ntke ) +
986 & rtg(:,1:km, ntke ) * dt2
987 q2(:,:, ntke) = max(q2(:,:, ntke), tkmin)
990 t2_mod(:,1:km) = t2(:,1:km)
991 u2_mod(:,1:km) = u2(:,1:km)
992 v2_mod(:,1:km) = v2(:,1:km)
995 ws2_mod(:,1:km) = sqrt(u2_mod(:,1:km)**2+v2_mod(:,1:km)**2)
998 q2_mod(:,1:km,:) = q2(:,1:km, :)
999 tkeh_mod(:,1:km) = tkeh(:,1:km)
1002 rtg_mod(:,1:km, :) = rtg(:,1:km, :)
1004 tdt_mod(:,1:km) = tdt(:,1:km)
1006 du_mod(:,1:km) = du(:,1:km)
1007 dv_mod(:,1:km) = dv(:,1:km)
1008 duv_mod(:,1:km) = duv(:,1:km)
1011 rho2(:,1:km) = prsl(:,1:km)/
1013 & (1.+fv*max(q2(:,1:km, ntqv),qmin)))
1025 IF (frt_mask(i) <= 0.)
THEN
1028 u2_can3(i,kc) = u2(i,k)
1029 v2_can3(i,kc) = v2(i,k)
1030 t2_can3(i,kc) = t2(i,k)
1033 tkeh_can(i,kc) = tkeh(i,k)
1036 tdt_can(i,kc) = tdt(i,k)
1037 du_can(i,kc) = du(i,k)
1038 dv_can(i,kc) = dv(i,k)
1039 duv_can(i,kc) = duv(i,k)
1042 rtg_can(i,kc, 1:ntrac1) = rtg(i,k, 1:ntrac1)
1044 rtg_can(i,kc, ntke) = rtg(i,k, ntke )
1053 IF (frt_mask(i) <= 0.)
THEN
1056 u2_can3(i,kc) = u2(i,1)
1057 v2_can3(i,kc) = v2(i,1)
1058 t2_can3(i,kc) = t2(i,1)
1061 tkeh_can(i,kc) = tkeh(i,1)
1064 tdt_can(i,kc) = tdt(i,1)
1065 du_can(i,kc) = du(i,1)
1066 dv_can(i,kc) = dv(i,1)
1067 duv_can(i,kc) = duv(i,1)
1070 rtg_can(i,kc, 1:ntrac1) = rtg(i,1, 1:ntrac1)
1072 rtg_can(i,kc, ntke ) = rtg(i,1, ntke)
1080 q2_can(:,:, ntqv) = q1_can(:,:, ntqv) +
1081 & rtg_can(:,:, ntqv) * dt2
1082 q2_can(:,:, ntqv) = max(q2_can(:,:, ntqv),qmin)
1087 u2_can3(:,km+nkc) = u2(:,km )
1088 u2_can3(:,km+2 ) = u2(:,km-1)
1089 u2_can3(:,km+1 ) = u2(:,km-2)
1092 v2_can3(:,km+nkc) = v2(:,km )
1093 v2_can3(:,km+2 ) = v2(:,km-1)
1094 v2_can3(:,km+1 ) = v2(:,km-2)
1097 t2_can3(:,km+nkc) = t2(:,km )
1098 t2_can3(:,km+2 ) = t2(:,km-1)
1099 t2_can3(:,km+1 ) = t2(:,km-2)
1104 q2_can3(:,km+nkc , ntke ) = q2(:,km , ntke )
1105 q2_can3(:,km+2 , ntke ) = q2(:,km-1 , ntke )
1106 q2_can3(:,km+1 , ntke ) = q2(:,km-2 , ntke )
1109 q2_can3(:,km+nkc , 1:ntrac1) = q2(:,km , 1:ntrac1)
1110 q2_can3(:,km+2 , 1:ntrac1) = q2(:,km-1 , 1:ntrac1)
1111 q2_can3(:,km+1 , 1:ntrac1) = q2(:,km-2 , 1:ntrac1)
1116 u2_can3(:,1:km) = u1_can(:,1:km) + du_can(:,1:km) * dt2
1117 v2_can3(:,1:km) = v1_can(:,1:km) + dv_can(:,1:km) * dt2
1120 t2_can3(:,1:km) = t1_can(:,1:km) + tdt_can(:,1:km) * dt2
1124 ws2_can3(:,1:km) = sqrt(u2_can3(:,1:km)**2+v2_can3(:,1:km)**2)
1129 duv_can(:,1:km) = (ws2_can3(:,1:km) - ws1_can(:,1:km)) * rdt
1133 q2_can3(:,1:km, 1:ntrac1) = q1_can(:,1:km, 1:ntrac1) +
1134 & rtg_can(:,1:km, 1:ntrac1) * dt2
1136 q2_can3(:,1:km, ntke ) = q1_can(:,1:km, ntke ) +
1137 & rtg_can(:,1:km, ntke ) * dt2
1138 q2_can(:,1:km, ntke ) = q1_can(:,1:km, ntke ) +
1139 & rtg_can(:,1:km, ntke ) * dt2
1142 q2_can3(:,:, ntke) = max(q2_can3(:,:, ntke), tkmin)
1143 q2_can(:,:, ntke) = max(q2_can(:,:, ntke), tkmin)
1146 q2_can3(:,:, ntqv) = max(q2_can3(:,:, ntqv), qmin )
1149 q2_can3(:,:, ntoz:ntrac1 ) =
1150 & max(q2_can3(:,:, ntoz:ntrac1), concmin)
1154 rho2_can3(:,km+nkc) = prsl(:,km )/
1156 & (1.+fv*max(q2(:,km , ntqv),qmin)))
1157 rho2_can3(:,km+2 ) = prsl(:,km-1)/
1159 & (1.+fv*max(q2(:,km-1, ntqv),qmin)))
1161 rho2_can3(:,km+1 ) = prsl(:,km-2)/
1163 & (1.+fv*max(q2(:,km-2, ntqv),qmin)))
1166 rho2_can3(:,1:km ) = prsl_can3(:,1:km)/
1167 & (rd*t2_can3(:,1:km)*
1168 & (1.+fv*max(q2_can3(:,1:km, ntqv),qmin)))
1178 CALL canopy_transfer_run(im, km, nkc, nkt,
1186 & zmom_can3, zmid_can3,
1187 & prsl_can3, rho2_can3,
1188 & q2_mod, q2_can3, q2_2m,
1189 & massair_can3, massair,
1195 if (errflg /= 0)
return
1217 IF (frt_mask(i) <= 0.)
THEN
1220 q2_mod(i,k, 1:ntrac1) = q2(i,k, 1:ntrac1)
1221 q2_mod(i,k, ntke ) = q2(i,k, ntke)
1223 t2_mod(i,k) = t2(i,k)
1224 u2_mod(i,k) = u2(i,k)
1225 v2_mod(i,k) = v2(i,k)
1227 ws2_mod(i,k) = sqrt(u2_mod(i,k)**2+v2_mod(i,k)**2)
1234 q2_mod(:,:, ntchs-1:ntrac1 ) =
1235 & max(q2_mod(:,:, ntchs-1:ntrac1), concmin)
1238 q2_mod(:,:, ntqv) = max(q2_mod(:,:, ntqv),qmin)
1249 IF ( frt_mask(i) > 0. )
THEN
1257 IF ( cfch(i) > zi(i,k) .AND. cfch(i) <= zi(i,k+1) )
THEN
1264 IF (kcan == 1 )
THEN
1277 dzfl = zi(i,k+1) - botcan
1280 DO WHILE (zi05 .GE. botcan)
1285 do kc = nkt-1, 1, -1
1290 IF ( zi05 > zi_can3(i,kc ) .and.
1291 & zi05 <= zi_can3(i,kc+1) )
THEN
1297 & (zi_can3(i,kc+1) - zi_can3(i,kc)) *
1298 & (zi05 - zi_can3(i,kc))
1300 ttcorr = (t2_can3(i,kc+1) - t2_can3(i,kc))/
1303 & (zi_can3(i,kc+1) - zi_can3(i,kc)) *
1304 & (zi05 - zi_can3(i,kc))
1307 uucan = u2_can3(i,kc ) +
1308 & (u2_can3(i,kc+1) - u2_can3(i,kc))/
1311 & (zi_can3(i,kc+1) - zi_can3(i,kc)) *
1312 & (zi05 - zi_can3(i,kc))
1314 vvcan = v2_can3(i,kc ) +
1315 & (v2_can3(i,kc+1) - v2_can3(i,kc))/
1318 & (zi_can3(i,kc+1) - zi_can3(i,kc)) *
1319 & (zi05 - zi_can3(i,kc))
1321 ttcan = t2_can3(i,kc ) +
1322 & (t2_can3(i,kc+1) - t2_can3(i,kc))/
1325 & (zi_can3(i,kc+1) - zi_can3(i,kc)) *
1326 & (zi05 - zi_can3(i,kc))
1330 tkecan = q2_can3(i,kc, ntke) +
1331 & (q2_can3(i,kc+1, ntke) -
1332 & q2_can3(i,kc , ntke))/
1335 & (zi_can3(i,kc+1) - zi_can3(i,kc)) *
1336 & (zi05 - zi_can3(i,kc))
1339 tkehcan = tkeh_can(i,kc ) +
1340 & (tkeh_can(i,kc+1) - tkeh_can(i,kc))/
1343 & ( zi_can3(i,kc+1) - zi_can3(i,kc)) *
1344 & (zi05 - zi_can3(i,kc))
1356 IF ( zi05 .LE. zfl )
THEN
1358 countcan = countcan + 1
1359 zcanx(countcan) = zi05
1362 uux(countcan) = uucan
1363 vvx(countcan) = vvcan
1365 ttx(countcan) = ttcan
1367 tkex(countcan) = tkecan
1369 tkehx(countcan) = tkehcan
1379 zz_int= integratetrapezoid(
1380 & zcanx(countcan:1:-1), zooox(countcan:1:-1))
1383 uu_int = integratetrapezoid(
1384 & zcanx(countcan:1:-1) ,
1385 & uux(countcan:1:-1) ) /
1390 vv_int = integratetrapezoid(
1391 & zcanx(countcan:1:-1) ,
1392 & vvx(countcan:1:-1) ) /
1397 tt_int = integratetrapezoid(
1398 & zcanx(countcan:1:-1) ,
1399 & ttx(countcan:1:-1) ) /
1404 tke_int = integratetrapezoid(
1405 & zcanx(countcan:1:-1) ,
1406 & tkex(countcan:1:-1) ) /
1411 tkeh_int= integratetrapezoid(
1412 & zcanx(countcan:1:-1) ,
1413 & tkehx(countcan:1:-1) ) /
1418 tt_sum = sum( ttx(countcan:1:-1))/countcan
1421 u2_mod(i,k) = uu_int
1422 v2_mod(i,k) = vv_int
1424 ws2_mod(i,k) = sqrt(u2_mod(i,k)**2+v2_mod(i,k)**2)
1427 t2_mod(i,k) = tt_int
1430 q2_mod(i,k, ntke) = tke_int
1431 q2_mod(i,k, ntke) = max(q2_mod(i,k, ntke), tkmin)
1434 tkeh_mod(i,k) = tkeh_int
1435 tkeh_mod(i,k) = max(tkeh_mod(i,k), tkmin)
1459 IF (frt_mask(i) > 0.)
THEN
1463 du_mod(i,k) = (u2_mod(i,k) - u1(i,k) )*rdt
1464 dv_mod(i,k) = (v2_mod(i,k) - v1(i,k) )*rdt
1466 duv_mod(i,k) = (ws2_mod(i,k) - ws1(i,k) )*rdt
1469 tdt_mod(i,k) = (t2_mod(i,k) - t1(i,k) )*rdt
1472 rtg_mod(i,k, 1:ntrac1) = (q2_mod(i,k, 1:ntrac1) -
1473 & q1(i,k, 1:ntrac1))*rdt
1475 rtg_mod(i,k, ntke) = (q2_mod(i,k, ntke) -
1476 & q1(i,k, ntke) )*rdt
1491 IF (frt_mask(i) > 0.)
THEN
1554 DO n = ntchs-1, ntche-1
1560 IF (frt_mask(i) > 0.)
THEN
1565 rtg(i,k, n) = rtg_mod(i,k, n)