32 type(
adttype),
intent(inout) :: ADT
38 integer(kind=intType) :: i, j, k, ii, kk, ll, mm, nn, nfl, nfr
39 integer(kind=intType) :: nLeaves, nBBoxes, splitDir
40 integer(kind=intType) :: nLeavesToDivide, nLeavesToDivideNew
41 integer(kind=intType) :: nLeavesTot
43 integer(kind=intType),
dimension(:),
pointer :: BB_IDs
44 integer(kind=intType),
dimension(:),
pointer :: BB_IDsNew
45 integer(kind=intType),
dimension(:),
pointer :: nBB_IDs
46 integer(kind=intType),
dimension(:),
pointer :: nBB_IDsNew
47 integer(kind=intType),
dimension(:),
pointer :: curLeaf
48 integer(kind=intType),
dimension(:),
pointer :: curLeafNew
49 integer(kind=intType),
dimension(:),
pointer :: tmpIntPointer
51 integer(kind=intType),
dimension(0:ADT%nProcs - 1) :: tmpArr
53 real(kind=realtype),
dimension(:, :),
pointer :: xbbox
55 real(kind=realtype),
dimension(3, 2) :: rootleafbbox
56 real(kind=realtype),
dimension(3, 2, 0:ADT%nProcs - 1) :: &
71 "Memory allocation failure for stack.")
80 if (nbboxes <= 1) nleaves = nleaves + 1
86 allocate (adt%ADTree(nleaves), stat=ierr)
89 "Memory allocation failure for ADTree.")
99 nn = (nbboxes + 1) / 2
100 nn = max(nn, 1_inttype)
102 allocate (bb_ids(nbboxes), bb_idsnew(nbboxes), &
103 nbb_ids(0:nn), nbb_idsnew(0:nn), &
104 curleaf(nn), curleafnew(nn), stat=ierr)
107 "Memory allocation failure for the arrays &
108 &used in the subdivision.")
115 nbb_ids(0) = 0; nbb_ids(1) = nbboxes
122 nleavestodivide = min(nleaves, 1_inttype)
123 nleavestot = nleavestodivide
137 if (nleavestodivide == 0)
exit
142 nleavestodividenew = 0
145 splitdir = splitdir + 1
146 if (splitdir > 6) splitdir = 1
150 currentleavesloop:
do i = 1, nleavestodivide
156 nn = nbb_ids(i) - nbb_ids(ii)
161 ll = bb_ids(nbb_ids(ii) + 1)
162 adtree(mm)%xMin(1) = xbbox(1, ll)
163 adtree(mm)%xMin(2) = xbbox(2, ll)
164 adtree(mm)%xMin(3) = xbbox(3, ll)
165 adtree(mm)%xMin(4) = xbbox(4, ll)
166 adtree(mm)%xMin(5) = xbbox(5, ll)
167 adtree(mm)%xMin(6) = xbbox(6, ll)
169 adtree(mm)%xMax(1) = xbbox(1, ll)
170 adtree(mm)%xMax(2) = xbbox(2, ll)
171 adtree(mm)%xMax(3) = xbbox(3, ll)
172 adtree(mm)%xMax(4) = xbbox(4, ll)
173 adtree(mm)%xMax(5) = xbbox(5, ll)
174 adtree(mm)%xMax(6) = xbbox(6, ll)
176 do j = (nbb_ids(ii) + 2), nbb_ids(i)
179 adtree(mm)%xMin(1) = min(adtree(mm)%xMin(1), xbbox(1, ll))
180 adtree(mm)%xMin(2) = min(adtree(mm)%xMin(2), xbbox(2, ll))
181 adtree(mm)%xMin(3) = min(adtree(mm)%xMin(3), xbbox(3, ll))
182 adtree(mm)%xMin(4) = min(adtree(mm)%xMin(4), xbbox(4, ll))
183 adtree(mm)%xMin(5) = min(adtree(mm)%xMin(5), xbbox(5, ll))
184 adtree(mm)%xMin(6) = min(adtree(mm)%xMin(6), xbbox(6, ll))
186 adtree(mm)%xMax(1) = max(adtree(mm)%xMax(1), xbbox(1, ll))
187 adtree(mm)%xMax(2) = max(adtree(mm)%xMax(2), xbbox(2, ll))
188 adtree(mm)%xMax(3) = max(adtree(mm)%xMax(3), xbbox(3, ll))
189 adtree(mm)%xMax(4) = max(adtree(mm)%xMax(4), xbbox(4, ll))
190 adtree(mm)%xMax(5) = max(adtree(mm)%xMax(5), xbbox(5, ll))
191 adtree(mm)%xMax(6) = max(adtree(mm)%xMax(6), xbbox(6, ll))
197 terminaltest:
if (nn <= 2)
then
202 adtree(mm)%children(1) = -bb_ids(nbb_ids(ii) + 1)
203 adtree(mm)%children(2) = -bb_ids(nbb_ids(i))
211 call qsortbboxes(bb_ids(nbb_ids(ii) + 1:), nn, adt, splitdir)
219 kk = (nn + 1) / 2 + nbb_ids(ii)
220 nfl = nbb_idsnew(nleavestodividenew)
226 do k = (nbb_ids(ii) + 1), kk
228 bb_idsnew(nfl) = bb_ids(k)
231 nleavestodividenew = nleavestodividenew + 1
232 nbb_idsnew(nleavestodividenew) = nfl
238 nleavestot = nleavestot + 1
239 adtree(mm)%children(1) = nleavestot
240 curleafnew(nleavestodividenew) = nleavestot
254 adtree(mm)%children(2) = -bb_ids(nbb_ids(i))
262 nfr = nbb_idsnew(nleavestodividenew)
263 do k = (kk + 1), nbb_ids(i)
265 bb_idsnew(nfr) = bb_ids(k)
268 nleavestodividenew = nleavestodividenew + 1
269 nbb_idsnew(nleavestodividenew) = nfr
275 nleavestot = nleavestot + 1
276 adtree(mm)%children(2) = nleavestot
277 curleafnew(nleavestodividenew) = nleavestot
283 end do currentleavesloop
287 nleavestodivide = nleavestodividenew
289 tmpintpointer => bb_ids
291 bb_idsnew => tmpintpointer
293 tmpintpointer => nbb_ids
294 nbb_ids => nbb_idsnew
295 nbb_idsnew => tmpintpointer
297 tmpintpointer => curleaf
298 curleaf => curleafnew
299 curleafnew => tmpintpointer
305 deallocate (
stack, bb_ids, bb_idsnew, nbb_ids, nbb_idsnew, &
306 curleaf, curleafnew, stat=ierr)
309 "Deallocation failure for the local arrays.")
318 if (nbboxes == 0) ii = 0
320 call mpi_allgather(ii, 1, adflow_integer, tmparr, 1, adflow_integer, &
324 do i = 0, (adt%nProcs - 1)
333 allocate (adt%rootLeavesProcs(ii), &
334 adt%rootBBoxes(3, 2, ii), stat=ierr)
337 "Memory allocation failure for &
338 &rootLeavesProcs and rootBBoxes.")
343 adt%myEntryInRootProcs = 0
345 do i = 0, (adt%nProcs - 1)
346 if (tmparr(i) > 0)
then
348 adt%rootLeavesProcs(ii) = i
349 if (adt%myID == i) adt%myEntryInRootProcs = ii
357 if (nbboxes == 0)
then
360 rootleafbbox(1, 1) = adtree(1)%xMin(1)
361 rootleafbbox(2, 1) = adtree(1)%xMin(2)
362 rootleafbbox(3, 1) = adtree(1)%xMin(3)
364 rootleafbbox(1, 2) = adtree(1)%xMax(4)
365 rootleafbbox(2, 2) = adtree(1)%xMax(5)
366 rootleafbbox(3, 2) = adtree(1)%xMax(6)
371 call mpi_allgather(rootleafbbox, 6, adflow_real, rootleavesbbox, &
372 6, adflow_real, adt%comm, ierr)
378 do i = 0, (adt%nProcs - 1)
379 if (tmparr(i) > 0)
then
382 adt%rootBBoxes(1, 1, ii) = rootleavesbbox(1, 1, i)
383 adt%rootBBoxes(2, 1, ii) = rootleavesbbox(2, 1, i)
384 adt%rootBBoxes(3, 1, ii) = rootleavesbbox(3, 1, i)
386 adt%rootBBoxes(1, 2, ii) = rootleavesbbox(1, 2, i)
387 adt%rootBBoxes(2, 2, ii) = rootleavesbbox(2, 2, i)
388 adt%rootBBoxes(3, 2, ii) = rootleavesbbox(3, 2, i)
395 coor, triaConn, quadsConn, &
396 BBox, useBBox, comm, &
426 integer,
intent(in) :: comm
427 character(len=*),
intent(in) :: adtid
429 integer(kind=intType),
intent(in) :: ntria
430 integer(kind=intType),
intent(in) :: nquads
431 integer(kind=intType),
intent(in) :: nnodes
433 logical,
intent(in) :: usebbox
435 integer(kind=intType),
dimension(:, :),
intent(in), &
437 integer(kind=intType),
dimension(:, :),
intent(in), &
440 real(kind=realtype),
dimension(3, 2),
intent(in) :: bbox
442 real(kind=realtype),
dimension(:, :),
intent(in), &
447 integer :: ierr, ll, nnpe, jj
449 integer(kind=adtElementType) :: eltype
451 integer(kind=intType) :: i, j, ii, mm, nn, nelem
453 integer(kind=intType),
dimension(:, :),
pointer :: conn
455 real(kind=realtype),
dimension(3) :: xmin, xmax
457 logical,
dimension(:),
allocatable :: elementwithinbbox
464 if (
allocated(adts))
then
476 adt%isActive = .true.
483 call mpi_comm_rank(comm, adt%myID, ierr)
484 call mpi_comm_size(comm, adt%nProcs, ierr)
507 adt%triaConn => triaconn
508 adt%quadsConn => quadsconn
514 testbbox:
if (usebbox)
then
520 allocate (elementwithinbbox(nn), stat=ierr)
523 "Memory allocation failure for &
524 &elementWithinBBox.")
529 elementloop1:
do ll = 1, 2
542 xmin(1) = coor(1, mm); xmax(1) = coor(1, mm)
543 xmin(2) = coor(2, mm); xmax(2) = coor(2, mm)
544 xmin(3) = coor(3, mm); xmax(3) = coor(3, mm)
549 xmin(1) = min(xmin(1), coor(1, mm))
550 xmin(2) = min(xmin(2), coor(2, mm))
551 xmin(3) = min(xmin(3), coor(3, mm))
553 xmax(1) = max(xmax(1), coor(1, mm))
554 xmax(2) = max(xmax(2), coor(2, mm))
555 xmax(3) = max(xmax(3), coor(3, mm))
562 if (xmax(1) >= bbox(1, 1) .and. xmin(1) <= bbox(1, 2) .and. &
563 xmax(2) >= bbox(2, 1) .and. xmin(2) <= bbox(2, 2) .and. &
564 xmax(3) >= bbox(3, 1) .and. xmin(3) <= bbox(3, 2))
then
565 elementwithinbbox(ii) = .true.
567 elementwithinbbox(ii) = .false.
578 if (elementwithinbbox(i)) ii = ii + 1
586 allocate (adt%xBBox(6, ii), adt%elementType(ii), &
587 adt%elementID(ii), stat=ierr)
590 "Memory allocation failure for bounding &
598 elementloop2:
do ll = 1, 2
609 testwithin:
if (elementwithinbbox(ii))
then
613 adt%elementType(nn) = eltype
614 adt%elementID(nn) = i
617 xmin(1) = coor(1, mm); xmax(1) = coor(1, mm)
618 xmin(2) = coor(2, mm); xmax(2) = coor(2, mm)
619 xmin(3) = coor(3, mm); xmax(3) = coor(3, mm)
624 xmin(1) = min(xmin(1), coor(1, mm))
625 xmin(2) = min(xmin(2), coor(2, mm))
626 xmin(3) = min(xmin(3), coor(3, mm))
628 xmax(1) = max(xmax(1), coor(1, mm))
629 xmax(2) = max(xmax(2), coor(2, mm))
630 xmax(3) = max(xmax(3), coor(3, mm))
633 adt%xBBox(1, nn) = xmin(1)
634 adt%xBBox(2, nn) = xmin(2)
635 adt%xBBox(3, nn) = xmin(3)
637 adt%xBBox(4, nn) = xmax(1)
638 adt%xBBox(5, nn) = xmax(2)
639 adt%xBBox(6, nn) = xmax(3)
647 deallocate (elementwithinbbox, stat=ierr)
650 "Deallocation failure for &
651 &elementWithinBBox.")
664 allocate (adt%xBBox(6, ii), adt%elementType(ii), &
665 adt%elementID(ii), stat=ierr)
668 "Memory allocation failure for bounding &
675 elementloop3:
do ll = 1, 2
687 adt%elementType(nn) = eltype
688 adt%elementID(nn) = i
691 xmin(1) = coor(1, mm); xmax(1) = coor(1, mm)
692 xmin(2) = coor(2, mm); xmax(2) = coor(2, mm)
693 xmin(3) = coor(3, mm); xmax(3) = coor(3, mm)
698 xmin(1) = min(xmin(1), coor(1, mm))
699 xmin(2) = min(xmin(2), coor(2, mm))
700 xmin(3) = min(xmin(3), coor(3, mm))
702 xmax(1) = max(xmax(1), coor(1, mm))
703 xmax(2) = max(xmax(2), coor(2, mm))
704 xmax(3) = max(xmax(3), coor(3, mm))
707 adt%xBBox(1, nn) = xmin(1)
708 adt%xBBox(2, nn) = xmin(2)
709 adt%xBBox(3, nn) = xmin(3)
711 adt%xBBox(4, nn) = xmax(1)
712 adt%xBBox(5, nn) = xmax(2)
713 adt%xBBox(6, nn) = xmax(3)
743 integer,
intent(in) :: ll
760 nHexa, nNodes, coor, &
761 tetraConn, pyraConn, prismsConn, &
762 hexaConn, BBox, useBBox, &
796 integer,
intent(in) :: comm
797 character(len=*),
intent(in) :: adtID
799 integer(kind=intType),
intent(in) :: nTetra
800 integer(kind=intType),
intent(in) :: nPyra
801 integer(kind=intType),
intent(in) :: nPrisms
802 integer(kind=intType),
intent(in) :: nHexa
803 integer(kind=intType),
intent(in) :: nNodes
805 logical,
intent(in) :: useBBox
807 integer(kind=intType),
dimension(:, :),
intent(in), &
809 integer(kind=intType),
dimension(:, :),
intent(in), &
811 integer(kind=intType),
dimension(:, :),
intent(in), &
813 integer(kind=intType),
dimension(:, :),
intent(in), &
816 real(kind=realtype),
dimension(3, 2),
intent(in) :: bbox
818 real(kind=realtype),
dimension(:, :),
intent(in), &
823 integer :: ierr, ll, nNPE
825 integer(kind=adtElementType) :: elType
827 integer(kind=intType) :: i, j, ii, jj, mm, nn, nElem
829 integer(kind=intType),
dimension(:, :),
pointer :: conn
831 real(kind=realtype),
dimension(3) :: xmin, xmax
833 logical,
dimension(:),
allocatable :: elementWithinBBox
840 if (
allocated(adts))
then
851 adt%isActive = .true.
858 call mpi_comm_rank(comm, adt%myID, ierr)
859 call mpi_comm_size(comm, adt%nProcs, ierr)
871 adt%nPrisms = nprisms
881 adt%tetraConn => tetraconn
882 adt%pyraConn => pyraconn
883 adt%prismsConn => prismsconn
884 adt%hexaConn => hexaconn
890 testbbox:
if (usebbox)
then
895 nn = ntetra + npyra + nprisms + nhexa
896 allocate (elementwithinbbox(nn), stat=ierr)
899 "Memory allocation failure for &
900 &elementWithinBBox.")
905 elementloop1:
do ll = 1, 4
918 xmin(1) = coor(1, mm); xmax(1) = coor(1, mm)
919 xmin(2) = coor(2, mm); xmax(2) = coor(2, mm)
920 xmin(3) = coor(3, mm); xmax(3) = coor(3, mm)
925 xmin(1) = min(xmin(1), coor(1, mm))
926 xmin(2) = min(xmin(2), coor(2, mm))
927 xmin(3) = min(xmin(3), coor(3, mm))
929 xmax(1) = max(xmax(1), coor(1, mm))
930 xmax(2) = max(xmax(2), coor(2, mm))
931 xmax(3) = max(xmax(3), coor(3, mm))
938 if (xmax(1) >= bbox(1, 1) .and. xmin(1) <= bbox(1, 2) .and. &
939 xmax(2) >= bbox(2, 1) .and. xmin(2) <= bbox(2, 2) .and. &
940 xmax(3) >= bbox(3, 1) .and. xmin(3) <= bbox(3, 2))
then
941 elementwithinbbox(ii) = .true.
943 elementwithinbbox(ii) = .false.
954 if (elementwithinbbox(i)) ii = ii + 1
962 allocate (adt%xBBox(6, ii), adt%elementType(ii), &
963 adt%elementID(ii), stat=ierr)
966 "Memory allocation failure for bounding &
974 elementloop2:
do ll = 1, 4
985 testwithin:
if (elementwithinbbox(ii))
then
989 adt%elementType(nn) = eltype
990 adt%elementID(nn) = i
993 xmin(1) = coor(1, mm); xmax(1) = coor(1, mm)
994 xmin(2) = coor(2, mm); xmax(2) = coor(2, mm)
995 xmin(3) = coor(3, mm); xmax(3) = coor(3, mm)
1000 xmin(1) = min(xmin(1), coor(1, mm))
1001 xmin(2) = min(xmin(2), coor(2, mm))
1002 xmin(3) = min(xmin(3), coor(3, mm))
1004 xmax(1) = max(xmax(1), coor(1, mm))
1005 xmax(2) = max(xmax(2), coor(2, mm))
1006 xmax(3) = max(xmax(3), coor(3, mm))
1009 adt%xBBox(1, nn) = xmin(1)
1010 adt%xBBox(2, nn) = xmin(2)
1011 adt%xBBox(3, nn) = xmin(3)
1013 adt%xBBox(4, nn) = xmax(1)
1014 adt%xBBox(5, nn) = xmax(2)
1015 adt%xBBox(6, nn) = xmax(3)
1023 deallocate (elementwithinbbox, stat=ierr)
1026 "Deallocation failure for &
1027 &elementWithinBBox.")
1034 ii = ntetra + npyra + nprisms + nhexa
1040 allocate (adt%xBBox(6, ii), adt%elementType(ii), &
1041 adt%elementID(ii), stat=ierr)
1044 "Memory allocation failure for bounding &
1051 elementloop3:
do ll = 1, 4
1063 adt%elementType(nn) = eltype
1064 adt%elementID(nn) = i
1067 xmin(1) = coor(1, mm); xmax(1) = coor(1, mm)
1068 xmin(2) = coor(2, mm); xmax(2) = coor(2, mm)
1069 xmin(3) = coor(3, mm); xmax(3) = coor(3, mm)
1074 xmin(1) = min(xmin(1), coor(1, mm))
1075 xmin(2) = min(xmin(2), coor(2, mm))
1076 xmin(3) = min(xmin(3), coor(3, mm))
1078 xmax(1) = max(xmax(1), coor(1, mm))
1079 xmax(2) = max(xmax(2), coor(2, mm))
1080 xmax(3) = max(xmax(3), coor(3, mm))
1083 adt%xBBox(1, nn) = xmin(1)
1084 adt%xBBox(2, nn) = xmin(2)
1085 adt%xBBox(3, nn) = xmin(3)
1087 adt%xBBox(4, nn) = xmax(1)
1088 adt%xBBox(5, nn) = xmax(2)
1089 adt%xBBox(6, nn) = xmax(3)
1119 integer,
intent(in) :: ll
1129 eltype =
adtprism; nelem = nprisms; nnpe = 6
1169 integer(kind=intType),
intent(in) :: nHexa
1170 integer(kind=intType),
intent(in) :: nNodes
1172 integer(kind=intType),
dimension(:, :),
intent(in), &
1175 real(kind=realtype),
dimension(:, :),
intent(in), &
1177 type(
adttype),
intent(out) :: adt
1181 integer :: ierr, ll, nnpe
1182 integer(kind=intType) :: i, j, mm
1183 real(kind=realtype),
dimension(3) :: xmin, xmax
1186 adt%comm = mpi_comm_self
1208 adt%hexaConn => hexaconn
1209 nullify (adt%tetraConn, adt%pyraConn, adt%prismsConn)
1216 allocate (adt%xBBox(6, nhexa))
1217 allocate (adt%elementType(nhexa))
1218 allocate (adt%elementID(nhexa))
1230 xmin(1) = coor(1, mm); xmax(1) = coor(1, mm)
1231 xmin(2) = coor(2, mm); xmax(2) = coor(2, mm)
1232 xmin(3) = coor(3, mm); xmax(3) = coor(3, mm)
1237 xmin(1) = min(xmin(1), coor(1, mm))
1238 xmin(2) = min(xmin(2), coor(2, mm))
1239 xmin(3) = min(xmin(3), coor(3, mm))
1241 xmax(1) = max(xmax(1), coor(1, mm))
1242 xmax(2) = max(xmax(2), coor(2, mm))
1243 xmax(3) = max(xmax(3), coor(3, mm))
1246 adt%xBBox(1, i) = xmin(1)
1247 adt%xBBox(2, i) = xmin(2)
1248 adt%xBBox(3, i) = xmin(3)
1250 adt%xBBox(4, i) = xmax(1)
1251 adt%xBBox(5, i) = xmax(2)
1252 adt%xBBox(6, i) = xmax(3)
1255 adt%elementID(i) = i
1269 type(
adttype),
intent(inout) :: adt
1271 deallocate (adt%xBBox)
1272 deallocate (adt%elementType)
1273 deallocate (adt%elementID)
1274 deallocate (adt%ADTree)
1307 integer(kind=intType),
intent(in) :: nquad
1308 integer(kind=intType),
intent(in) :: nnodes
1310 integer(kind=intType),
dimension(:, :),
intent(in), &
1313 real(kind=realtype),
dimension(:, :),
intent(in), &
1315 type(
adttype),
intent(out) :: adt
1319 integer :: ierr, ll, nnpe
1320 integer(kind=intType) :: i, j, mm
1321 real(kind=realtype),
dimension(3) :: xmin, xmax
1324 adt%comm = mpi_comm_self
1346 adt%quadsConn => quadsconn
1347 nullify (adt%triaConn)
1354 allocate (adt%xBBox(6, nquad))
1355 allocate (adt%elementType(nquad))
1356 allocate (adt%elementID(nquad))
1367 mm = quadsconn(1, i)
1368 xmin(1) = coor(1, mm); xmax(1) = coor(1, mm)
1369 xmin(2) = coor(2, mm); xmax(2) = coor(2, mm)
1370 xmin(3) = coor(3, mm); xmax(3) = coor(3, mm)
1373 mm = quadsconn(j, i)
1375 xmin(1) = min(xmin(1), coor(1, mm))
1376 xmin(2) = min(xmin(2), coor(2, mm))
1377 xmin(3) = min(xmin(3), coor(3, mm))
1379 xmax(1) = max(xmax(1), coor(1, mm))
1380 xmax(2) = max(xmax(2), coor(2, mm))
1381 xmax(3) = max(xmax(3), coor(3, mm))
1384 adt%xBBox(1, i) = xmin(1)
1385 adt%xBBox(2, i) = xmin(2)
1386 adt%xBBox(3, i) = xmin(3)
1388 adt%xBBox(4, i) = xmax(1)
1389 adt%xBBox(5, i) = xmax(2)
1390 adt%xBBox(6, i) = xmax(3)
1393 adt%elementID(i) = i
1407 type(
adttype),
intent(inout) :: adt
1409 deallocate (adt%xBBox)
1410 deallocate (adt%elementType)
1411 deallocate (adt%elementID)
1412 deallocate (adt%ADTree)
subroutine setvolumepointers(ll)
subroutine setsurfacepointers(ll)
subroutine destroyserialquad(ADT)
subroutine destroyserialhex(ADT)
subroutine buildserialhex(nHexa, nNodes, coor, hexaConn, ADT)
subroutine buildserialquad(nQuad, nNodes, coor, quadsConn, ADT)
subroutine buildsurfaceadt(nTria, nQuads, nNodes, coor, triaConn, quadsConn, BBox, useBBox, comm, adtID)
subroutine buildvolumeadt(nTetra, nPyra, nPrisms, nHexa, nNodes, coor, tetraConn, pyraConn, prismsConn, hexaConn, BBox, useBBox, comm, adtID)
subroutine qsortbboxes(arr, nn, ADT, dir)
integer(kind=inttype) nstack
subroutine reallocateadts(adtID, jj)
integer(kind=inttype), dimension(:), pointer stack
subroutine adtterminate(ADT, routineName, errorMessage)
real(kind=realtype), parameter zero
integer, parameter adtvolumeadt
integer(kind=adtelementtype), parameter adttetrahedron
integer(kind=adtelementtype), parameter adtprism
integer(kind=adtelementtype), parameter adthexahedron
integer(kind=adtelementtype), parameter adttriangle
integer(kind=adtelementtype), parameter adtquadrilateral
integer, parameter adtsurfaceadt
integer(kind=adtelementtype), parameter adtpyramid