49 USE modi_get_adjacent_meshes
64 TYPE(
sso_t),
INTENT(INOUT) :: USS
66 LOGICAL,
DIMENSION(:),
INTENT(OUT) :: OZ0EFFI
71 LOGICAL,
DIMENSION(:),
INTENT(OUT) :: OZ0EFFJ
87 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ILEFT
88 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IRIGHT
89 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITOP
90 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IBOTTOM
95 INTEGER :: IHO2COUNTERJP
96 INTEGER :: IHO2COUNTERJM
97 INTEGER :: IHO2COUNTERIP
98 INTEGER :: IHO2COUNTERIM
99 INTEGER :: IAOSCOUNTER
107 REAL,
DIMENSION(NSSO) :: ZAOSIP
108 REAL,
DIMENSION(NSSO) :: ZAOSIM
109 REAL,
DIMENSION(NSSO) :: ZAOSJP
110 REAL,
DIMENSION(NSSO) :: ZAOSJM
127 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISSO, ISSOT
128 INTEGER,
DIMENSION(:,:,:),
ALLOCATABLE :: ISSQOT, ISSQO
129 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZSSQO
130 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: GZ0EFFI, GZ0EFFJ
131 REAL,
DIMENSION(:),
ALLOCATABLE :: ZDX, ZDY, ZSEA, ZAVG_ZS, ZMESH_SIZE
132 REAL,
DIMENSION(:),
ALLOCATABLE :: ZAOSIP_ALL, ZAOSIM_ALL, ZAOSJP_ALL,
133 REAL,
DIMENSION(:),
ALLOCATABLE :: ZHO2IP_ALL, ZHO2IM_ALL, ZHO2JP_ALL,
136 REAL(KIND=JPRB) :: ZHOOK_HANDLE
150 ALLOCATE(zsea(u%NDIM_FULL))
151 ALLOCATE(zavg_zs(u%NDIM_FULL))
152 ALLOCATE(zmesh_size(u%NDIM_FULL))
153 ALLOCATE(issqot(u%NDIM_FULL,
nsso,
nsso))
154 ALLOCATE(zssqo(u%NDIM_FULL,
nsso,
nsso))
158 ALLOCATE(issqot(0,0,0))
159 ALLOCATE(zssqo(0,0,0))
169 WHERE (
lssqo(:,:,:)) issqo(:,:,:) = 1
178 ALLOCATE(zdx(u%NDIM_FULL),zdy(u%NDIM_FULL))
179 CALL get_mesh_dim(ug%G%CGRID,ug%NGRID_FULL_PAR,u%NDIM_FULL,ug%XGRID_FULL_PAR
180 DEALLOCATE(zmesh_size)
186 ALLOCATE(ileft(u%NDIM_FULL),iright(u%NDIM_FULL),itop(u%NDIM_FULL),ibottom
190 ALLOCATE(gz0effi(u%NDIM_FULL),gz0effj(u%NDIM_FULL))
191 ALLOCATE(zho2im_all(u%NDIM_FULL),zho2ip_all(u%NDIM_FULL),&
192 zaosim_all(u%NDIM_FULL),zaosip_all(u%NDIM_FULL))
193 ALLOCATE(zho2jm_all(u%NDIM_FULL),zho2jp_all(u%NDIM_FULL),&
194 zaosjm_all(u%NDIM_FULL),zaosjp_all(u%NDIM_FULL))
207 IF (iright(jl)/=0 .AND. ileft(jl)/=0)
THEN 208 zslopeip = 0.5 * ( zavg_zs(iright(jl)) - zavg_zs(jl) ) &
209 / ( 0.5 * (zdx(iright(jl)) + zdx(jl)) ) &
210 + 0.5 * ( zavg_zs(jl) - zavg_zs(ileft(jl)) ) &
211 / ( 0.5 * (zdx(jl) + zdx(ileft(jl))) )
215 IF (itop(jl)/=0 .AND. ibottom(jl)/=0)
THEN 216 zslopejp = 0.5 * ( zavg_zs(itop(jl)) - zavg_zs(jl) ) &
217 / ( 0.5 * (zdy(itop(jl)) + zdy(jl)) ) &
218 + 0.5 * ( zavg_zs(jl) - zavg_zs(ibottom(jl)) ) &
219 / ( 0.5 * (zdy(jl) + zdy(ibottom(jl))) )
232 IF (zsea(jl)==1.) cycle
237 zdxeff=zdx(jl)/float(
nsso)
238 zdyeff=zdy(jl)/float(
nsso)
275 IF (issqot(jl,jiss,jjss)==0 ) cycle
280 IF (jiss+jnext>
nsso)
THEN 282 inext = jiss+jnext-
nsso 290 IF (issqot(il,inext,jjss)==1)
EXIT 296 IF (jnext>=
nsso+1)
EXIT 306 IF (gfirst) iaoscounter=iaoscounter+1
308 iaosdist =iaosdist+jnext
316 zssaos = zssqo(il,inext,jjss) - zssqo(jl,jiss,jjss) &
317 - zslope * zdxeff * jnext
318 IF (zssaos>0.) zaip=zaip+zssaos
319 IF (zssaos<0.) zaim=zaim-zssaos
324 zsumho2ip = zsumho2ip + 0.5 * zssaos
325 iho2counterip=iho2counterip+1
328 zsumho2im = zsumho2im - 0.5 * zssaos
329 iho2counterim=iho2counterim+1
337 zaosip(jjss)=zaip/(zdxeff*iaosdist)
338 zaosim(jjss)=zaim/(zdxeff*iaosdist)
349 IF (iaoscounter>0)
THEN 350 zaosip_all(jl)=
sum(zaosip) / iaoscounter
351 zaosim_all(jl)=
sum(zaosim) / iaoscounter
352 IF (iho2counterip>0)
THEN 353 zho2ip_all(jl)=zsumho2ip / iho2counterip
357 IF (iho2counterim>0)
THEN 358 zho2im_all(jl)=zsumho2im / iho2counterim
400 IF (issqot(jl,jiss,jjss)==0 ) cycle
405 IF (jjss+jnext>
nsso)
THEN 407 inext = jjss+jnext-
nsso 415 IF (issqot(il,jiss,inext)==1)
EXIT 421 IF (jnext>=
nsso+1)
EXIT 432 IF (gfirst) iaoscounter=iaoscounter+1
434 iaosdist =iaosdist+jnext
442 zssaos = zssqo(il,jiss,inext) - zssqo(jl,jiss,jjss) &
443 - zslope * zdyeff * jnext
444 IF (zssaos>0.) zajp=zajp+zssaos
445 IF (zssaos<0.) zajm=zajm-zssaos
450 zsumho2jp = zsumho2jp + 0.5 * zssaos
451 iho2counterjp=iho2counterjp+1
454 zsumho2jm = zsumho2jm - 0.5 * zssaos
455 iho2counterjm=iho2counterjm+1
463 zaosjp(jiss)=zajp/(zdyeff*iaosdist)
464 zaosjm(jiss)=zajm/(zdyeff*iaosdist)
475 IF (iaoscounter>0)
THEN 476 zaosjp_all(jl)=
sum(zaosjp) /iaoscounter
477 zaosjm_all(jl)=
sum(zaosjm) /iaoscounter
478 IF (iho2counterjp>0)
THEN 479 zho2jp_all(jl)=zsumho2jp /iho2counterjp
483 IF (iho2counterjm>0)
THEN 484 zho2jm_all(jl)=zsumho2jm /iho2counterjm
494 ALLOCATE(zho2im_all(0),zho2ip_all(0),zaosim_all(0),zaosip_all(0))
495 ALLOCATE(zho2jm_all(0),zho2jp_all(0),zaosjm_all(0),zaosjp_all(0))
498 DEALLOCATE(zssqo,issqot)
506 DEALLOCATE(zho2im_all,zho2ip_all,zaosim_all,zaosip_all)
512 DEALLOCATE(zho2jm_all,zho2jp_all,zaosjm_all,zaosjp_all)
515 ALLOCATE(issot(u%NDIM_FULL))
517 WHERE (gz0effi(:)) issot(:) = 1
524 WHERE(isso(:)==1) oz0effi(:) = .true.
528 WHERE (gz0effj(:)) issot(:) = 1
532 WHERE(isso(:)==1) oz0effj(:) = .true.
logical, dimension(:,:,:), allocatable lssqo
subroutine get_adjacent_meshes(HGRID, KGRID_PAR, KL, PGRID_PAR, KLEFT,
subroutine subscale_aos(U, UG, USS, OZ0EFFI, OZ0EFFJ)
real, dimension(:,:,:), allocatable xssqo
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
subroutine get_mesh_dim(HGRID, KGRID_PAR, KL, PGRID_PAR, PDX, PDY, PMESH