aboutsummaryrefslogtreecommitdiff
path: root/Tools/CodeGen/KrancThorn.m
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2008-06-16 19:34:13 -0500
committerIan Hinder <ian.hinder@aei.mpg.de>2009-04-27 21:41:03 +0200
commit4c2116d9271c337418ed7ae15f535e73de6bb234 (patch)
tree2fb1eb317c73f7b13888c939c7ee39227b768f11 /Tools/CodeGen/KrancThorn.m
parent29745c0d13509352c8a32837079fa16c0fca1075 (diff)
Add new calculation specification "ConditionalOnKeywords", which allows a list of keyword parameters (instead of only a single keyword parameter) which have to be set for the calculation to be scheduled.
Diffstat (limited to 'Tools/CodeGen/KrancThorn.m')
-rw-r--r--Tools/CodeGen/KrancThorn.m17
1 files changed, 15 insertions, 2 deletions
diff --git a/Tools/CodeGen/KrancThorn.m b/Tools/CodeGen/KrancThorn.m
index e1cc5c8..49bea9d 100644
--- a/Tools/CodeGen/KrancThorn.m
+++ b/Tools/CodeGen/KrancThorn.m
@@ -32,7 +32,8 @@ BeginPackage["sym`"];
ExtendedRealParameters,ExtendedIntParameters,ExtendedKeywordParameters,
Parameters,
EvolutionTimelevels,
- PartialDerivatives, InheritedImplementations, ConditionalOnKeyword, ReflectionSymmetries, ZeroDimensions, CollectList, Interior, Boundary, BoundaryWithGhosts, Where, PreDefinitions, AllowedSymbols, UseLoopControl};
+
+PartialDerivatives, InheritedImplementations, ConditionalOnKeyword, ConditionalOnKeywords, ReflectionSymmetries, ZeroDimensions, CollectList, Interior, Boundary, BoundaryWithGhosts, Where, PreDefinitions, AllowedSymbols, UseLoopControl};
EndPackage[];
@@ -662,8 +663,9 @@ groupsSetInCalc[calc_, groups_] :=
function returns a LIST of schedule structures for each calculation
*)
scheduleCalc[calc_, groups_] :=
- Module[{points, conditional, triggered, keyword, value, groupsToSync},
+ Module[{points, conditional, conditionals, keywordConditional, keywordConditionals, triggered, keyword, value, keywordvaluepairs, groupsToSync},
conditional = mapContains[calc, ConditionalOnKeyword];
+ conditionals = mapContains[calc, ConditionalOnKeywords];
triggered = mapContains[calc, TriggerGroups];
If[conditional,
keywordConditional = lookup[calc, ConditionalOnKeyword];
@@ -673,6 +675,15 @@ scheduleCalc[calc_, groups_] :=
keyword = keywordConditional[[1]];
value = keywordConditional[[2]];
];
+ If[conditionals,
+ keywordConditionals = lookup[calc, ConditionalOnKeywords];
+ If[! MatchQ[keywordConditionals, {{_, _} ...}],
+ ThrowError["ConditionalOnKeywords entry in calculation expected to be of the form {{parameter, value}}, but was ", keywordConditionals, "Calculation is ", calc]];
+
+ keywordvaluepairs =
+ Map[# /. {keyword_, value_} -> {Parameter -> keyword, Value -> value} &,
+ keywordConditionals];
+ ];
groupsToSync = If[lookupDefault[calc, Where, Everywhere] === Interior ||
lookupDefault[calc, Where, Everywhere] === Boundary,
@@ -693,6 +704,8 @@ scheduleCalc[calc_, groups_] :=
If[triggered, {TriggerGroups -> lookup[calc, TriggerGroups]},
{}],
If[conditional, {Conditional -> {Parameter -> keyword, Value -> value}},
+ {}],
+ If[conditionals, {Conditionals -> keywordvaluepairs},
{}]
] &,
lookup[calc, Schedule]]];