S3L_declare_detailed accepts the following arguments as input:
addr_a - If the atype argument is set to S3L_DONOT_ALLOCATE, addr_a is taken as the starting address of the local (per process) portion of the parallel array A. If atype is not equal to S3L_DONOT_ALLOCATE, addr_a will be ignored.
rank - Specifies the number of dimensions the array will have. The range of legal values for rank is 1 <= rank <= 31.
extents - An integer vector whose length is equal to the number of dimensions in the array. Each element in extents specifies the extent of the corresponding array axis. Note that axis indexing is zero-based for the C interface and one-based for the Fortran interface, as follows:
When called from a C or C++ application, the first element of extents corresponds to axis 0, the second element to axis 1, and so forth.
When called from an F77 or F90 application, the first vector element corresponds to axis 1, the second to axis 2, and so forth.
type - Specifies the array's data type; this must be a type supported by Sun S3L. See Chapter 4, Sun S3L Data Types for a complete list of supported data types.
blocksizes - Specifies the blocksize to be used in a block cyclic distribution along each axis. If blocksizes is NULL (C/C++) or if its first element is equal to -1 (F77/F90), default blocksizes will be chosen by the system.
proc_src - Vector of length at least equal to the rank. The indices of the processes contain the start of the array--that is, the first element along the particular axis. If this argument is a NULL pointer (C/C++) or if its first element is less than zero (F77/F90), default values will be used. Along each axis, the process whose process grid coordinate along that axis is equal to 0 contains the first array element. If present, the pgrid argument (process grid) should also be present. Otherwise an error code will be returned.
axis_is_local - An integer vector whose length equals the number of dimensions in the array. Each element of axis_is_local controls the distribution of the corresponding array axis as follows:
If axis_is_local[i]= 0, axis[i] of the array will be block-distributed along axis [i] of the process grid.
If axis_is_local[i]= 1, axis[i] will not be distributed.
The axis_is_local argument is used only if a pgrid is not specified. If it is NULL (C/C++) or if its first integer value is negative (F77/F90), axis_is_local will be ignored.
A process grid is the array of processes onto which the data is distribued.
pgrid - An S3L process grid handle that was obtained by calling either S3L_set_process_grid or S3L_get_attribute. If this argument is NULL (C/C++) or is equal to zero (F77/F90), S3L will choose an appropriate pgrid for the array.
atype - Use one of the following predefined values to specify how the array will be allocated:
S3L_USE_MALLOC - Uses malloc() to allocate the array subgrids.
S3L_USE_MEMALIGN64 - Uses memalign() to allocate the array subgrids and to align them on 64-bit boundaries.
S3L_USE_MMAP- Uses mmap() to allocate the array subgrids. Array subgrids on the same SMP will be in shared memory.
S3L_USE_SHMGET - Uses shmget() to allocate the array subgrids. Array subgrids on the same SMP will be in shared memory.