diff options
-rw-r--r-- | Tools/CodeGen/CalculationFunction.m | 6 | ||||
-rw-r--r-- | Tools/CodeGen/CodeGen.m | 14 | ||||
-rw-r--r-- | Tools/CodeGen/Differencing.m | 12 | ||||
-rw-r--r-- | Tools/CodeGen/Thorn.m | 2 |
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)))" }]]; |