8 integer,
intent(in) :: i^D
12 jg^d=tree%node%ig^d+i^d;
15 {
if (
periodb(^d)) jg^d=1+modulo(jg^d-1,
ng^d(1))\}
20 if (
poleb(1,2).and.jg2==0)
then
21 jg2=1; jg3=1+modulo(jg3+ng3(1)/2-1,ng3(1))
23 if (
poleb(2,2).and.jg2==ng2(1)+1)
then
24 jg2=ng2(1); jg3=1+modulo(jg3+ng3(1)/2-1,ng3(1))
27 if (poleb(1,1).and.jg1==0)
then
29 {
if (^d==phi_) jg^d=1+modulo(jg^d+ng^d(1)/2-1,ng^d(1))\}
33 if (jg^d>=1.and.jg^d<=ng^d(1)|.and.)
then
34 tree_neighbor%node => tree_root(jg^d)%node
36 nullify(tree_neighbor%node)
47 integer,
intent(in) :: i^D
48 integer,
intent(out) :: my_neighbor_type
49 logical,
dimension(ndim),
intent(out) :: pole
51 integer :: level, ig^D, ic^D, n_ic^D, inp^D
57 if (
associated(my_neighbor%node))
then
60 {
if ((
poleb(2,^d).and.ig^d==
ng^d(1).and.i^d==1) .or. &
61 (
poleb(1,^d).and.ig^d==1.and.i^d==-1)) pole(^d)=.true.\}
63 if (my_neighbor%node%leaf)
then
76 {
if ((
poleb(2,^d).and.ig^d==
ng^d(level).and.i^d==1) .or. &
77 (
poleb(1,^d).and.ig^d==1.and.i^d==-1)) pole(^d)=.true.\}
81 ic^d=1+modulo(ig^d-1,2);
82 inp^d=int((ic^d+i^d+1)/2)-1;
83 my_neighbor%node => tree%node%parent%node
85 my_neighbor%node => my_neighbor%node%neighbor(ic^d,^d)%node
86 if (.not.
associated(my_neighbor%node))
then
91 if (my_neighbor%node%leaf)
then
94 {
if (i^d==0 .or. pole(^d))
then
99 my_neighbor%node => my_neighbor%node%child(n_ic^d)%node
100 if (
associated(my_neighbor%node))
then
101 if (my_neighbor%node%leaf)
then
121 logical,
dimension(ndim) :: pole
122 integer :: my_neighbor_type, i^D, iside
126 i^dd=
kr(^dd,^d)*(2*iside-3);
127 call find_neighbor(my_neighbor,my_neighbor_type,tree,i^dd,pole)
128 select case (my_neighbor_type)
129 case (neighbor_sibling, neighbor_fine)
130 tree%node%neighbor(iside,^d)%node => my_neighbor%node
131 if (
associated(my_neighbor%node))
then
133 my_neighbor%node%neighbor(iside,^d)%node => tree%node
135 my_neighbor%node%neighbor(3-iside,^d)%node => tree%node
139 nullify(tree%node%neighbor(iside,^d)%node)
subroutine find_root_neighbor(tree_neighbor, tree, iD)
find neighors of level-one root blocks
subroutine asign_tree_neighbor(tree)
asign tree node neighor
subroutine find_neighbor(my_neighbor, my_neighbor_type, tree, iD, pole)
find neighors of all blocks
Module with basic grid data structures.
Module with geometry-related routines (e.g., divergence, curl)
integer, parameter spherical
This module contains definitions of global parameters and variables and some generic functions/subrou...
integer, dimension(3, 3) kr
Kronecker delta tensor.
integer, dimension(:), allocatable ng
number of grid blocks in domain per dimension, in array over levels
logical, dimension(ndim) periodb
True for dimensions with periodic boundaries.
logical, dimension(2, ndim) poleb
Indicates whether there is a pole at a boundary.