36 SUBROUTINE myjsfc_wrapper_run( &
40 ntcw,ntiw,ntrw,ntsw,ntgl, &
42 ugrs, vgrs, tgrs, qgrs, &
44 prsik_1, prslk_1, tsfc, qsfc, &
45 phy_myj_qsfc, phy_myj_thz0, phy_myj_qz0, &
46 phy_myj_uz0, phy_myj_vz0, phy_myj_z0base, &
47 phy_myj_akhs, phy_myj_akms, &
48 phy_myj_chkqlm, phy_myj_elflx, &
49 phy_myj_a1u, phy_myj_a1t, phy_myj_a1q, &
50 pblh, slmsk, zorl, ustar, rib, &
51 cm,ch,stress,ffm,ffh,fm10,fh2, &
52 landfrac, oceanfrac,fice, &
53 z0rl_wat, z0rl_lnd, z0rl_ice, & ! intent(inout)
54 ustar_wat, ustar_lnd, ustar_ice, &
55 cm_wat, cm_lnd, cm_ice, &
56 ch_wat, ch_lnd, ch_ice, &
57 rb_wat, rb_lnd, rb_ice, &
58 stress_wat,stress_lnd,stress_ice, &
59 fm_wat, fm_lnd, fm_ice, &
60 fh_wat, fh_lnd, fh_ice, &
61 fm10_wat, fm10_lnd, fm10_ice, &
62 fh2_wat, fh2_lnd, fh2_ice, &
63 wind, con_cp, con_g, con_rd, &
64 me, lprnt, errmsg, errflg )
96 character(len=*),
intent(out) :: errmsg
97 integer,
intent(out) :: errflg
100 integer,
intent(in) :: im, levs
101 integer,
intent(in) :: kdt, iter, me
102 integer,
intent(in) :: ntrac,ntke,ntcw,ntiw,ntrw,ntsw,ntgl
103 logical,
intent(in) :: restart, lprnt
104 real(kind=kind_phys),
intent(in) :: con_cp, con_g, con_rd
107 logical,
dimension(:),
intent(in) :: flag_iter
108 real(kind=kind_phys),
dimension(:),
intent(in) :: &
109 prsik_1, prslk_1, tsfc, qsfc, slmsk
110 real(kind=kind_phys),
dimension(:),
intent(inout),
optional :: &
111 phy_myj_thz0, phy_myj_z0base, phy_myj_chkqlm, &
112 phy_myj_akhs, phy_myj_akms, phy_myj_qz0, &
113 phy_myj_qsfc, phy_myj_elflx, phy_myj_a1u, &
114 phy_myj_a1t, phy_myj_a1q, phy_myj_uz0, &
116 real(kind=kind_phys),
dimension(:),
intent(inout) :: &
117 pblh, zorl, ustar, rib
118 real(kind=kind_phys),
dimension(:),
intent(inout) :: &
119 cm, ch, stress, ffm, ffh, fm10, fh2
120 real(kind=kind_phys),
dimension(:),
intent(inout) :: &
121 landfrac, oceanfrac, fice
122 real(kind=kind_phys),
dimension(:),
intent(inout) :: &
123 z0rl_wat, z0rl_lnd, z0rl_ice, &
124 ustar_wat, ustar_lnd, ustar_ice, &
125 cm_wat, cm_lnd, cm_ice, &
126 ch_wat, ch_lnd, ch_ice, &
127 rb_wat, rb_lnd, rb_ice, &
128 stress_wat,stress_lnd,stress_ice, &
129 fm_wat, fm_lnd, fm_ice, &
130 fh_wat, fh_lnd, fh_ice, &
131 fm10_wat, fm10_lnd, fm10_ice, &
132 fh2_wat, fh2_lnd, fh2_ice, &
137 real(kind=kind_phys),
dimension(:,:),
intent(in) :: &
139 real(kind=kind_phys),
dimension(:,:),
intent(in) :: &
140 ugrs, vgrs, tgrs, prsl
142 real(kind=kind_phys),
dimension(:,:,:),
intent(in) :: &
146 logical :: lprnt1, lprnt2
147 integer :: ntsd, k, k1, i, n, ide, jde, kde
149 real(kind=kind_phys) :: g, r_d, g_inv, cappa
150 real(kind=kfpt),
dimension(levs) :: epsq2
151 real(kind=kfpt),
dimension(im) :: &
152 sfcz,tsk,xland,mavail,rmol, &
153 ustar1,z0,rib1,sm,pblh_myj
154 real(kind=kfpt),
dimension(im,13) :: &
156 real(kind=kfpt),
dimension(im,levs) :: &
157 u_myj, v_myj, t_myj, q_myj, th_myj, &
158 cw, dz_myj, pmid, q2, exner
159 real(kind=kfpt),
dimension(im,levs+1) :: pint
160 real(kind=kfpt),
dimension(im) :: &
161 cm1,ch1,stress1,ffm1,ffh1,wind1,ffm10,ffh2
176 print*,
'in myj surface layer wrapper...'
177 print*,
'ntsd,iter=',ntsd,iter
184 cappa = con_rd/con_cp
186 if (ntsd==0.and.iter==1)
then
189 phy_myj_qsfc(i) = qgrs(i,1,1)
190 phy_myj_thz0(i) = tsfc(i)
191 phy_myj_qz0(i) = qgrs(i,1,1)
194 phy_myj_z0base(i) = zorl(i)*0.01
195 phy_myj_akhs(i) = 0.01
196 phy_myj_akms(i) = 0.01
197 phy_myj_chkqlm(i) = 0.
198 phy_myj_elflx(i) = 0.
208 sm(i)=1.;
if(slmsk(i) > 0.5 ) sm(i)=0.
210 sfcz(i)=phii(i,1)*g_inv
216 u_myj(i,k)=ugrs(i,k1)
217 v_myj(i,k)=vgrs(i,k1)
218 t_myj(i,k)=tgrs(i,k1)
219 q_myj(i,k)=qgrs(i,k1,1)
220 cw(i,k) =qgrs(i,k1,ntcw)
226 q2(i,k) =qgrs(i,k1,ntke)*2.
230 pmid(i,k) =prsl(i,k1)
231 exner(i,k)=(prsl(i,k1)*1.e-5)**cappa
232 th_myj(i,k)=tgrs(i,k1)/exner(i,k)
238 pint(i,k) =prsi(i,k1)
245 dz_myj(i,k) = (phii(i,k1+1)-phii(i,k1)) * g_inv
250 if(me==0.and.ntsd.lt.2)
then
253 print*,
'Qingfu starts MYJSFC'
254 print*,
'ntsd,iter,me,1=',ntsd,iter,me
255 print*,
'ntrac,ntcw,ntiw,ntrw,ntsw,ntgl,ntke=', &
256 ntrac,ntcw,ntiw,ntrw,ntsw,ntgl,ntke
257 print*,
'im,levs,ntsd=',im,levs,ntsd
259 print*,
'Qingfu before MYJ surface kdt,i,k1=',kdt,i,k1
260 print*,
'sfcz,dz_myj,th_myj,tsfc,qsfc=',sfcz(i),dz_myj(i,k), &
261 th_myj(i,k),tsfc(i),qsfc(i)
262 print*,
'sm,z0,xland=', &
266 print*,
'u_myj,v_myj=', &
267 u_myj(i,k),v_myj(i,k)
268 print*,
't_myj,q_myj,cw,q2=', &
269 t_myj(i,k),q_myj(i,k),cw(i,k),q2(i,k)
270 print*,
'phii,pint,pmid', &
271 phii(i,k1),pint(i,k),pmid(i,k)
272 print*,
'exner,th_myj=',exner(i,k),th_myj(i,k)
286 phy_f2d_myj(i,1) = phy_myj_qsfc(i)
287 phy_f2d_myj(i,2) = phy_myj_thz0(i)
288 phy_f2d_myj(i,3) = phy_myj_qz0(i)
289 phy_f2d_myj(i,4) = phy_myj_uz0(i)
290 phy_f2d_myj(i,5) = phy_myj_vz0(i)
291 phy_f2d_myj(i,6) = phy_myj_z0base(i)
292 phy_f2d_myj(i,7) = phy_myj_akhs(i)
293 phy_f2d_myj(i,8) = phy_myj_akms(i)
294 phy_f2d_myj(i,9) = phy_myj_chkqlm(i)
295 phy_f2d_myj(i,10) = phy_myj_elflx(i)
296 phy_f2d_myj(i,11) = phy_myj_a1u(i)
297 phy_f2d_myj(i,12) = phy_myj_a1t(i)
298 phy_f2d_myj(i,13) = phy_myj_a1q(i)
314 if((ntsd==0.and.iter.eq.1).or.restart)
then
315 call jsfc_init(ustar1,restart &
321 call jsfc(flag_iter,iter,me &
322 ,ntsd,epsq2,sfcz,dz_myj &
323 ,pmid,pint,th_myj,t_myj,q_myj,cw &
324 ,u_myj,v_myj,q2,tsk &
325 ,phy_f2d_myj(1:im,1),phy_f2d_myj(1:im,2) &
326 ,phy_f2d_myj(1:im,3),phy_f2d_myj(1:im,4) &
327 ,phy_f2d_myj(1:im,5),xland &
328 ,ustar1,z0,phy_f2d_myj(1:im,6) &
329 ,pblh_myj,mavail,rmol &
330 ,phy_f2d_myj(1:im,7),phy_f2d_myj(1:im,8) &
331 ,phy_f2d_myj(1:im,9),phy_f2d_myj(1:im,10) &
332 ,rib1,cm1,ch1,stress1,ffm1,ffh1,wind1,ffm10,ffh2 &
333 ,phy_f2d_myj(1:im,11),phy_f2d_myj(1:im,12) &
334 ,phy_f2d_myj(1:im,13) &
337 ,1,im,1,1,1,levs, errmsg, errflg)
343 phy_myj_qsfc(i) = phy_f2d_myj(i,1)
344 phy_myj_thz0(i) = phy_f2d_myj(i,2)
345 phy_myj_qz0(i) = phy_f2d_myj(i,3)
346 phy_myj_uz0(i) = phy_f2d_myj(i,4)
347 phy_myj_vz0(i) = phy_f2d_myj(i,5)
348 phy_myj_z0base(i) = phy_f2d_myj(i,6)
349 phy_myj_akhs(i) = phy_f2d_myj(i,7)
350 phy_myj_akms(i) = phy_f2d_myj(i,8)
351 phy_myj_chkqlm(i) = phy_f2d_myj(i,9)
352 phy_myj_elflx(i) = - phy_f2d_myj(i,10)
353 phy_myj_a1u(i) = phy_f2d_myj(i,11)
354 phy_myj_a1t(i) = phy_f2d_myj(i,12)
355 phy_myj_a1q(i) = phy_f2d_myj(i,13)
373 if(me==0.and.ntsd.lt.10)
then
374 print*,
'ntsd,iter,me,2=',ntsd,iter,me
377 print*,
'Qingfu after MYJ surface kdt,i,k1=',kdt,i,k1
378 print*,
'xland,cm,ch=',xland(i),cm(i),ch(i)
379 print*,
'ustar,z0,stress=',ustar(i),z0(i),stress(i)
380 print*,
'ffm,ffh,wind,fm10,fh2=',ffm(i),ffh(i),wind(i),fm10(i),fh2(i)
381 print*,
'phy_f2d_myj(9,1:13)=', &
382 (phy_f2d_myj(i,n),n=1,13)
383 print*,
'u_myj,v_myj=', &
384 u_myj(i,k),v_myj(i,k)
385 print*,
't_myj,q_myj,cw,q2=', &
386 t_myj(i,k),q_myj(i,k),cw(i,k),q2(i,k)
387 print*,
'phii,pint,pmid', &
388 phii(i,k1),pint(i,k),pmid(i,k)
389 print*,
'exner,th_myj=',exner(i,k),th_myj(i,k)
390 print*,
'Qingfu finish MYJSFC'
398 if(t_myj(i,k).gt.320..or.t_myj(i,k).lt.150.)
then
399 print*,
'xland,cm,ch=',xland(i),cm(i),ch(i)
400 print*,
'ustar,z0,stress=',ustar(i),z0(i),stress(i)
401 print*,
'ffm,ffh,wind,fm10,fh2=',ffm(i),ffh(i),wind(i),fm10(i),fh2(i)
402 print*,
'phy_f2d_myj(9,1:13)=', &
403 (phy_f2d_myj(i,n),n=1,13)
404 print*,
'u_myj,v_myj=', &
405 u_myj(i,k),v_myj(i,k)
406 print*,
't_myj,q_myj,cw,q2=', &
407 t_myj(i,k),q_myj(i,k),cw(i,k),q2(i,k)
408 print*,
'phii,pint,pmid', &
409 phii(i,k1),pint(i,k),pmid(i,k)
410 print*,
'exner,th_myj=',exner(i,k),th_myj(i,k)
411 print*,
'Qingfu finish MYJSFC'
420 z0rl_wat(i) = zorl(i)
424 stress_wat(i) = stress(i)
427 ustar_wat(i) = ustar(i)
428 fm10_wat(i) = fm10(i)
431 z0rl_lnd(i) = zorl(i)
435 stress_lnd(i) = stress(i)
438 ustar_lnd(i) = ustar(i)
439 fm10_lnd(i) = fm10(i)
442 z0rl_ice(i) = zorl(i)
446 stress_ice(i) = stress(i)
449 ustar_ice(i) = ustar(i)
450 fm10_ice(i) = fm10(i)
456 if(me==0.and.ntsd.lt.10)
then
457 print*,
'ntsd,iter,me,3=',ntsd,iter,me
460 print*,
'Qingfu after MYJ surface kdt,i,k1,3=',kdt,i,k1
461 print*,
'Qingfu test after MYJ surface kdt,i=',kdt,i,slmsk(i)
462 print*,
'a1u,a1t,a1q=',(phy_f2d_myj(i,k),k=11,13)
463 print*,
'zorl,cm,ch,rb,stress=',z0(i), &
466 print*,
'ffmm,ffhh,ustar,fm10,fh2,wind=', ffm(i), &
467 ffh(i),ustar(i),fm10(i),fh2(i),wind(i)
468 print*,
'cm(i),ch(i)=', &
469 (0.4/ffm(i))**2,(0.4/ffm(i)*0.4/ffh(i))