6 SUBROUTINE sso (U, UG, USS, OSSO, OSSO_ANIS)
40 USE modi_get_adjacent_meshes
61 TYPE(
sso_t),
INTENT(INOUT) :: USS
63 LOGICAL,
DIMENSION(:),
INTENT(OUT) :: OSSO
68 LOGICAL,
DIMENSION(:),
INTENT(OUT) :: OSSO_ANIS
92 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ILEFT, IRIGHT, ITOP, IBOTTOM
98 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISSO, ISSOT
99 INTEGER,
DIMENSION(:,:,:),
ALLOCATABLE :: ISSQOT, ISSQO
100 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: ZSSQO
101 LOGICAL,
DIMENSION(:,:,:),
ALLOCATABLE :: GSSQO
102 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: GSSO, GSSO_ANIS
104 REAL,
DIMENSION(NSSO,NSSO) :: ZDZSDX
105 REAL,
DIMENSION(NSSO,NSSO) :: ZDZSDY
106 LOGICAL,
DIMENSION(NSSO,NSSO) :: GDZSDX
107 LOGICAL,
DIMENSION(NSSO,NSSO) :: GDZSDY
116 REAL,
DIMENSION(:),
ALLOCATABLE :: ZDX, ZDY, ZSEA, ZMESH_SIZE
117 REAL,
DIMENSION(:),
ALLOCATABLE :: ZHXX0, ZHXY0, ZHYY0
118 REAL,
DIMENSION(NL) :: ZHXX
119 REAL,
DIMENSION(NL) :: ZHXY
120 REAL,
DIMENSION(NL) :: ZHYY
121 REAL,
DIMENSION(NL) :: ZK, ZL, ZM
122 REAL(KIND=JPRB) :: ZHOOK_HANDLE
145 ALLOCATE(zsea(u%NDIM_FULL))
146 ALLOCATE(zmesh_size(u%NDIM_FULL))
147 ALLOCATE(zssqo(u%NDIM_FULL,
nsso,
nsso))
148 ALLOCATE(issqot(u%NDIM_FULL,
nsso,
nsso))
151 ALLOCATE(zssqo(0,0,0))
152 ALLOCATE(issqot(0,0,0))
160 IF (
SIZE(issqo)/=0)
THEN 162 WHERE (
lssqo(:,:,:)) issqo(:,:,:) = 1
169 ALLOCATE(zdx(u%NDIM_FULL),zdy(u%NDIM_FULL))
171 DEALLOCATE(zmesh_size)
178 ALLOCATE(ileft(u%NDIM_FULL),iright(u%NDIM_FULL),itop(u%NDIM_FULL),ibottom
182 ALLOCATE(gsso(u%NDIM_FULL),gsso_anis(u%NDIM_FULL))
183 ALLOCATE(zhxx0(u%NDIM_FULL),zhxy0(u%NDIM_FULL),zhyy0(u%NDIM_FULL))
185 gsso_anis(:) = .false.
202 IF (zsea(jl)==1.) cycle
204 zdxeff=zdx(jl)/float(
nsso)
205 zdyeff=zdy(jl)/float(
nsso)
212 IF (
count( issqot(jl,:,:)==1) == 0 ) cycle
242 IF ( issqot(jl,jiss,jjss)==0 ) cycle
247 IF (jiss+jnext>
nsso)
THEN 249 inext = jiss+jnext-
nsso 257 IF (issqot(il,inext,jjss)==1)
EXIT 263 IF (jnext>=
nsso+1)
EXIT 273 imaxi = min(jiss+jnext-1,
nsso)
275 zdzsdx(jiss:imaxi,jjss) = ( zssqo(il,inext,jjss) - zssqo(jl,jiss
278 gdzsdx(jiss:imaxi,jjss) = .true.
284 IF (gbound .AND. jiss/=1)
THEN 286 IF (jiss-jprev<1)
THEN 288 iprev = jiss-jprev+
nsso 296 IF (issqot(il,iprev,jjss)==1)
EXIT 299 IF (.NOT. (jprev>=
nsso+1 .OR. il==0))
THEN 300 zdzsdx(1:jiss,jjss) = ( zssqo(jl,jiss,jjss) - zssqo(il,iprev
303 gdzsdx(1:jiss,jjss) = .true.
349 IF (issqot(jl,jiss,jjss)==0 ) cycle
354 IF (jjss+jnext>
nsso)
THEN 356 inext = jjss+jnext-
nsso 364 IF (issqot(il,jiss,inext)==1)
EXIT 370 IF (jnext>=
nsso+1)
EXIT 380 imaxj = min(jjss+jnext-1,
nsso)
382 zdzsdy(jiss,jjss:imaxj) = ( zssqo(il,jiss,inext) - zssqo(jl,jiss
385 gdzsdy(jiss,jjss:imaxj) = .true.
391 IF (gbound .AND. jjss/=1)
THEN 393 IF (jjss-jprev<1)
THEN 395 iprev = jjss-jprev+
nsso 403 IF (issqot(il,jiss,iprev)==1)
EXIT 406 IF (.NOT. (jprev>=
nsso+1 .OR. il==0))
THEN 407 zdzsdy(jiss,1:jjss) = ( zssqo(jl,jiss,jjss) - zssqo(il,jiss,iprev
410 gdzsdy(jiss,1:jjss) = .true.
437 icount =
count(gdzsdx(:,:).AND.gdzsdy(:,:))
440 IF ( icount==0 ) cycle
447 gsso_anis(jl)=icount>1
453 zhxx0(jl) =
sum(zdzsdx(:,:)*zdzsdx(:,:),
mask=gdzsdx(:,:).AND.gdzsdy(
458 zhyy0(jl) =
sum(zdzsdy(:,:)*zdzsdy(:,:),
mask=gdzsdx(:,:).AND.gdzsdy(
463 zhxy0(jl) =
sum(zdzsdx(:,:)*zdzsdy(:,:),
mask=gdzsdx(:,:).AND.gdzsdy(
474 ALLOCATE(zhxx0(0),zhyy0(0),zhxy0(0))
478 DEALLOCATE(zssqo,issqot)
485 DEALLOCATE(zhxx0,zhyy0,zhxy0)
488 ALLOCATE(issot(u%NDIM_FULL))
490 WHERE (gsso(:)) issot(:) = 1
497 WHERE(isso(:)==1) osso(:) = .true.
501 WHERE (gsso_anis(:)) issot(:) = 1
502 DEALLOCATE(gsso_anis)
505 WHERE(isso(:)==1) osso_anis(:) = .true.
520 zk(:)=0.5*(zhxx(:)+zhyy(:))
521 zl(:)=0.5*(zhxx(:)-zhyy(:))
533 WHERE (osso(:) .AND. zl(:)>1.e-30 )
534 uss%XSSO_DIR(:) = 0.5* atan(zm/zl) * (180./
xpi)
537 WHERE (osso(:) .AND. zl(:)<-1.e-30 )
538 uss%XSSO_DIR(:) = 0.5* atan(zm/zl) * (180./
xpi) + 90.
541 WHERE (osso(:) .AND. abs(zl(:))<=1.e-30 )
542 uss%XSSO_DIR(:) = 45.
545 WHERE (osso(:) .AND. uss%XSSO_DIR(:)>90. )
546 uss%XSSO_DIR(:) = uss%XSSO_DIR(:) - 180.
553 uss%XSSO_SLOPE(:) = sqrt( zk+sqrt(zl*zl+zm*zm) )
559 WHERE (osso_anis(:) .AND. (zk+sqrt(zl*zl+zm*zm)) >0. )
560 uss%XSSO_ANIS(:)=sqrt( max(zk-sqrt(zl*zl+zm*zm),0.) / (zk+sqrt(zl*zl+zm
563 WHERE (osso_anis(:) .AND. (zk+sqrt(zl*zl+zm*zm))==0. )
logical, dimension(:,:,:), allocatable lssqo
subroutine sso(U, UG, USS, OSSO, OSSO_ANIS)
subroutine get_adjacent_meshes(HGRID, KGRID_PAR, KL, PGRID_PAR, KLEFT,
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