49 USE modi_get_adjacent_meshes
52 USE yomhook
,ONLY : lhook, dr_hook
53 USE parkind1
,ONLY : jprb
65 LOGICAL,
DIMENSION(:),
INTENT(OUT) :: oz0effi
70 LOGICAL,
DIMENSION(:),
INTENT(OUT) :: oz0effj
75 REAL,
DIMENSION(:),
INTENT(IN) :: psea
88 INTEGER,
DIMENSION(NL) :: ileft
89 INTEGER,
DIMENSION(NL) :: iright
90 INTEGER,
DIMENSION(NL) :: itop
91 INTEGER,
DIMENSION(NL) :: ibottom
96 INTEGER :: iho2counterjp
97 INTEGER :: iho2counterjm
98 INTEGER :: iho2counterip
99 INTEGER :: iho2counterim
100 INTEGER :: iaoscounter
108 REAL,
DIMENSION(NSSO) :: zaosip
109 REAL,
DIMENSION(NSSO) :: zaosim
110 REAL,
DIMENSION(NSSO) :: zaosjp
111 REAL,
DIMENSION(NSSO) :: zaosjm
128 REAL,
DIMENSION(NL) :: zdx
129 REAL,
DIMENSION(NL) :: zdy
130 REAL,
DIMENSION(0:NL) :: zslopeip
131 REAL,
DIMENSION(0:NL) :: zslopejp
132 REAL(KIND=JPRB) :: zhook_handle
141 IF (lhook) CALL dr_hook(
'SUBSCALE_AOS',0,zhook_handle)
148 CALL
get_mesh_dim(cgrid,ngrid_par,nl,xgrid_par,zdx,zdy,ug%XMESH_SIZE)
164 IF (iright(jl)/=0 .AND. ileft(jl)/=0)
THEN
165 zslopeip(jl) = 0.5 * ( uss%XAVG_ZS(iright(jl)) - uss%XAVG_ZS(jl) ) &
166 / ( 0.5 * (zdx(iright(jl)) + zdx(jl)) ) &
167 + 0.5 * ( uss%XAVG_ZS(jl) - uss%XAVG_ZS(ileft(jl)) ) &
168 / ( 0.5 * (zdx(jl) + zdx(ileft(jl))) )
172 IF (itop(jl)/=0 .AND. ibottom(jl)/=0)
THEN
173 zslopejp(jl) = 0.5 * ( uss%XAVG_ZS(itop(jl)) - uss%XAVG_ZS(jl) ) &
174 / ( 0.5 * (zdy(itop(jl)) + zdy(jl)) ) &
175 + 0.5 * ( uss%XAVG_ZS(jl) - uss%XAVG_ZS(ibottom(jl)) ) &
176 / ( 0.5 * (zdy(jl) + zdy(ibottom(jl))) )
192 IF (psea(jl)==1.) cycle
197 zdxeff=zdx(jl)/float(nsso)
198 zdyeff=zdy(jl)/float(nsso)
235 IF (.NOT. lssqo(jiss,jjss,jl) ) cycle
240 IF (jiss+jnext>nsso)
THEN
242 inext = jiss+jnext-nsso
250 IF (lssqo(inext,jjss,il))
EXIT
256 IF (jnext>=nsso+1)
EXIT
266 IF (gfirst) iaoscounter=iaoscounter+1
268 iaosdist =iaosdist+jnext
276 zssaos = xssqo(inext,jjss,il) - xssqo(jiss,jjss,jl) &
277 - zslope * zdxeff * jnext
278 IF (zssaos>0.) zaip=zaip+zssaos
279 IF (zssaos<0.) zaim=zaim-zssaos
284 zsumho2ip = zsumho2ip + 0.5 * zssaos
285 iho2counterip=iho2counterip+1
288 zsumho2im = zsumho2im - 0.5 * zssaos
289 iho2counterim=iho2counterim+1
297 zaosip(jjss)=zaip/(zdxeff*iaosdist)
298 zaosim(jjss)=zaim/(zdxeff*iaosdist)
309 IF (iaoscounter>0)
THEN
310 uss%XAOSIP(jl)=sum(zaosip) / iaoscounter
311 uss%XAOSIM(jl)=sum(zaosim) / iaoscounter
312 IF (iho2counterip>0)
THEN
313 uss%XHO2IP(jl)=zsumho2ip / iho2counterip
317 IF (iho2counterim>0)
THEN
318 uss%XHO2IM(jl)=zsumho2im / iho2counterim
360 IF (.NOT. lssqo(jiss,jjss,jl) ) cycle
365 IF (jjss+jnext>nsso)
THEN
367 inext = jjss+jnext-nsso
375 IF (lssqo(jiss,inext,il))
EXIT
381 IF (jnext>=nsso+1)
EXIT
392 IF (gfirst) iaoscounter=iaoscounter+1
394 iaosdist =iaosdist+jnext
402 zssaos = xssqo(jiss,inext,il) - xssqo(jiss,jjss,jl) &
403 - zslope * zdyeff * jnext
404 IF (zssaos>0.) zajp=zajp+zssaos
405 IF (zssaos<0.) zajm=zajm-zssaos
410 zsumho2jp = zsumho2jp + 0.5 * zssaos
411 iho2counterjp=iho2counterjp+1
414 zsumho2jm = zsumho2jm - 0.5 * zssaos
415 iho2counterjm=iho2counterjm+1
423 zaosjp(jiss)=zajp/(zdyeff*iaosdist)
424 zaosjm(jiss)=zajm/(zdyeff*iaosdist)
435 IF (iaoscounter>0)
THEN
436 uss%XAOSJP(jl)=sum(zaosjp) /iaoscounter
437 uss%XAOSJM(jl)=sum(zaosjm) /iaoscounter
438 IF (iho2counterjp>0)
THEN
439 uss%XHO2JP(jl)=zsumho2jp /iho2counterjp
443 IF (iho2counterjm>0)
THEN
444 uss%XHO2JM(jl)=zsumho2jm /iho2counterjm
457 IF (lhook) CALL dr_hook(
'SUBSCALE_AOS',1,zhook_handle)
subroutine get_adjacent_meshes(HGRID, KGRID_PAR, KL, PGRID_PAR, KLEFT, KRIGHT, KTOP, KBOTTOM)
subroutine get_mesh_dim(HGRID, KGRID_PAR, KL, PGRID_PAR, PDX, PDY, PMESHSIZE)
subroutine subscale_aos(UG, USS, OZ0EFFI, OZ0EFFJ, PSEA)