Back to OASIS4 home


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.