diff options
Diffstat (limited to 'Tools/CodeGen/Differencing.m')
-rw-r--r-- | Tools/CodeGen/Differencing.m | 28 |
1 files changed, 27 insertions, 1 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[]; |