get_Morton_range Subroutine

public subroutine get_Morton_range()

Uses

  • proc~~get_morton_range~~UsesGraph proc~get_morton_range get_Morton_range module~mod_forest mod_forest proc~get_morton_range->module~mod_forest module~mod_global_parameters mod_global_parameters proc~get_morton_range->module~mod_global_parameters 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

Set the Morton range for each processor

Arguments

None

Called by

proc~~get_morton_range~~CalledByGraph proc~get_morton_range get_Morton_range proc~init_forest_root init_forest_root proc~init_forest_root->proc~get_morton_range proc~load_balance load_balance proc~load_balance->proc~get_morton_range proc~read_forest read_forest proc~read_forest->proc~get_morton_range proc~amr_coarsen_refine amr_coarsen_refine proc~amr_coarsen_refine->proc~load_balance proc~initlevelone initlevelone proc~initlevelone->proc~init_forest_root proc~read_snapshot read_snapshot 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~main main proc~main->proc~initlevelone 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~resettree resettree proc~resettree->proc~amr_coarsen_refine proc~resettree_convert->proc~amr_coarsen_refine proc~settree->proc~amr_coarsen_refine proc~timeintegration->proc~resettree program~agile agile program~agile->proc~main

Source Code

  subroutine get_Morton_range
    use mod_forest
    use mod_global_parameters

    integer :: ipe, blocks_left, procs_left, num_blocks

    if (allocated(sfc_to_igrid)) deallocate(sfc_to_igrid)
    

    blocks_left = nleafs

    do ipe = 0, npe-1
      if (ipe == 0) then
        Morton_start(ipe) = 1
      else
        Morton_start(ipe) = Morton_stop(ipe-1) + 1
      end if

      ! Compute how many blocks this cpu should take
      procs_left = npe - ipe
      num_blocks = ceiling(blocks_left / dble(procs_left))
      Morton_stop(ipe) = Morton_start(ipe) + num_blocks - 1
      blocks_left = blocks_left - num_blocks
    end do

    allocate(sfc_to_igrid(Morton_start(mype):Morton_stop(mype)))
    

  end subroutine get_Morton_range