aboutsummaryrefslogtreecommitdiff
path: root/Tools/CodeGen/Differencing.m
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2013-09-13 16:27:09 +0200
committerIan Hinder <ian.hinder@aei.mpg.de>2013-09-13 16:27:09 +0200
commit39ed843346a337c4e1e8687f9f802a34367108ba (patch)
treef0a83b1348a51ccb4bd2e6e4279be08e8a7e1256 /Tools/CodeGen/Differencing.m
parent110424e82ef48f68c1c6cd35fca215ccfd37bb55 (diff)
Move differencing code processing from KrancThorn.m to Differencing.m
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[];