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.