aboutsummaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2011-01-22 16:27:31 +0100
committerIan Hinder <ian.hinder@aei.mpg.de>2011-01-22 16:27:31 +0100
commitfc94de6b90bf95fba9453dc8f8f0f20c8d1b3125 (patch)
treeef7fe9bc1b822cd728102d0e03f36e9b582bc059 /Tools
parent40369ccd75e5c22d65d229093002fd1a509b51b7 (diff)
Only vectorise FD variables and macros when UseVectors is set
Diffstat (limited to 'Tools')
-rw-r--r--Tools/CodeGen/CalculationFunction.m2
-rw-r--r--Tools/CodeGen/CodeGen.m27
-rw-r--r--Tools/CodeGen/Thorn.m18
3 files changed, 30 insertions, 17 deletions
diff --git a/Tools/CodeGen/CalculationFunction.m b/Tools/CodeGen/CalculationFunction.m
index 4622d6a..d28a8f8 100644
--- a/Tools/CodeGen/CalculationFunction.m
+++ b/Tools/CodeGen/CalculationFunction.m
@@ -446,7 +446,7 @@ CreateCalculationFunction[calc_, debug_, useCSE_, imp_, opts:OptionsPattern[]] :
CommentedBlock["Include user-supplied include files",
Map[IncludeFile, lookupDefault[cleancalc, DeclarationIncludes, {}]]],
- InitialiseFDVariables[],
+ InitialiseFDVariables[OptionValue[UseVectors]],
definePreDefinitions[pDefs],
If[Cases[{pddefs}, SBPDerivative[_], Infinity] != {},
diff --git a/Tools/CodeGen/CodeGen.m b/Tools/CodeGen/CodeGen.m
index 7363616..57f38a7 100644
--- a/Tools/CodeGen/CodeGen.m
+++ b/Tools/CodeGen/CodeGen.m
@@ -456,7 +456,7 @@ InitialiseFDSpacingVariablesFortran[] :=
}
-InitialiseFDVariables[] :=
+InitialiseFDVariables[vectorise_] :=
CommentedBlock["Initialise finite differencing variables",
{ If[SOURCELANGUAGE == "Fortran",
InitialiseFDSpacingVariablesFortran[],
@@ -465,14 +465,23 @@ InitialiseFDVariables[] :=
DeclareAssignVariable[DataType[], "dxi", "INV(dx)"],
DeclareAssignVariable[DataType[], "dyi", "INV(dy)"],
DeclareAssignVariable[DataType[], "dzi", "INV(dz)"],
- DeclareAssignVariable[DataType[], "khalf", "ToReal(0.5)"],
- DeclareAssignVariable[DataType[], "kthird", "ToReal(1.0/3.0)"],
- DeclareAssignVariable[DataType[], "ktwothird", "ToReal(2.0/3.0)"],
- DeclareAssignVariable[DataType[], "kfourthird", "ToReal(4.0/3.0)"],
- DeclareAssignVariable[DataType[], "keightthird", "ToReal(8.0/3.0)"],
- DeclareAssignVariable[DataType[], "hdxi", "kmul(ToReal(0.5), dxi)"],
- DeclareAssignVariable[DataType[], "hdyi", "kmul(ToReal(0.5), dyi)"],
- DeclareAssignVariable[DataType[], "hdzi", "kmul(ToReal(0.5), dzi)"]}];
+ If[vectorise,
+ {DeclareAssignVariable[DataType[], "khalf", "ToReal(0.5)"],
+ DeclareAssignVariable[DataType[], "kthird", "ToReal(1.0/3.0)"],
+ DeclareAssignVariable[DataType[], "ktwothird", "ToReal(2.0/3.0)"],
+ DeclareAssignVariable[DataType[], "kfourthird", "ToReal(4.0/3.0)"],
+ DeclareAssignVariable[DataType[], "keightthird", "ToReal(8.0/3.0)"],
+ DeclareAssignVariable[DataType[], "hdxi", "kmul(ToReal(0.5), dxi)"],
+ DeclareAssignVariable[DataType[], "hdyi", "kmul(ToReal(0.5), dyi)"],
+ DeclareAssignVariable[DataType[], "hdzi", "kmul(ToReal(0.5), dzi)"]},
+ {DeclareAssignVariable[DataType[], "khalf", "0.5"],
+ DeclareAssignVariable[DataType[], "kthird", "1/3.0"],
+ DeclareAssignVariable[DataType[], "ktwothird", "2.0/3.0"],
+ DeclareAssignVariable[DataType[], "kfourthird", "4.0/3.0"],
+ DeclareAssignVariable[DataType[], "keightthird", "8.0/3.0"],
+ DeclareAssignVariable[DataType[], "hdxi", "0.5 * dxi"],
+ DeclareAssignVariable[DataType[], "hdyi", "0.5 * dyi"],
+ DeclareAssignVariable[DataType[], "hdzi", "0.5 * dzi"]}]}];
GridName[x_] := If[SOURCELANGUAGE == "C",
ToExpression[ToString[x] <> "[index]"],
diff --git a/Tools/CodeGen/Thorn.m b/Tools/CodeGen/Thorn.m
index 96cdb70..c280afe 100644
--- a/Tools/CodeGen/Thorn.m
+++ b/Tools/CodeGen/Thorn.m
@@ -474,15 +474,19 @@ CreateSchedule[globalStorageGroups_, scheduledGroups_, scheduledFunctions_] :=
optional LoopPreIncludes -> {include file list},
Equations -> {{K11_rhs -> 2 A K11, ...}...}} *)
-calculationMacros[] :=
+calculationMacros[vectorise_] :=
CommentedBlock["Define macros used in calculations",
Map[{"#define ", #, "\n"} &,
{"INITVALUE (42)",
- "INV(x) (kdiv(ToReal(1.0),x))",
- "SQR(x) (kmul(x,x))",
- "CUB(x) (kmul(x,SQR(x)))",
- "QAD(x) (SQR(SQR(x)))"
- }]];
+ "QAD(x) (SQR(SQR(x)))"} ~Join~
+ If[vectorise,
+ {"INV(x) (kdiv(ToReal(1.0),x))",
+ "SQR(x) (kmul(x,x))",
+ "CUB(x) (kmul(x,SQR(x)))"},
+ {"INV(x) ((1.0) / (x))",
+ "SQR(x) ((x) * (x))",
+ "CUB(x) ((x) * (x) * (x))"}]
+ ]];
(* Given a list of Calculation structures as defined above, create a
CodeGen representation of a source file that defines a function for
@@ -514,7 +518,7 @@ CreateSetterSource[calcs_, debug_, useCSE_, include_, imp_,
include,
If[OptionValue[UseLoopControl], {"loopcontrol.h"}, {}],
If[OptionValue[UseVectors], {"vectors.h"}, {}]]],
- calculationMacros[],
+ calculationMacros[OptionValue[UseVectors]],
(* For each function structure passed, create the function and
insert it *)