10 use constants,
only: inttype, realtype, adtelementtype, alwaysrealtype
19 private :: adtbboxtargettypelessequal
20 private :: adtbboxtargettypeless
21 private :: adttypeassign
36 integer(kind=intType),
dimension(2) :: children
37 real(kind=realtype),
dimension(6) :: xmin, xmax
51 integer(kind=intType) :: id
52 real(kind=realtype) :: posdist2
61 interface operator(<=)
62 module procedure adtbboxtargettypelessequal
66 module procedure adtbboxtargettypeless
78 integer :: comm, nprocs, myid
87 character(len=64) :: adtid
98 integer(kind=intType) :: nnodes, ntria, nquads
99 integer(kind=intType) :: ntetra, npyra, nprisms, nhexa
104 real(kind=realtype),
dimension(:, :),
pointer :: coor
115 integer(kind=intType),
dimension(:, :),
pointer :: triaconn
116 integer(kind=intType),
dimension(:, :),
pointer :: quadsconn
117 integer(kind=intType),
dimension(:, :),
pointer :: tetraconn
118 integer(kind=intType),
dimension(:, :),
pointer :: pyraconn
119 integer(kind=intType),
dimension(:, :),
pointer :: prismsconn
120 integer(kind=intType),
dimension(:, :),
pointer :: hexaconn
131 integer :: nrootleaves, myentryinrootprocs
132 integer,
dimension(:),
pointer :: rootleavesprocs
133 real(kind=realtype),
dimension(:, :, :),
pointer :: rootbboxes
144 integer(kind=intType) :: nbboxes
146 integer(kind=adtElementType),
dimension(:),
pointer :: elementtype
147 integer(kind=intType),
dimension(:),
pointer :: elementid
148 real(kind=realtype),
dimension(:, :),
pointer :: xbbox
155 integer(kind=intType) :: nleaves
162 interface assignment(=)
163 module procedure adttypeassign
211 logical function adtbboxtargettypelessequal(g1, g2)
230 if (g1%posDist2 < g2%posDist2)
then
231 adtbboxtargettypelessequal = .true.
233 else if (g1%posDist2 > g2%posDist2)
then
234 adtbboxtargettypelessequal = .false.
240 if (g1%ID < g2%ID)
then
241 adtbboxtargettypelessequal = .true.
243 else if (g1%ID > g2%ID)
then
244 adtbboxtargettypelessequal = .false.
250 adtbboxtargettypelessequal = .true.
252 end function adtbboxtargettypelessequal
256 logical function adtbboxtargettypeless(g1, g2)
275 if (g1%posDist2 < g2%posDist2)
then
276 adtbboxtargettypeless = .true.
278 else if (g1%posDist2 > g2%posDist2)
then
279 adtbboxtargettypeless = .false.
285 if (g1%ID < g2%ID)
then
286 adtbboxtargettypeless = .true.
288 else if (g1%ID > g2%ID)
then
289 adtbboxtargettypeless = .false.
295 adtbboxtargettypeless = .false.
297 end function adtbboxtargettypeless
301 subroutine adttypeassign(g1, g2)
318 type(
adttype),
intent(in) :: g2
319 type(
adttype),
intent(out) :: g1
322 g1%nProcs = g2%nProcs
324 g1%adtType = g2%adtType
326 g1%isActive = g2%isActive
328 g1%nNodes = g2%nNodes
330 g1%nQuads = g2%nQuads
331 g1%nTetra = g2%nTetra
333 g1%nPrisms = g2%nPrisms
337 g1%triaConn => g2%triaConn
338 g1%quadsConn => g2%quadsConn
339 g1%tetraConn => g2%tetraConn
340 g1%pyraConn => g2%pyraConn
341 g1%prismsConn => g2%prismsConn
342 g1%hexaConn => g2%hexaConn
344 g1%nRootLeaves = g2%nRootLeaves
345 g1%myEntryInRootProcs = g2%myEntryInRootProcs
346 g1%rootLeavesProcs => g2%rootLeavesProcs
347 g1%rootBBoxes => g2%rootBBoxes
349 g1%nBBoxes = g2%nBBoxes
350 g1%elementType => g2%elementType
351 g1%elementID => g2%elementID
354 g1%nLeaves = g2%nLeaves
355 g1%ADTree => g2%ADTree
357 end subroutine adttypeassign
integer(kind=inttype) nrounds
integer(kind=inttype) ncoormax
integer, dimension(:), allocatable procrecv
integer(kind=inttype), dimension(:), allocatable ncoorprocrecv
integer(kind=inttype), dimension(:), allocatable coorperrootleaf
integer(kind=inttype) nlocalinterpol
type(adttype), dimension(:), allocatable, target adts
integer(kind=inttype), dimension(:), allocatable ncoorperrootleaf
integer(kind=inttype), dimension(:), allocatable mcoorperrootleaf