aboutsummaryrefslogtreecommitdiff
path: root/Tools/CodeGen
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2012-11-21 16:17:43 +0100
committerIan Hinder <ian.hinder@aei.mpg.de>2012-11-21 16:17:43 +0100
commit7a654b106b7c29cf5c9522d586478f68ab47657d (patch)
tree7f31902b084ba85e02ba345976a9017ce2f937cd /Tools/CodeGen
parent2d7502d4f7cb0dba0b52640de4bb624946460775 (diff)
Change format of internal data structure for group storage
Diffstat (limited to 'Tools/CodeGen')
-rw-r--r--Tools/CodeGen/Schedule.m13
-rw-r--r--Tools/CodeGen/Thorn.m26
2 files changed, 26 insertions, 13 deletions
diff --git a/Tools/CodeGen/Schedule.m b/Tools/CodeGen/Schedule.m
index 56af53e..c2ce5fa 100644
--- a/Tools/CodeGen/Schedule.m
+++ b/Tools/CodeGen/Schedule.m
@@ -28,11 +28,10 @@ Begin["`Private`"];
Scheduling
-------------------------------------------------------------------------- *)
-storageStructure[groupName_, timelevels_, param_String] :=
+storageStructure[groupName_, timelevels_] :=
{
Group -> groupName,
- Timelevels -> timelevels,
- TimelevelsParameter -> param
+ Timelevels -> timelevels
};
groupsSetInCalc[calc_, groups_] :=
@@ -274,15 +273,15 @@ CreateKrancScheduleFile[calcs_, groups_, evolvedGroups_, rhsGroups_, nonevolvedG
{tl},
tl = NonevolvedTimelevels[groupFromName[#, groups]];
If[tl===1,
- storageStructure[#, tl, "other_timelevels"],
- storageStructure[#, evolutionTimelevels, "timelevels"]]] &,
+ storageStructure[#, {"other_timelevels", tl}],
+ storageStructure[#, {"timelevels", evolutionTimelevels}]]] &,
(* over *)
nonevolvedGroups],
- Map[storageStructure[#, evolutionTimelevels, "timelevels"] &,
+ Map[storageStructure[#, {"timelevels", evolutionTimelevels}] &,
evolvedGroups],
- Map[storageStructure[#, evolutionTimelevels, "rhs_timelevels"] &,
+ Map[storageStructure[#, {"rhs_timelevels", evolutionTimelevels}] &,
rhsGroups]];
(* Schedule groups defined in calculations *)
diff --git a/Tools/CodeGen/Thorn.m b/Tools/CodeGen/Thorn.m
index 39bcee8..74259c4 100644
--- a/Tools/CodeGen/Thorn.m
+++ b/Tools/CodeGen/Thorn.m
@@ -364,12 +364,26 @@ CreateInterface[implementation_, inheritedImplementations_, includeFiles_,
structure for inclusion in the schedule.ccl file to allocate
storage for this group. *)
groupStorage[spec_] :=
- If[mapContains[spec, TimelevelsParameter],
- Flatten[Table[{"if (", lookup[spec, TimelevelsParameter], " == ", i, ")\n",
- "{\n",
- " STORAGE: ", lookup[spec, Group], "[", i, "]\n",
- "}\n"}, {i, 1, lookup[spec, Timelevels]}], 1],
- {"STORAGE: ", lookup[spec, Group], "[", lookup[spec, Timelevels], "]\n"}]
+ Module[
+ {tls = lookup[spec,Timelevels],
+ group = lookup[spec, Group]},
+ Which[
+ IntegerQ[tls],
+ {"STORAGE: ", group, "[", tls, "]\n"},
+
+ ListQ[tls],
+ If[!MatchQ[tls, {_String, _Integer}],
+ Error["Unrecognized Timelevels value "<>ToString[tls]]];
+ Module[
+ {param,max},
+ {param,max} = tls;
+ Flatten[
+ Table[{"if (", param, " == ", i, ")\n",
+ "{\n",
+ " STORAGE: ", group, "[", i, "]\n",
+ "}\n"}, {i, 1, max}], 1]],
+
+ True, Error["Unrecognized Timelevels value "<>ToString[tls]]]];
(* Given a function scheduling specification as defined above, return