aboutsummaryrefslogtreecommitdiff
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
parent110424e82ef48f68c1c6cd35fca215ccfd37bb55 (diff)
Move differencing code processing from KrancThorn.m to Differencing.m
-rw-r--r--Tools/CodeGen/Differencing.m28
-rw-r--r--Tools/CodeGen/KrancThorn.m19
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