aboutsummaryrefslogtreecommitdiff
path: root/src/slab.h
diff options
context:
space:
mode:
authorschnetter <schnetter@2e825fa2-fb71-486d-8b7f-a5ff3f0f6cb8>2002-10-22 14:58:59 +0000
committerschnetter <schnetter@2e825fa2-fb71-486d-8b7f-a5ff3f0f6cb8>2002-10-22 14:58:59 +0000
commit2f751a2911f964a8e471b4206352d913b968a7bf (patch)
treec86ae0eba378ddc832c1b17a7e3cd1423bb08446 /src/slab.h
parente4f4fa422aa52730e0a417120d527694d13e09c3 (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.h101
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 */