asign tree node neighor
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(tree_node_ptr) | :: | tree |
subroutine asign_tree_neighbor(tree) use mod_forest use mod_global_parameters type(tree_node_ptr) :: tree logical, dimension(ndim) :: pole integer :: my_neighbor_type, i1,i2,i3, iside type(tree_node_ptr) :: my_neighbor do iside=1,2 i1=kr(1,1)*(2*iside-3);i2=kr(2,1)*(2*iside-3);i3=kr(3,1)*(2*iside-3); call find_neighbor(my_neighbor,my_neighbor_type,tree,i1,i2,i3,pole) select case (my_neighbor_type) case (neighbor_sibling, neighbor_fine) tree%node%neighbor(iside,1)%node => my_neighbor%node if (associated(my_neighbor%node)) then if (pole(1)) then my_neighbor%node%neighbor(iside,1)%node => tree%node else my_neighbor%node%neighbor(3-iside,1)%node => tree%node end if end if case default nullify(tree%node%neighbor(iside,1)%node) end select end do do iside=1,2 i1=kr(1,2)*(2*iside-3);i2=kr(2,2)*(2*iside-3);i3=kr(3,2)*(2*iside-3); call find_neighbor(my_neighbor,my_neighbor_type,tree,i1,i2,i3,pole) select case (my_neighbor_type) case (neighbor_sibling, neighbor_fine) tree%node%neighbor(iside,2)%node => my_neighbor%node if (associated(my_neighbor%node)) then if (pole(2)) then my_neighbor%node%neighbor(iside,2)%node => tree%node else my_neighbor%node%neighbor(3-iside,2)%node => tree%node end if end if case default nullify(tree%node%neighbor(iside,2)%node) end select end do do iside=1,2 i1=kr(1,3)*(2*iside-3);i2=kr(2,3)*(2*iside-3);i3=kr(3,3)*(2*iside-3); call find_neighbor(my_neighbor,my_neighbor_type,tree,i1,i2,i3,pole) select case (my_neighbor_type) case (neighbor_sibling, neighbor_fine) tree%node%neighbor(iside,3)%node => my_neighbor%node if (associated(my_neighbor%node)) then if (pole(3)) then my_neighbor%node%neighbor(iside,3)%node => tree%node else my_neighbor%node%neighbor(3-iside,3)%node => tree%node end if end if case default nullify(tree%node%neighbor(iside,3)%node) end select end do end subroutine asign_tree_neighbor