diff options
author | Ian Hinder <ian.hinder@aei.mpg.de> | 2013-09-13 16:27:09 +0200 |
---|---|---|
committer | Ian Hinder <ian.hinder@aei.mpg.de> | 2013-09-13 16:27:09 +0200 |
commit | 39ed843346a337c4e1e8687f9f802a34367108ba (patch) | |
tree | f0a83b1348a51ccb4bd2e6e4279be08e8a7e1256 /Tools | |
parent | 110424e82ef48f68c1c6cd35fca215ccfd37bb55 (diff) |
Move differencing code processing from KrancThorn.m to Differencing.m
Diffstat (limited to 'Tools')
-rw-r--r-- | Tools/CodeGen/Differencing.m | 28 | ||||
-rw-r--r-- | Tools/CodeGen/KrancThorn.m | 19 |
2 files changed, 28 insertions, 19 deletions
diff --git a/Tools/CodeGen/Differencing.m b/Tools/CodeGen/Differencing.m index 2071fe7..983c9c0 100644 --- a/Tools/CodeGen/Differencing.m +++ b/Tools/CodeGen/Differencing.m @@ -135,7 +135,7 @@ point. TODO: Should be checked by someone competent! BeginPackage["Differencing`", {"CodeGen`", "CodeGenC`", "CodeGenCactus`", "CodeGenKranc`", "Kranc`", "MapLookup`", - (* "LinearAlgebra`MatrixManipulation`", *) "Errors`"}]; + (* "LinearAlgebra`MatrixManipulation`", *) "Errors`", "Code`", "Object`"}]; CreateDifferencingHeader::usage = ""; PrecomputeDerivatives::usage = ""; @@ -154,6 +154,7 @@ spacing::usage = ""; ComponentDerivativeOperatorStencilWidth::usage = ""; CheckStencil::usage = ""; StencilSize::usage = ""; +DifferencingProcessCode; GridFunctionDerivativeToDef; @@ -802,6 +803,31 @@ expandDerivOpOverParameters[op_, intParams_] := {op}, expandDerivOpOverParameter[op, usedParams[[1]]]]]; + +Options[DifferencingProcessCode] = ThornOptions; + +DefFn[ + DifferencingProcessCode[cIn_Code, opts:OptionsPattern[]] := + Module[ + {diffHeader, pDefs, c = cIn}, + InfoMessage[Terse, "Creating differencing header file"]; + {pDefs, diffHeader} = CreateDifferencingHeader[ + GetObjectField[c, "PartialDerivatives"], OptionValue[ZeroDimensions], + OptionValue[UseVectors], OptionValue[IntParameters]]; + c = SetObjectField[c, "Calculations", Map[Join[#, {PreDefinitions -> pDefs}] &, GetObjectField[c, "Calculations"]]]; + diffHeader = Join[ + If[OptionValue[UseVectors] && ! OptionValue[UseOpenCL], + {"#include <assert.h>\n", + "#include \"vectors.h\"\n", + "\n"}, + {}], + diffHeader]; + (* TODO: fix circular dependency which stops us from importing OpenCL in this package *) + If[OptionValue[UseOpenCL], diffHeader = OpenCL`OpenCLProcessDifferencingHeader[diffHeader]]; + AppendObjectField[ + c, "Sources", + {Filename -> "Differencing.h", Contents -> diffHeader}]]]; + End[]; EndPackage[]; diff --git a/Tools/CodeGen/KrancThorn.m b/Tools/CodeGen/KrancThorn.m index 8231a3a..c8bf952 100644 --- a/Tools/CodeGen/KrancThorn.m +++ b/Tools/CodeGen/KrancThorn.m @@ -345,24 +345,7 @@ CreateKrancThorn[groupsOrig_, parentDirectory_, thornName_, opts:OptionsPattern[ Create finite differencing header file ------------------------------------------------------------------------ *) - Module[ - {diffHeader, pDefs}, - InfoMessage[Terse, "Creating differencing header file"]; - {pDefs, diffHeader} = CreateDifferencingHeader[ - GetObjectField[c, "PartialDerivatives"], OptionValue[ZeroDimensions], - OptionValue[UseVectors], OptionValue[IntParameters]]; - c = SetObjectField[c, "Calculations", Map[Join[#, {PreDefinitions -> pDefs}] &, GetObjectField[c, "Calculations"]]]; - diffHeader = Join[ - If[OptionValue[UseVectors] && ! OptionValue[UseOpenCL], - {"#include <assert.h>\n", - "#include \"vectors.h\"\n", - "\n"}, - {}], - diffHeader]; - If[OptionValue[UseOpenCL], diffHeader = OpenCLProcessDifferencingHeader[diffHeader]]; - c = AppendObjectField[ - c, "Sources", - {Filename -> "Differencing.h", Contents -> diffHeader}]]; + c = DifferencingProcessCode[c, opts]; (* ------------------------------------------------------------------------ Create calculation source files |