aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@gmail.com>2012-08-16 14:53:21 -0400
committerErik Schnetter <schnetter@gmail.com>2012-08-16 14:53:21 -0400
commit8f377c56d5b0cc81d5fb7c5cd29b3aeee50957ce (patch)
tree941bc137debbab99e2aefee017e277a67cf59566
parent9c55ecd91943159c1f5183b15de67e3709fa5eaf (diff)
Reinstate dir[] naming work-around; translate Sign[] to isgn()
-rw-r--r--Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h11
-rw-r--r--Tools/CodeGen/CalculationFunction.m2
-rw-r--r--Tools/CodeGen/CodeGenCactus.m3
-rw-r--r--Tools/CodeGen/Kranc.m4
4 files changed, 16 insertions, 4 deletions
diff --git a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h
index e3f21a0..81a70d9 100644
--- a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h
+++ b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h
@@ -63,6 +63,17 @@ KRANC_WHERE static inline CCTK_REAL sgn(CCTK_REAL x)
return x==(CCTK_REAL)0.0 ? (CCTK_REAL)0.0 : copysign((CCTK_REAL)1.0, x);
}
+KRANC_WHERE static inline int isgn(CCTK_REAL x)
+{
+ if (x == (CCTK_REAL)0.0) return 0;
+#ifdef __cplusplus
+ int s = std::signbit(x);
+#else
+ int s = signbit(x);
+#endif
+ return s ? -1 : +1;
+}
+
int GenericFD_GetBoundaryWidth(cGH const * restrict const cctkGH);
void GenericFD_GetBoundaryInfo(cGH const * restrict cctkGH,
diff --git a/Tools/CodeGen/CalculationFunction.m b/Tools/CodeGen/CalculationFunction.m
index 572aa6a..39bbe57 100644
--- a/Tools/CodeGen/CalculationFunction.m
+++ b/Tools/CodeGen/CalculationFunction.m
@@ -269,7 +269,7 @@ simpCollect[collectList_, eqrhs_, localvar_, debug_] :=
(* Return a CodeGen block which assigns dest by evaluating expr *)
assignVariableFromExpression[dest_, expr_, declare_, vectorise_, noSimplify:Boolean : False] :=
Module[{type, cleanExpr, code},
- type = DataType[];
+ type = If[StringMatchQ[ToString[dest], "dir*"], "ptrdiff_t", DataType[]];
cleanExpr = ReplacePowers[expr, vectorise, noSimplify];
If[SOURCELANGUAGE == "C",
diff --git a/Tools/CodeGen/CodeGenCactus.m b/Tools/CodeGen/CodeGenCactus.m
index 953b394..33b1c6b 100644
--- a/Tools/CodeGen/CodeGenCactus.m
+++ b/Tools/CodeGen/CodeGenCactus.m
@@ -568,6 +568,7 @@ DefFn[
fabs[x_] -> kfabs[x],
fmax[x_,y_] -> kfmax[x,y],
fmin[x_,y_] -> kfmin[x,y],
+ isgn[x_] -> kisgn[x],
log[x_] -> klog[x],
pow[x_,y_] -> kpow[x,y],
sgn[x_] -> ksgn[x],
@@ -810,7 +811,7 @@ DefFn[
rhs = rhs //. Max[xx_, yy__] -> fmax[xx, Max[yy]];
rhs = rhs //. Min[xx_, yy__] -> fmin[xx, Min[yy]];
rhs = rhs //. Abs[x_] -> fabs[x];
- rhs = rhs //. Sign[x_] -> sgn[x];
+ rhs = rhs //. Sign[x_] -> isgn[x];
rhs = rhs //. IntAbs[x_] -> abs[x];
If[vectorise === True,
diff --git a/Tools/CodeGen/Kranc.m b/Tools/CodeGen/Kranc.m
index 8d83404..296b2c0 100644
--- a/Tools/CodeGen/Kranc.m
+++ b/Tools/CodeGen/Kranc.m
@@ -25,10 +25,10 @@ BeginPackage["Kranc`"];
{INV, SQR, CUB, QAD, ScalarINV, ScalarSQR, ScalarCUB, ScalarQAD,
IfThen, Parenthesis, Scalar, ToReal,
sqrt, exp, log, pow, atan2, cos, sin, tan, acos, asin, atan,
- cosh, sinh, tanh, acosh, asinh, atanh, fmax, fmin, fabs,
+ cosh, sinh, tanh, acosh, asinh, atanh, fmax, fmin, fabs, isgn, sgn,
kmadd, kmsub, knmadd, knmsub, kpos, kneg, kadd, ksub, kmul, kdiv,
kacos, kacosh, kasin, kasinh, katan, katanh, kcopysign, kcos, kcosh, kfabs,
- kfmax, kfmin, ksqrt, kexp, klog, kpow, ksgn, ksin, ksinh, ktan, ktanh,
+ kfmax, kfmin, kisgn, ksqrt, kexp, klog, kpow, ksgn, ksin, ksinh, ktan, ktanh,
dir1, dir2, dir3, dt, dx, dy, dz,
khalf, kthird, ktwothird, kfourthird, keightthird};