In psmile_find_intersect :

each component get the extents of all its grids (grid_id) (in psmile_enddef_comp called by prism_enddef) (ie min and max value of the corners of each grid on its partition)

these exetnts (envelopes) are transformed into a common space [-180:180]/[-90:90] in psmile_transform_extent_cyclic (called in psmile_enddef_comp)

so the initial grid can be partitionned on one processor (nparts) => new subgrids

all components know the extents (ie min and max value of the corners on its partition) of all the other components of all the other applications (see psmile_enddef_appl called by prism_enddef).

the number of intersections is calculated.

if the processor is source (see psmile_find_intersect) then a multigrid is prepared (see psmile_mg_setup).

a message is sent to the process with which the local processe found an intersection ( psmile_bsend (msgint, ip, MPI_INTEGER, dest, lastag, comm_psmile, ierror))

the message is eceived either in psmile_get_intersect :

call MPI_Irecv (paction%msgint, nd_msgint, MPI_INTEGER, &

maxval(paction%intersect_ranks), paction%lastag, comm_psmile, &

paction%lrequest(2), ierror))

or in psmile_enddef_action :

call MPI_Irecv (paction%msgint, nd_msgint, MPI_INTEGER, &

maxval(paction%intersect_ranks), paction%lastag, comm_psmile, &

paction%lrequest(2), ierror)

Search :

to find out where the search begins in complex cases (more than one exchange and more than two components), one should find the key workd Taskout.