aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Tools/CodeGen/CalculationFunction.m6
-rw-r--r--Tools/CodeGen/CodeGen.m14
-rw-r--r--Tools/CodeGen/Differencing.m12
-rw-r--r--Tools/CodeGen/Thorn.m2
4 files changed, 20 insertions, 14 deletions
diff --git a/Tools/CodeGen/CalculationFunction.m b/Tools/CodeGen/CalculationFunction.m
index f65e539..fc628bb 100644
--- a/Tools/CodeGen/CalculationFunction.m
+++ b/Tools/CodeGen/CalculationFunction.m
@@ -249,7 +249,7 @@ simpCollect[collectList_, eqrhs_, localvar_, debug_] :=
assignVariableFromExpression[dest_, expr_, declare_] :=
Module[{tSym, type, cleanExpr, code},
tSym = Unique[];
- type = If[StringMatchQ[ToString[dest], "dir*"], "int", "CCTK_REAL_VEC"];
+ type = If[StringMatchQ[ToString[dest], "dir*"], "ptrdiff_t", "CCTK_REAL_VEC"];
cleanExpr = ReplacePowers[expr] /. Kranc`t -> tSym;
If[SOURCELANGUAGE == "C",
@@ -587,7 +587,7 @@ equationLoop[eqs_, cleancalc_, gfs_, shorts_, incs_, groups_, pddefs_,
CommentedBlock["If necessary, store only partial vectors after the first iteration",
ConditionalOnParameterTextual["CCTK_REAL_VEC_SIZE > 1 && i<lc_imin",
{
- DeclareAssignVariable["int", "elt_count", "lc_imin-i"],
+ DeclareAssignVariable["ptrdiff_t", "elt_count", "lc_imin-i"],
Map[StoreHighPartialVariableInLoop[GridName[#], localName[#], "elt_count"] &,
gfsInLHS],
"continue;\n"
@@ -595,7 +595,7 @@ equationLoop[eqs_, cleancalc_, gfs_, shorts_, incs_, groups_, pddefs_,
CommentedBlock["If necessary, store only partial vectors after the last iteration",
ConditionalOnParameterTextual["CCTK_REAL_VEC_SIZE > 1 && i+CCTK_REAL_VEC_SIZE > lc_imax",
{
- DeclareAssignVariable["int", "elt_count", "lc_imax-i"],
+ DeclareAssignVariable["ptrdiff_t", "elt_count", "lc_imax-i"],
Map[StoreLowPartialVariableInLoop[GridName[#], localName[#], "elt_count"] &,
gfsInLHS],
"break;\n"
diff --git a/Tools/CodeGen/CodeGen.m b/Tools/CodeGen/CodeGen.m
index 1bcdfb9..6cda92b 100644
--- a/Tools/CodeGen/CodeGen.m
+++ b/Tools/CodeGen/CodeGen.m
@@ -420,17 +420,17 @@ DeclareFDVariables[] :=
{khalf,kthird,ktwothird,kfourthird,keightthird},
{"hdxi", "hdyi", "hdzi"}}],
"\n"},
- {Map[DeclareVariables[#, "int"] &, {{"di", "dj", "dk"}}],
+ {Map[DeclareVariables[#, "ptrdiff_t"] &, {{"di", "dj", "dk"}}],
"\n"}];
*)
CommentedBlock["Declare finite differencing variables", {}];
InitialiseFDSpacingVariablesC[] :=
{
- (* DeclareAssignVariable["int", "di", "CCTK_GFINDEX3D(cctkGH,1,0,0) - CCTK_GFINDEX3D(cctkGH,0,0,0)"], *)
- DeclareAssignVariable["int", "di", "1"],
- DeclareAssignVariable["int", "dj", "CCTK_GFINDEX3D(cctkGH,0,1,0) - CCTK_GFINDEX3D(cctkGH,0,0,0)"],
- DeclareAssignVariable["int", "dk", "CCTK_GFINDEX3D(cctkGH,0,0,1) - CCTK_GFINDEX3D(cctkGH,0,0,0)"],
+ (* DeclareAssignVariable["ptrdiff_t", "di", "CCTK_GFINDEX3D(cctkGH,1,0,0) - CCTK_GFINDEX3D(cctkGH,0,0,0)"], *)
+ DeclareAssignVariable["ptrdiff_t", "di", "1"],
+ DeclareAssignVariable["ptrdiff_t", "dj", "CCTK_GFINDEX3D(cctkGH,0,1,0) - CCTK_GFINDEX3D(cctkGH,0,0,0)"],
+ DeclareAssignVariable["ptrdiff_t", "dk", "CCTK_GFINDEX3D(cctkGH,0,0,1) - CCTK_GFINDEX3D(cctkGH,0,0,0)"],
DeclareAssignVariable["CCTK_REAL_VEC", "dx", "ToReal(CCTK_DELTA_SPACE(0))"],
DeclareAssignVariable["CCTK_REAL_VEC", "dy", "ToReal(CCTK_DELTA_SPACE(1))"],
DeclareAssignVariable["CCTK_REAL_VEC", "dz", "ToReal(CCTK_DELTA_SPACE(2))"]
@@ -630,7 +630,7 @@ GenericGridLoopUsingLoopControl[functionName_, block_] :=
{
(* DeclareVariable["index", "// int"], *)
(* DeclareAssignVariable["int", "index", "CCTK_GFINDEX3D(cctkGH,i,j,k)"], *)
- DeclareAssignVariable["int", "index", "di*i + dj*j + dk*k"],
+ DeclareAssignVariable["ptrdiff_t", "index", "di*i + dj*j + dk*k"],
block
}
],
@@ -1063,7 +1063,7 @@ CSE[code_] := Module[
(* Turn CDeclare statements into "faked" declarations *)
stmts7 = stmts6
//. CDeclare[var_]
- :> "CCTK_REAL const " <>
+ :> "const " <>
StringReplace[ToString[var], __ ~~ "`" -> ""];
If [DebugCSE, Print["stmts7\n", stmts7, "\nendstmts7\n"]];
diff --git a/Tools/CodeGen/Differencing.m b/Tools/CodeGen/Differencing.m
index da90db0..80d37fd 100644
--- a/Tools/CodeGen/Differencing.m
+++ b/Tools/CodeGen/Differencing.m
@@ -168,7 +168,7 @@ CreateDifferencingHeader[derivOps_, zeroDims_] :=
pDefs = Union[Flatten[Map[First, mDefPairs]]];
expressions = Flatten[Map[#[[2]]&, mDefPairs]];
- {pDefs,Map[{#, "\n"} &, expressions]}];
+ {pDefs, Map[{#, "\n"} &, expressions]}];
ordergfds[_[v1_,___], _[v2_,___]] :=
Order[v1,v2] != -1;
@@ -323,6 +323,7 @@ ComponentDerivativeOperatorMacroDefinition[componentDerivOp:(name_[inds___] -> e
Print[""];*)
rhs = CFormHideStrings[ReplacePowers[rhs /. spacings]];
+ (* Print["rhs=",FullForm[rhs]]; *)
(* {pDefs, FlattenBlock[{"#define ", macroName, "(u,i,j,k) ", "(", rhs, ")"}]} *)
{pDefs, FlattenBlock[{
"#ifndef KRANC_DIFF_FUNCTIONS\n",
@@ -330,8 +331,13 @@ ComponentDerivativeOperatorMacroDefinition[componentDerivOp:(name_[inds___] -> e
"# define ", macroName, "(u) ", "(kmul(", liName, ",", rhs, "))\n",
"#else\n",
(* new, differencing operators are static functions *)
- "# define ", macroName, "(u) ", "(", liName, "*", macroName, "_impl((u),dj,dk))\n",
- "static CCTK_REAL_VEC ", macroName, "_impl(CCTK_REAL const* restrict const u, int const dj, int const dk) ", "{ return ", rhs, "; }\n",
+ "# define ", macroName, "(u) ", "(kmul(", liName, ",", macroName, "_impl((u),dj,dk)))\n",
+ "#include \"vectors.h\"\n",
+ "static CCTK_REAL_VEC ", macroName, "_impl(CCTK_REAL const* restrict const u, ptrdiff_t const dj, ptrdiff_t const dk) CCTK_ATTRIBUTE_NOINLINE CCTK_ATTRIBUTE_PURE CCTK_ATTRIBUTE_UNUSED;\n",
+ "static CCTK_REAL_VEC ", macroName, "_impl(CCTK_REAL const* restrict const u, ptrdiff_t const dj, ptrdiff_t const dk)\n",
+ If[StringMatchQ[rhs, RegularExpression[".*\\bdir\\d\\b.*"]],
+ { "{ return ToReal(1e30); /* ERROR */ }\n" },
+ { "{ return ", rhs, "; }\n" }],
"#endif\n"
}]}];
diff --git a/Tools/CodeGen/Thorn.m b/Tools/CodeGen/Thorn.m
index 7f9f8a5..96cdb70 100644
--- a/Tools/CodeGen/Thorn.m
+++ b/Tools/CodeGen/Thorn.m
@@ -480,7 +480,7 @@ calculationMacros[] :=
{"INITVALUE (42)",
"INV(x) (kdiv(ToReal(1.0),x))",
"SQR(x) (kmul(x,x))",
- "CUB(x) (x*SQR(x))",
+ "CUB(x) (kmul(x,SQR(x)))",
"QAD(x) (SQR(SQR(x)))"
}]];