source |
target |
psmile_find_intersect | psmile_find_intersect |
sends msgint to
the process (dest) with which has an intersection call psmile_bsend (msgint, ip, MPI_INTEGER, dest, lastag, comm_psmile, ierror) lastag = 100 |
sends msgint to
the process (dest) with which has an intersection call psmile_bsend (msgint, ip, MPI_INTEGER, dest, lastag, comm_psmile, ierror) lastag = 100 |
psmile_get_intersect | psmile_get_intersect |
set up request
for a grid transfer (answer to tag "lastag") if (paction%n_answer < paction%n_answer2recv) then call MPI_Irecv (paction%msgreq, nd_msgint, MPI_INTEGER, & MPI_ANY_SOURCE, reqtag, comm_psmile, paction%lrequest(1), ierror) ' Posting Irecv request(1) ', paction%lrequest(1), 'with tag ', reqtag (=101) |
|
set up request
for receive of an extra search request if (paction%n_fin2recv > 0) then call MPI_Irecv (paction%msg_extra, msg_extra_size, MPI_INTEGER, & MPI_ANY_SOURCE, exttag, comm_psmile, paction%lrequest(4), ierror) ' Posting Irecv request(4) ', paction%lrequest(4), 'with tag ', exttag (=104) |
set up request
for receive of an extra search request if (paction%n_fin2recv > 0) then call MPI_Irecv (paction%msg_extra, msg_extra_size, MPI_INTEGER, & MPI_ANY_SOURCE, exttag, comm_psmile, paction%lrequest(4), ierror) ' Posting Irecv request(4) ', paction%lrequest(4), 'with tag ', exttag (=104) |
psmile_get_intersect | psmile_get_intersect |
set up request
for receive of an intersection do while ( paction%n < paction%ninter .or. paction%n_answer < paction%n_answer2recv .or. & paction%nloc_recv < paction%n_answer2recv .or. paction%n_selected > 0 .or. paction%grid2receive ) call MPI_Irecv (paction%msgint, nd_msgint, MPI_INTEGER, & maxval(paction%intersect_ranks), paction%lastag, comm_psmile, paction%lrequest(2), ierror) ' Posting Irecv request(2) ', paction%lrequest(2), 'with tag ', paction%lastag (=100) |
set up request
for receive of an intersection do while ( paction%n < paction%ninter .or. paction%n_answer < paction%n_answer2recv .or. & paction%nloc_recv < paction%n_answer2recv .or. paction%n_selected > 0 .or. paction%grid2receive ) call MPI_Irecv (paction%msgint, nd_msgint, MPI_INTEGER, & maxval(paction%intersect_ranks), paction%lastag, comm_psmile, paction%lrequest(2), ierror) ' Posting Irecv request(2) ', paction%lrequest(2), 'with tag ', paction%lastag (=100) |
psmile_enddef_action
: index = 2 ; Message from a partner with an intersection was found (see psmile_find_intersect of target) |
psmile_enddef_action
: index = 2 ; Message from a partner with an intersection was found (see psmile_find_intersect of target) |
send message
back as acknowledge to sending process call psmile_bsend (paction%msgint, nd_msgint, MPI_INTEGER, sender, reqtag, comm_psmile, ierror) set up receive the subgrid sent by process sender call psmile_recv_req_subgrid (msg_intersections, sender, grdtag, search, paction%recv_req, new_search, ierror) |
nothing to do because not a source will send the coordinates when asked by the source (request 1) |
psmile_recv_req_subgrid | |
call
psmile_recv_req_mask for gridless call psmile_recv_req_corners_dble for conservative (+ mask) call psmile_recv_req_coords_dble for point method (+ mask) |
|
psmile_recv_req_mask | |
call MPI_Irecv (search%search_mask(ipart)%vector, len_mask, & MPI_LOGICAL, sender, tag, comm_psmile, recv_req (ndim_3d+1, ipart), ierror) or if no mask to receive call MPI_Irecv (dummy_mask, 0, MPI_LOGICAL, & sender, tag, comm_psmile, recv_req (ndim_3d+1, 1), ierror) index=ndim_3d+1=3 |
|
psmile_recv_req_corners_dble for conservative | |
psmile_recv_req_coords_dble for point method | |
psmile_get_intersect | |
do i = 1, paction%nreq print *, ' list of requests ', i, paction%lrequest(i) enddo |
|
psmile_enddef_action
: index = 1 ; Request for sending grid data found. Send subgrid to partner which performs search of donor cells |
|
call
psmile_send_req_subgrid (msg_intersections, sender, grdtag,
ierror) |
|
psmile_send_req_subgrid | |
call
psmile_send_req_mask for gridless call psmile_send_req_corners_dble for conservative (+ mask) call psmile_send_req_coords_dble for point method (+ mask) |
|
psmile_enddef_action : index = 1 | |
set up request
for receive of locations call MPI_Irecv (paction%loc_messages(1,ind), msgloc_size, MPI_INTEGER, & sender, loctag+ind, comm_psmile, paction%lrequest (num_req_types-1+ind), ierror) |