diff options
author | Ian Hinder <ian.hinder@aei.mpg.de> | 2012-01-26 23:25:20 -0600 |
---|---|---|
committer | Ian Hinder <ian.hinder@aei.mpg.de> | 2012-01-26 23:25:20 -0600 |
commit | a98dcbac2496e35a435446137a765e7e508a6a9f (patch) | |
tree | 29e95c2112b357068ad39990a7ba7282830e2d4f /Tools/CodeGen | |
parent | 1caaf61101e96bdef8c956648e98fd196592f5e5 (diff) |
Factor out InitFDVariables
This means it can be different for CaKernel
Diffstat (limited to 'Tools/CodeGen')
-rw-r--r-- | Tools/CodeGen/CaKernel.m | 30 | ||||
-rw-r--r-- | Tools/CodeGen/CalculationFunction.m | 3 | ||||
-rw-r--r-- | Tools/CodeGen/Kranc.m | 2 | ||||
-rw-r--r-- | Tools/CodeGen/Thorn.m | 3 |
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]}]; |