aboutsummaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2012-01-27 15:26:28 -0600
committerIan Hinder <ian.hinder@aei.mpg.de>2012-01-27 15:26:28 -0600
commit21a79c63a3709e01a571ef70c159627f726aa3f0 (patch)
tree456d1e62a7e9442fbe1ce8d14f058fbbaedd8e3a /Tools
parent47bcbd10d0e7a1ec30cd1c7900289bf2ae757e26 (diff)
Support finite differencing in CaKernel
Diffstat (limited to 'Tools')
-rw-r--r--Tools/CodeGen/CaKernel.m11
-rw-r--r--Tools/CodeGen/CalculationFunction.m3
-rw-r--r--Tools/CodeGen/Differencing.m19
-rw-r--r--Tools/CodeGen/Kranc.m3
-rw-r--r--Tools/CodeGen/Thorn.m3
5 files changed, 24 insertions, 15 deletions
diff --git a/Tools/CodeGen/CaKernel.m b/Tools/CodeGen/CaKernel.m
index 9444864..58cc462 100644
--- a/Tools/CodeGen/CaKernel.m
+++ b/Tools/CodeGen/CaKernel.m
@@ -119,14 +119,19 @@ DefFn[CaKernelCode[calc_List,opts___] :=
CallerFunction -> False,
LoopFunction -> (codeBlock[kernel<>"_Computations", #] &),
GFAccessFunction -> ({"I3D(",Riffle[{#,0,0,0},","],")"} &),
- InitFDVariables -> CaKernelInitialiseFDVariables[]}];
+ InitFDVariables -> CaKernelInitialiseFDVariables[],
+ MacroPointer -> False}];
- {"#define KRANC_" <> ToUpperCase[CodeGenC`SOURCELANGUAGE] <> "\n\n",
+ {"#undef KRANC_DIFF_FUNCTIONS\n",
+ "#define KRANC_" <> ToUpperCase[CodeGenC`SOURCELANGUAGE] <> "\n",
Map[IncludeFile, {"Differencing.h", "GenericFD.h"}],
+ "\n",
+ "#define KRANC_GFOFFSET3D(u,i,j,k) I3D(u,i,j,k)\n",
+ "\n",
CalculationMacros[],
- "\n#define CCTK_GFINDEX3D(u,i,j,k) I3D(u,i,j,k)\n\n", CreateCalculationFunction[calc2,opts]}]];
+ "\n", CreateCalculationFunction[calc2,opts]}]];
DefFn[CaKernelEpilogue[] :=
diff --git a/Tools/CodeGen/CalculationFunction.m b/Tools/CodeGen/CalculationFunction.m
index 26190be..62adce4 100644
--- a/Tools/CodeGen/CalculationFunction.m
+++ b/Tools/CodeGen/CalculationFunction.m
@@ -768,7 +768,8 @@ DefFn[
CommentedBlock["Precompute derivatives",
PrecomputeDerivatives[defsWithoutShorts, eqsOrdered,
lookup[{opts}, IntParameters, {}],
- OptionValue[ZeroDimensions]]],
+ OptionValue[ZeroDimensions],
+ lookup[cleancalc, MacroPointer]]],
CommentedBlock["Calculate temporaries and grid functions", calcCode],
diff --git a/Tools/CodeGen/Differencing.m b/Tools/CodeGen/Differencing.m
index 52ed4b9..9c1aca9 100644
--- a/Tools/CodeGen/Differencing.m
+++ b/Tools/CodeGen/Differencing.m
@@ -189,7 +189,7 @@ getParamName[p_List] := lookup[p,Name];
getParamName[p_] := p;
DefFn[
- PrecomputeDerivatives[derivOps_, expr_, intParams_, zeroDims_] :=
+ PrecomputeDerivatives[derivOps_, expr_, intParams_, zeroDims_, macroPointer_] :=
Module[{componentDerivOps, gfds, sortedgfds, opNames, intParamNames, paramsInOps,
paramName, opsWithParam, opNamesWithParam, replace, param},
gfds = GridFunctionDerivativesInExpression[derivOps, expr, zeroDims];
@@ -204,7 +204,7 @@ DefFn[
If[paramsInOps === {},
Map[DerivativeOperatorVerify, derivOps];
- Map[PrecomputeDerivative, sortedgfds],
+ Map[PrecomputeDerivative[#,Automatic,macroPointer]&, sortedgfds],
(* else *)
paramName = First[paramsInOps];
opsWithParam = Select[derivOps, Cases[#, paramName, Infinity] =!= {} &];
@@ -217,7 +217,7 @@ DefFn[
{Map[DeclareVariableNoInit[GridFunctionDerivativeName[#],DataType[]] &, sortedgfds],
"\n",
SwitchStatement[paramName,
- Sequence@@Table[{value, Map[PrecomputeDerivative[# /. replace[value],#] &, sortedgfds]},
+ Sequence@@Table[{value, Map[PrecomputeDerivative[# /. replace[value],#,macroPointer] &, sortedgfds]},
{value, lookup[param, AllowedValues]}]]}]]];
DefFn[
@@ -300,19 +300,20 @@ DefFn[
(*************************************************************)
DefFn[
- PrecomputeDerivative[d:pd_[gf_, inds___], vargfd_:Automatic] :=
+ PrecomputeDerivative[d:pd_[gf_, inds___], vargfd_, macroPointer_] :=
Module[{},
If[vargfd === Automatic,
- DeclareAssignVariable[DataType[], GridFunctionDerivativeName[d], evaluateDerivative[d]],
- AssignVariable[GridFunctionDerivativeName[vargfd], evaluateDerivative[d]]]]];
+ DeclareAssignVariable[DataType[], GridFunctionDerivativeName[d], evaluateDerivative[d,macroPointer]],
+ AssignVariable[GridFunctionDerivativeName[vargfd], evaluateDerivative[d,macroPointer]]]]];
DefFn[
- evaluateDerivative[d:pd_[gf_, inds___]] :=
+ evaluateDerivative[d:pd_[gf_, inds___], macroPointer_] :=
Module[{macroname},
macroName = ComponentDerivativeOperatorMacroName[pd[inds] -> expr];
(* Return[ToString[macroName] <> "(" <> ToString[gf] <> ", i, j, k)"] *)
- (* Return[ToString[macroName] <> "(" <> ToString[gf] <> ")"] *)
- Return[ToString[macroName] <> "(&" <> ToString[gf] <> "[index])"]
+ If[macroPointer,
+ Return[ToString[macroName] <> "(&" <> ToString[gf] <> "[index])"],
+ Return[ToString[macroName] <> "(" <> ToString[gf] <> ")"]]
]];
DeclareDerivative[d:pd_[gf_, inds___]] :=
diff --git a/Tools/CodeGen/Kranc.m b/Tools/CodeGen/Kranc.m
index d61093b..9217613 100644
--- a/Tools/CodeGen/Kranc.m
+++ b/Tools/CodeGen/Kranc.m
@@ -40,7 +40,8 @@ LoopPreIncludes, GroupImplementations, PartialDerivatives, NoSimplify,
Boundary, Interior, InteriorNoSync, Where, AddToStencilWidth,
Everywhere, normal1, normal2, normal3, INV, SQR, CUB, QAD, dot, pow,
exp, dt, dx, dy, dz, idx, idy, idz, t, MinMod, VanLeer, BodyFunction,
-CallerFunction, LoopFunction, GFAccessFunction, InitFDVariables}
+CallerFunction, LoopFunction, GFAccessFunction, InitFDVariables,
+MacroPointer}
{ConditionalOnKeyword, ConditionalOnKeywords, CollectList, Interior,
InteriorNoSync, Boundary, BoundaryWithGhosts, Where, PreDefinitions,
diff --git a/Tools/CodeGen/Thorn.m b/Tools/CodeGen/Thorn.m
index 841be30..787b132 100644
--- a/Tools/CodeGen/Thorn.m
+++ b/Tools/CodeGen/Thorn.m
@@ -531,7 +531,8 @@ CreateSetterSource[calcs_, debug_, include_,
CallerFunction -> True,
LoopFunction -> (GenericGridLoop[lookup[calc,Name],#,opts] &),
GFAccessFunction -> ({#,"[","index","]"} &),
- InitFDVariables -> InitialiseFDVariables[OptionValue[UseVectors]]}];
+ InitFDVariables -> InitialiseFDVariables[OptionValue[UseVectors]],
+ MacroPointer -> True}];
CreateCalculationFunction[calc, opts]}];