From 7bd227afda0c010b9330262974deb1aca59cdd3d Mon Sep 17 00:00:00 2001 From: Grzegorz Kowal Date: Sat, 3 Oct 2009 20:11:03 -0300 Subject: [PATCH] Implement Hilbert space filling curve for 3D. --- src/blocks.F90 | 86 ++++++++++++++++++++++++++++++------------------- src/problem.F90 | 14 ++++---- 2 files changed, 60 insertions(+), 40 deletions(-) diff --git a/src/blocks.F90 b/src/blocks.F90 index 7b70fb3..a9f3591 100644 --- a/src/blocks.F90 +++ b/src/blocks.F90 @@ -987,7 +987,7 @@ module blocks ! set corresponding configuration of the new blocks ! select case(pblock%config) - case(0) ! 'Z' + case(0) #if NDIMS == 2 config(:) = (/ 0, 0, 0, 0 /) @@ -998,70 +998,90 @@ module blocks order (:) = (/ 1, 2, 3, 4, 5, 6, 7, 8 /) #endif /* NDIMS == 3 */ - case(1) ! 'N' + case(12) #if NDIMS == 2 - config(:) = (/ 2, 1, 1, 3 /) - order (:) = (/ 1, 3, 4, 2 /) + config(:) = (/ 13, 12, 12, 42 /) + order (:) = (/ 1, 3, 4, 2 /) #endif /* NDIMS == 2 */ #if NDIMS == 3 - config(:) = (/ 0, 0, 0, 0, 0, 0, 0, 0 /) - order (:) = (/ 1, 2, 3, 4, 5, 6, 7, 8 /) + config(:) = (/ 13, 15, 15, 78, 78, 62, 62, 42 /) + order (:) = (/ 1, 3, 7, 5, 6, 8, 4, 2 /) #endif /* NDIMS == 3 */ - case(2) ! 'D' + case(13) #if NDIMS == 2 - config(:) = (/ 1, 2, 2, 4 /) - order (:) = (/ 1, 2, 4, 3 /) + config(:) = (/ 12, 13, 13, 43 /) + order (:) = (/ 1, 2, 4, 3 /) #endif /* NDIMS == 2 */ #if NDIMS == 3 - config(:) = (/ 0, 0, 0, 0, 0, 0, 0, 0 /) - order (:) = (/ 1, 2, 3, 4, 5, 6, 7, 8 /) + config(:) = (/ 15, 12, 12, 68, 68, 43, 43, 73 /) + order (:) = (/ 1, 5, 6, 2, 4, 8, 7, 3 /) + + case(15) + + config(:) = (/ 12, 13, 13, 48, 48, 75, 75, 65 /) + order (:) = (/ 1, 2, 4, 3, 7, 8, 6, 5 /) #endif /* NDIMS == 3 */ - case(3) ! 'C' + case(42) #if NDIMS == 2 - config(:) = (/ 4, 3, 3, 1 /) - order (:) = (/ 4, 3, 1, 2 /) + config(:) = (/ 43, 42, 42, 12 /) + order (:) = (/ 4, 3, 1, 2 /) #endif /* NDIMS == 2 */ #if NDIMS == 3 - config(:) = (/ 0, 0, 0, 0, 0, 0, 0, 0 /) - order (:) = (/ 1, 2, 3, 4, 5, 6, 7, 8 /) + config(:) = (/ 48, 43, 43, 75, 75, 12, 12, 62 /) + order (:) = (/ 4, 8, 7, 3, 1, 5, 6, 2 /) #endif /* NDIMS == 3 */ - case(4) ! 'U' + case(43) #if NDIMS == 2 - config(:) = (/ 3, 4, 4, 2 /) - order (:) = (/ 4, 2, 1, 3 /) + config(:) = (/ 42, 43, 43, 13 /) + order (:) = (/ 4, 2, 1, 3 /) #endif /* NDIMS == 2 */ #if NDIMS == 3 - config(:) = (/ 0, 0, 0, 0, 0, 0, 0, 0 /) - order (:) = (/ 1, 2, 3, 4, 5, 6, 7, 8 /) + config(:) = (/ 42, 48, 48, 65, 65, 73, 73, 13 /) + order (:) = (/ 4, 2, 6, 8, 7, 5, 1, 3 /) #endif /* NDIMS == 3 */ #if NDIMS == 3 - case(5) + case(48) - config(:) = (/ 0, 0, 0, 0, 0, 0, 0, 0 /) - order (:) = (/ 1, 2, 3, 4, 5, 6, 7, 8 /) + config(:) = (/ 43, 42, 42, 15, 15, 68, 68, 78 /) + order (:) = (/ 4, 3, 1, 2, 6, 5, 7, 8 /) - case(6) + case(62) - config(:) = (/ 0, 0, 0, 0, 0, 0, 0, 0 /) - order (:) = (/ 1, 2, 3, 4, 5, 6, 7, 8 /) + config(:) = (/ 65, 68, 68, 73, 73, 42, 42, 12 /) + order (:) = (/ 6, 5, 7, 8, 4, 3, 1, 2 /) - case(7) + case(65) - config(:) = (/ 0, 0, 0, 0, 0, 0, 0, 0 /) - order (:) = (/ 1, 2, 3, 4, 5, 6, 7, 8 /) + config(:) = (/ 68, 62, 62, 43, 43, 15, 15, 75 /) + order (:) = (/ 6, 8, 4, 2, 1, 3, 7, 5 /) - case(8) + case(68) - config(:) = (/ 0, 0, 0, 0, 0, 0, 0, 0 /) - order (:) = (/ 1, 2, 3, 4, 5, 6, 7, 8 /) + config(:) = (/ 62, 65, 65, 13, 13, 78, 78, 48 /) + order (:) = (/ 6, 2, 1, 5, 7, 3, 4 , 8 /) + + case(73) + + config(:) = (/ 78, 75, 75, 62, 62, 13, 13, 43 /) + order (:) = (/ 7, 8, 6, 5, 1, 2, 4, 3 /) + + case(75) + + config(:) = (/ 73, 78, 78, 42, 42, 65, 65, 15 /) + order (:) = (/ 7, 3, 4, 8, 6, 2, 1, 5 /) + + case(78) + + config(:) = (/ 75, 73, 73, 12, 12, 48, 48, 68 /) + order (:) = (/ 7, 5, 1, 3, 4, 2, 6, 8 /) #endif /* NDIMS == 3 */ end select diff --git a/src/problem.F90 b/src/problem.F90 index 252a076..622c05d 100644 --- a/src/problem.F90 +++ b/src/problem.F90 @@ -171,7 +171,7 @@ module problem ! set block config flag ! - call metablock_setconfig(pmeta, 1) + call metablock_setconfig(pmeta, 12) ! set block level ! @@ -278,12 +278,12 @@ module problem ! set block config flag ! - call metablock_setconfig(block_array(1,1)%ptr, 1) - call metablock_setconfig(block_array(2,1)%ptr, 2) - call metablock_setconfig(block_array(2,2)%ptr, 2) - call metablock_setconfig(block_array(1,2)%ptr, 4) - call metablock_setconfig(block_array(1,3)%ptr, 1) - call metablock_setconfig(block_array(2,3)%ptr, 1) + call metablock_setconfig(block_array(1,1)%ptr, 12) + call metablock_setconfig(block_array(2,1)%ptr, 13) + call metablock_setconfig(block_array(2,2)%ptr, 13) + call metablock_setconfig(block_array(1,2)%ptr, 43) + call metablock_setconfig(block_array(1,3)%ptr, 12) + call metablock_setconfig(block_array(2,3)%ptr, 12) ! set block level !