lb_recv Subroutine

private subroutine lb_recv()

Uses

  • proc~~lb_recv~~UsesGraph proc~lb_recv lb_recv mod_amr_solution_node mod_amr_solution_node proc~lb_recv->mod_amr_solution_node module~mod_comm_lib mod_comm_lib proc~lb_recv->module~mod_comm_lib module~mod_global_parameters mod_global_parameters proc~lb_recv->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

Arguments

None

Calls

proc~~lb_recv~~CallsGraph proc~lb_recv lb_recv alloc_node alloc_node proc~lb_recv->alloc_node proc~mpi_irecv_wrapper mpi_irecv_wrapper proc~lb_recv->proc~mpi_irecv_wrapper proc~mpistop mpistop proc~lb_recv->proc~mpistop mpi_irecv mpi_irecv proc~mpi_irecv_wrapper->mpi_irecv mpi_abort mpi_abort proc~mpistop->mpi_abort

Called by

proc~~lb_recv~~CalledByGraph proc~lb_recv lb_recv proc~load_balance load_balance proc~load_balance->proc~lb_recv proc~amr_coarsen_refine amr_coarsen_refine proc~amr_coarsen_refine->proc~load_balance proc~resettree resettree proc~resettree->proc~amr_coarsen_refine proc~resettree_convert resettree_convert proc~resettree_convert->proc~amr_coarsen_refine proc~settree settree proc~settree->proc~amr_coarsen_refine proc~main main proc~main->proc~resettree_convert proc~main->proc~settree proc~timeintegration timeintegration proc~main->proc~timeintegration proc~timeintegration->proc~resettree program~agile agile program~agile->proc~main

Source Code

  subroutine lb_recv
    use mod_global_parameters
    use mod_amr_solution_node, only: alloc_node
    use mod_comm_lib, only: mpistop

    ! alloc_node also re-derives the analytic extras (for ffhd, the frozen
    ! field) through fill_nwextra_device, which is what lets the transfer below
    ! carry only 1:nwgc rather than 1:nw.
    call alloc_node(recv_igrid)

    ! Record the block; exchange_migrated_blocks posts them all once the walk
    ! is over, one message per peer.  The key is the index this block will
    ! occupy here, which the sender knows too.
    irecv=irecv+1
    n_lb_rcv=n_lb_rcv+1
    if (n_lb_rcv > size(lb_rcv_igrid)) then
       call mpistop('load_balance: more arrivals than max_blocks')
    end if
    lb_rcv_igrid(n_lb_rcv) = recv_igrid
    lb_rcv_src(n_lb_rcv)   = send_ipe
    lb_rcv_key(n_lb_rcv)   = recv_igrid
    if(stagger_grid) then
       itag=recv_igrid+max_blocks
       call mpi_irecv_wrapper(ps(recv_igrid)%ws,1,type_block_io_stg,send_ipe,itag,&
             icomm,recvrequest_stg(irecv),ierrmpi)
    end if
  end subroutine lb_recv