aboutsummaryrefslogtreecommitdiff
path: root/Auxiliary
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@gmail.com>2011-09-28 10:39:34 +0200
committerIan Hinder <ian.hinder@aei.mpg.de>2011-09-29 20:57:09 +0200
commit61eee9e3b9475fdecdec86b1aaee4a669c07bdc0 (patch)
tree6b68cf32a0c189b719bf1b8169d929676dcfae95 /Auxiliary
parentde54d405ee8b39cc90dbf2b9e2b432b392076259 (diff)
Introduce a macro KRANC_GFOFFSET3D to access a grid point with an
offset
Diffstat (limited to 'Auxiliary')
-rw-r--r--Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h
index 401b4e0..37cbe40 100644
--- a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h
+++ b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h
@@ -43,6 +43,26 @@ extern "C" {
#include "MathematicaCompat.h"
#ifdef KRANC_C
+
+ /* Grid function access */
+ /* var is a pointer to a grid point (an lvalue), i,j,k are offsets
+ with respect to that point.
+ For example: KRANC_GFINDEX3D_OFFSET(&u[ind3d],-1,-1,0) */
+#ifndef VECTORISE
+ /* standard, no vectorisation */
+ /* simple implementation */
+ /* # define KRANC_GFOFFSET3D(var,i,j,k) ((var)[di*(i)+dj*(j)+dk*(k)]) */
+ /* more efficient implementation for some compilers */
+# define KRANC_GFOFFSET3D(var,i,j,k) \
+ (*(CCTK_REAL const*)&((char const*)(var))[cdi*(i)+cdj*(j)+cdk*(k)])
+#else
+ /* vectorised version */
+# define KRANC_GFOFFSET3D(var,i,j,k) \
+ vec_loadu_maybe3((i),(j),(k), \
+ *(CCTK_REAL const*)& \
+ ((char const*)(var))[cdi*(i)+cdj*(j)+cdk*(k)])
+#endif
+
int sgn(CCTK_REAL x);
int GenericFD_GetBoundaryWidth(cGH const * restrict const cctkGH);