find_root_neighbor Subroutine

public subroutine find_root_neighbor(tree_neighbor, tree, i1, i2, i3)

Uses

  • proc~~find_root_neighbor~~UsesGraph proc~find_root_neighbor find_root_neighbor module~mod_forest mod_forest proc~find_root_neighbor->module~mod_forest module~mod_geometry mod_geometry proc~find_root_neighbor->module~mod_geometry module~mod_global_parameters mod_global_parameters proc~find_root_neighbor->module~mod_global_parameters module~mod_comm_lib mod_comm_lib module~mod_geometry->module~mod_comm_lib module~mod_basic_types mod_basic_types module~mod_global_parameters->module~mod_basic_types module~mod_connectivity mod_connectivity module~mod_global_parameters->module~mod_connectivity module~mod_constants mod_constants module~mod_global_parameters->module~mod_constants module~mod_physicaldata mod_physicaldata module~mod_global_parameters->module~mod_physicaldata module~mod_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_variables->module~mod_basic_types

find neighors of level-one root blocks

Arguments

Type IntentOptional Attributes Name
type(tree_node_ptr) :: tree_neighbor
type(tree_node_ptr) :: tree
integer, intent(in) :: i1
integer, intent(in) :: i2
integer, intent(in) :: i3

Called by

proc~~find_root_neighbor~~CalledByGraph proc~find_root_neighbor find_root_neighbor proc~find_neighbor find_neighbor proc~find_neighbor->proc~find_root_neighbor proc~init_forest_root init_forest_root proc~init_forest_root->proc~find_root_neighbor proc~asign_tree_neighbor asign_tree_neighbor proc~asign_tree_neighbor->proc~find_neighbor proc~build_connectivity build_connectivity proc~build_connectivity->proc~find_neighbor proc~initlevelone initlevelone proc~initlevelone->proc~init_forest_root proc~initlevelone->proc~build_connectivity proc~proper_nesting proper_nesting proc~proper_nesting->proc~find_neighbor proc~refine_tree_leaf refine_tree_leaf proc~refine_tree_leaf->proc~find_neighbor proc~amr_coarsen_refine amr_coarsen_refine proc~amr_coarsen_refine->proc~build_connectivity proc~amr_coarsen_refine->proc~proper_nesting proc~amr_coarsen_refine->proc~refine_tree_leaf proc~main main proc~main->proc~initlevelone proc~read_snapshot read_snapshot proc~main->proc~read_snapshot proc~resettree_convert resettree_convert proc~main->proc~resettree_convert proc~settree settree proc~main->proc~settree proc~timeintegration timeintegration proc~main->proc~timeintegration proc~read_forest read_forest proc~read_forest->proc~asign_tree_neighbor proc~read_forest->proc~build_connectivity proc~read_snapshot->proc~read_forest proc~read_snapshot_old read_snapshot_old proc~read_snapshot->proc~read_snapshot_old proc~read_snapshot_old->proc~read_forest proc~resettree resettree proc~resettree->proc~amr_coarsen_refine proc~resettree_convert->proc~amr_coarsen_refine proc~settree->proc~amr_coarsen_refine program~agile agile program~agile->proc~main proc~timeintegration->proc~resettree

Source Code

  subroutine find_root_neighbor(tree_neighbor,tree,i1,i2,i3)
    use mod_forest
    use mod_global_parameters
    use mod_geometry
  
    type(tree_node_ptr) :: tree_neighbor, tree
    integer, intent(in) :: i1,i2,i3
  
    integer :: jg1,jg2,jg3
  
    jg1=tree%node%ig1+i1;jg2=tree%node%ig2+i2;jg3=tree%node%ig3+i3;
  
    ! find the periodic grid indices, modulo(-1,10)=9
    if (periodB(1)) jg1=1+modulo(jg1-1,ng1(1))
    if (periodB(2)) jg2=1+modulo(jg2-1,ng2(1))
    if (periodB(3)) jg3=1+modulo(jg3-1,ng3(1))
  
    ! pi-periodicity at pole
    select case (coordinate)
    case (spherical) 
       if (poleB(1,2).and.jg2==0) then ! northpole (theta=0)
          jg2=1; jg3=1+modulo(jg3+ng3(1)/2-1,ng3(1))
       end if
       if (poleB(2,2).and.jg2==ng2(1)+1) then ! southpole (theta=pi)
          jg2=ng2(1); jg3=1+modulo(jg3+ng3(1)/2-1,ng3(1))
       end if
    case (cylindrical)
       if (poleB(1,1).and.jg1==0) then ! cylindrical axis
          jg1=1
          if (1==phi_) jg1=1+modulo(jg1+ng1(1)/2-1,ng1(1))
          if (2==phi_) jg2=1+modulo(jg2+ng2(1)/2-1,ng2(1))
          if (3==phi_) jg3=1+modulo(jg3+ng3(1)/2-1,ng3(1))
       end if
    end select
  
    if (jg1>=1.and.jg1<=ng1(1).and.jg2>=1.and.jg2<=ng2(1).and.jg3>=&
       1.and.jg3<=ng3(1)) then
       tree_neighbor%node => tree_root(jg1,jg2,jg3)%node
    else
       nullify(tree_neighbor%node)
    end if
  
  end subroutine find_root_neighbor