From 39ed843346a337c4e1e8687f9f802a34367108ba Mon Sep 17 00:00:00 2001 From: Ian Hinder Date: Fri, 13 Sep 2013 16:27:09 +0200 Subject: Move differencing code processing from KrancThorn.m to Differencing.m --- Tools/CodeGen/Differencing.m | 28 +++++++++++++++++++++++++++- 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 \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 \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 -- cgit v1.2.3