init_forest_root Subroutine

public subroutine init_forest_root()

Uses

  • proc~~init_forest_root~~UsesGraph proc~init_forest_root init_forest_root mod_amr_solution_node mod_amr_solution_node proc~init_forest_root->mod_amr_solution_node module~mod_amr_neighbors mod_amr_neighbors proc~init_forest_root->module~mod_amr_neighbors module~mod_forest mod_forest proc~init_forest_root->module~mod_forest module~mod_global_parameters mod_global_parameters proc~init_forest_root->module~mod_global_parameters module~mod_space_filling_curve mod_space_filling_curve proc~init_forest_root->module~mod_space_filling_curve 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

build root forest

Arguments

None

Calls

proc~~init_forest_root~~CallsGraph proc~init_forest_root init_forest_root getnode getnode proc~init_forest_root->getnode proc~amr_morton_order amr_Morton_order proc~init_forest_root->proc~amr_morton_order proc~find_root_neighbor find_root_neighbor proc~init_forest_root->proc~find_root_neighbor proc~get_morton_range get_Morton_range proc~init_forest_root->proc~get_morton_range proc~init_tree_leaf init_tree_leaf proc~init_forest_root->proc~init_tree_leaf proc~level1_morton_order level1_Morton_order proc~init_forest_root->proc~level1_morton_order proc~mpistop mpistop proc~amr_morton_order->proc~mpistop proc~add_to_linked_list add_to_linked_list proc~init_tree_leaf->proc~add_to_linked_list proc~mortonencode mortonEncode proc~level1_morton_order->proc~mortonencode mpi_abort mpi_abort proc~mpistop->mpi_abort

Called by

proc~~init_forest_root~~CalledByGraph proc~init_forest_root init_forest_root proc~initlevelone initlevelone proc~initlevelone->proc~init_forest_root proc~main main proc~main->proc~initlevelone program~agile agile program~agile->proc~main

Source Code

  subroutine init_forest_root
    use mod_forest
    use mod_global_parameters
    use mod_space_filling_curve
    use mod_amr_solution_node, only: getnode
    use mod_amr_neighbors, only: find_root_neighbor

    integer :: ig1,ig2,ig3, level, igrid, ipe
    integer :: iside, i1,i2,i3, Morton_no, isfc


    level=1
    Morton_no=0
    ipe=0
    nparents=0
    nleafs=ng1(1)*ng2(1)*ng3(1)
    nleafs_active=nleafs
    nleafs_level(1)=ng1(1)*ng2(1)*ng3(1)
    nleafs_level(2:nlevelshi)=0
    call get_Morton_range
    ! Generate Morton-order space-filling curve to connect level 1 blocks
    call level1_Morton_order
    do isfc=1,nglev1
       ig1=sfc_iglevel1(1,isfc)
       ig2=sfc_iglevel1(2,isfc)
       ig3=sfc_iglevel1(3,isfc)
       Morton_no=Morton_no+1
       if (Morton_no>Morton_stop(ipe)) ipe=ipe+1
       igrid=getnode(ipe)
       if (ipe==mype) then
          sfc_to_igrid(Morton_no)=igrid
          igrid_to_sfc(igrid)=Morton_no
       end if
       call init_tree_leaf(tree_root(ig1,ig2,ig3),ig1,ig2,ig3,level,igrid,ipe,&
          .true.)
    end do

    ! update root neighbor
    do ig3=1,ng3(1)
    do ig2=1,ng2(1)
    do ig1=1,ng1(1)
       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_root_neighbor(tree_root(ig1,ig2,ig3)%node%neighbor(iside,&
             1), tree_root(ig1,ig2,ig3),i1,i2,i3)
       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_root_neighbor(tree_root(ig1,ig2,ig3)%node%neighbor(iside,&
             2), tree_root(ig1,ig2,ig3),i1,i2,i3)
       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_root_neighbor(tree_root(ig1,ig2,ig3)%node%neighbor(iside,&
             3), tree_root(ig1,ig2,ig3),i1,i2,i3)
       end do
    end do
    end do
    end do

    ! This call is here to ensure the sfc array is initialized
    call amr_Morton_order()

  end subroutine init_forest_root