aboutsummaryrefslogtreecommitdiff
path: root/Tools/CodeGen
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2012-01-26 23:25:20 -0600
committerIan Hinder <ian.hinder@aei.mpg.de>2012-01-26 23:25:20 -0600
commita98dcbac2496e35a435446137a765e7e508a6a9f (patch)
tree29e95c2112b357068ad39990a7ba7282830e2d4f /Tools/CodeGen
parent1caaf61101e96bdef8c956648e98fd196592f5e5 (diff)
Factor out InitFDVariables
This means it can be different for CaKernel
Diffstat (limited to 'Tools/CodeGen')
-rw-r--r--Tools/CodeGen/CaKernel.m30
-rw-r--r--Tools/CodeGen/CalculationFunction.m3
-rw-r--r--Tools/CodeGen/Kranc.m2
-rw-r--r--Tools/CodeGen/Thorn.m3
4 files changed, 34 insertions, 4 deletions
diff --git a/Tools/CodeGen/CaKernel.m b/Tools/CodeGen/CaKernel.m
index 31b5327..ec48ef1 100644
--- a/Tools/CodeGen/CaKernel.m
+++ b/Tools/CodeGen/CaKernel.m
@@ -83,6 +83,31 @@ DefFn[codeBlock[macro_String, contents:CodeGenBlock] :=
IndentBlock[{contents,"\n"}],
macro<>"_End","\n"}]];
+DefFn[
+ CaKernelInitialiseFDVariables[] :=
+ CommentedBlock[
+ "Initialise finite differencing variables",
+ {
+ DeclareAssignVariable[DataType[], "dx", "params.cagh_dx"],
+ DeclareAssignVariable[DataType[], "dy", "params.cagh_dy"],
+ DeclareAssignVariable[DataType[], "dz", "params.cagh_dz"],
+ DeclareAssignVariable[DataType[], "dt", "params.cagh_dt"],
+ DeclareAssignVariable[DataType[], "t", "params.cagh_time"],
+
+ DeclareAssignVariable[DataType[], "dxi", "INV(dx)"],
+ DeclareAssignVariable[DataType[], "dyi", "INV(dy)"],
+ DeclareAssignVariable[DataType[], "dzi", "INV(dz)"],
+
+ DeclareAssignVariable[DataType[], "khalf", "0.5"],
+ DeclareAssignVariable[DataType[], "kthird", "1/3.0"],
+ DeclareAssignVariable[DataType[], "ktwothird", "2.0/3.0"],
+ DeclareAssignVariable[DataType[], "kfourthird", "4.0/3.0"],
+ DeclareAssignVariable[DataType[], "keightthird", "8.0/3.0"],
+ DeclareAssignVariable[DataType[], "hdxi", "0.5 * dxi"],
+ DeclareAssignVariable[DataType[], "hdyi", "0.5 * dyi"],
+ DeclareAssignVariable[DataType[], "hdzi", "0.5 * dzi"]}]];
+
+
DefFn[CaKernelCode[calc_List,opts___] :=
Module[
{kernel = "CAKERNEL_"<>GetCalculationName[calc], calc2},
@@ -92,11 +117,14 @@ DefFn[CaKernelCode[calc_List,opts___] :=
calc2 = Join[calc, {BodyFunction -> (codeBlock[kernel, #] &),
CallerFunction -> False,
LoopFunction -> (codeBlock[kernel<>"_Computations", #] &),
- GFAccessFunction -> ({"I3D(",Riffle[{#,0,0,0},","],")"} &)}];
+ GFAccessFunction -> ({"I3D(",Riffle[{#,0,0,0},","],")"} &),
+ InitFDVariables -> CaKernelInitialiseFDVariables[]}];
{"#define KRANC_" <> ToUpperCase[CodeGenC`SOURCELANGUAGE] <> "\n\n",
Map[IncludeFile, {"Differencing.h", "GenericFD.h"}],
+ CalculationMacros[],
+
"\n#define CCTK_GFINDEX3D(u,i,j,k) I3D(u,i,j,k)\n\n", CreateCalculationFunction[calc2,opts]}]];
diff --git a/Tools/CodeGen/CalculationFunction.m b/Tools/CodeGen/CalculationFunction.m
index 863aff6..32b9428 100644
--- a/Tools/CodeGen/CalculationFunction.m
+++ b/Tools/CodeGen/CalculationFunction.m
@@ -505,7 +505,8 @@ DefFn[
CommentedBlock["Include user-supplied include files",
Map[IncludeFile, lookupDefault[cleancalc, DeclarationIncludes, {}]]],
- InitialiseFDVariables[OptionValue[UseVectors]],
+ lookup[calcp,InitFDVariables],
+
definePreDefinitions[pDefs],
If[OptionValue[UseJacobian], CreateJacobianVariables[], {}],
diff --git a/Tools/CodeGen/Kranc.m b/Tools/CodeGen/Kranc.m
index 04bb427..d61093b 100644
--- a/Tools/CodeGen/Kranc.m
+++ b/Tools/CodeGen/Kranc.m
@@ -40,7 +40,7 @@ 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}
+CallerFunction, LoopFunction, GFAccessFunction, InitFDVariables}
{ConditionalOnKeyword, ConditionalOnKeywords, CollectList, Interior,
InteriorNoSync, Boundary, BoundaryWithGhosts, Where, PreDefinitions,
diff --git a/Tools/CodeGen/Thorn.m b/Tools/CodeGen/Thorn.m
index c29773f..841be30 100644
--- a/Tools/CodeGen/Thorn.m
+++ b/Tools/CodeGen/Thorn.m
@@ -530,7 +530,8 @@ CreateSetterSource[calcs_, debug_, include_,
calc = Join[calc, {BodyFunction -> bodyFunction,
CallerFunction -> True,
LoopFunction -> (GenericGridLoop[lookup[calc,Name],#,opts] &),
- GFAccessFunction -> ({#,"[","index","]"} &)}];
+ GFAccessFunction -> ({#,"[","index","]"} &),
+ InitFDVariables -> InitialiseFDVariables[OptionValue[UseVectors]]}];
CreateCalculationFunction[calc, opts]}];