diff options
author | Ian Hinder <ian.hinder@aei.mpg.de> | 2012-01-27 15:26:28 -0600 |
---|---|---|
committer | Ian Hinder <ian.hinder@aei.mpg.de> | 2012-01-27 15:26:28 -0600 |
commit | 21a79c63a3709e01a571ef70c159627f726aa3f0 (patch) | |
tree | 456d1e62a7e9442fbe1ce8d14f058fbbaedd8e3a /Tools | |
parent | 47bcbd10d0e7a1ec30cd1c7900289bf2ae757e26 (diff) |
Support finite differencing in CaKernel
Diffstat (limited to 'Tools')
-rw-r--r-- | Tools/CodeGen/CaKernel.m | 11 | ||||
-rw-r--r-- | Tools/CodeGen/CalculationFunction.m | 3 | ||||
-rw-r--r-- | Tools/CodeGen/Differencing.m | 19 | ||||
-rw-r--r-- | Tools/CodeGen/Kranc.m | 3 | ||||
-rw-r--r-- | Tools/CodeGen/Thorn.m | 3 |
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]}]; |