aboutsummaryrefslogtreecommitdiff
path: root/Tools/CodeGen/Differencing.m
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/CodeGen/Differencing.m')
-rw-r--r--Tools/CodeGen/Differencing.m28
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[];