From 4c2116d9271c337418ed7ae15f535e73de6bb234 Mon Sep 17 00:00:00 2001 From: Erik Schnetter Date: Mon, 16 Jun 2008 19:34:13 -0500 Subject: 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. --- Tools/CodeGen/KrancThorn.m | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'Tools/CodeGen/KrancThorn.m') 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]]]; -- cgit v1.2.3