call Driver_computeCellLocations(integer(IN) :: nLocations, logical(OUT) :: cellisLocal(:), integer(OUT) :: cellLocation(:,:), integer(IN) :: nBlocks, integer(IN) :: blockList, logical(IN),OPTIONAL :: doBroadcast)
Compute one or more locations of special interest. A 'location' identifies a computational cell (at a given time) in a globally unique way. A location is represented by a quintuple of integers as ( i, j, k, blockID, proc ), where i,j,k are cell indices in a block, and blockID identifies a local block ID in the task proc. For each l in 1,..,nLocations, different criteria can be applied to locate a cell. Currently implemented: * Location of the very last cell. This is most useful for 1D configurations. This is currently hardwired for l=1. * A point location given by coordinate triple (lumI(l),lumJ(l),lumK(l)). The cell located will be the one with the shortest distance from the point thus designated, in the sense of distance from cell center. (Distance for non-Cartesian curved coordinates is implemented naively.) This is currently hardwired for l1 <= l <= l2, see implementation in DriverMain. The locations will typically be used to dump some data from the cell there to a file, or perhaps perform further local diagnostic calculations.
nLocations : Number of locations cellisLocal : For each cell location, indicates whether it is local to the executing task. For each cell location, the corresponding element of cellIsLocal will be TRUE in at most one task. cellLocation : Returns the requested cell locations. If doBroadcast is TRUE, the same location info will be returned on all tasks; otherwise, the location info is only complete for local cell locations. nBlocks : Number of blocks in block list blockList : A list of local blocks. Returned locations will usually point to cells within the global union of such lists. doBroadcast : Whether to do an MPI broadcast at the end to ensure that the same location is returned on all procs.