diff options
author | schnetter <schnetter@2e825fa2-fb71-486d-8b7f-a5ff3f0f6cb8> | 2002-10-22 14:58:59 +0000 |
---|---|---|
committer | schnetter <schnetter@2e825fa2-fb71-486d-8b7f-a5ff3f0f6cb8> | 2002-10-22 14:58:59 +0000 |
commit | 2f751a2911f964a8e471b4206352d913b968a7bf (patch) | |
tree | c86ae0eba378ddc832c1b17a7e3cd1423bb08446 /src/slab.h | |
parent | e4f4fa422aa52730e0a417120d527694d13e09c3 (diff) |
A generic slabbing thorn.
git-svn-id: http://svn.cactuscode.org/arrangements/CactusNumerical/Slab/trunk@2 2e825fa2-fb71-486d-8b7f-a5ff3f0f6cb8
Diffstat (limited to 'src/slab.h')
-rw-r--r-- | src/slab.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/slab.h b/src/slab.h new file mode 100644 index 0000000..ef03a06 --- /dev/null +++ b/src/slab.h @@ -0,0 +1,101 @@ +/* $Header$ */ + +#ifndef SLAB_H +#define SLAB_H + +#include "cctk.h" + +struct slabinfo { + int gsh; + int lbnd, lsh; + int lbbox, ubbox, nghostzones; + int off, str, len; +}; + +struct xferinfo { + struct slabinfo src, dst; + int xpose; + int flip; +}; + +/* + Slab_Transfer copies a slab from one array into a slab of another + array. + + The src and dst variables describe the source and the destination + slab, respectively. + + The variables gsh, lbnd, and lsh describe the shape and distribution + of the array containing the slab. They are equivalent to the + corresponding quantities in the cGH structure. + + off, str, and len describe the location and shape of the slab within + the array. off is the offset, i.e. the location of the "first" + corner of the slab. str is the stride, i.e. the distance between to + grid points in the slab. The stride can be negative. len is the + length, i.e. the number of grid points making up the slab. len does + not include the grid points that are skipped if the stride is larger + than one. + + xpose describes a possible permutation of the coordinate axes + between the slabs. It is source-axis = xpose[destination-axis]. + + flip describes a possible inversion of the coordinate axes (from the + point of view of the destination slab). It is source-axis = + xpose[flip[destination-axis]]. + + The corresponding lengths of the source and the destination slabs + must be equal, i.e. for all d: src.len[xpose[d]] = dst.len[d]. + + The slabs are copied according to + + . dst[dst.off + I * dst.str] = src[src.off + J * src.str] + + where the multi-indices I and J have the ranges specified by dst.len + and src.len, respectively, and I and J are related by the + transposition + + . J = xpose[flip[I]] + + + + Restrictions: + + . dim >= 0 + + . gsh >= 0 + . lbnd >= 0 + . lsh >= 0 + . lbnd + lsh <= gsh + . lbbox and ubbox must be booleans, i.e. either 0 or 1 + . nghostzones >= 0 + + . len >= 0 + . str != 0 + . off >= 0 + . off < gsh + . off + (len-1) * str >= 0 + . off + (len-1) * str < gsh + + . xpose must be a permutation of 0 ... dim-1 + . flip must be a boolean, i.e. either 0 or 1 + + The source and the destination arrays may be the same. + + + + To do: + + . ignore ghostzones + . use size_t instead of int +*/ + +int Slab_Transfer (cGH * const cctkGH, + int const dim, + struct xferinfo const * const xferinfo, + int const srctype, + void const * const srcptr, + int const dsttype, + void * const dstptr); + +#endif /* defined SLAB_H */ |