diff options
author | Ian Hinder <ian.hinder@aei.mpg.de> | 2012-11-21 16:17:43 +0100 |
---|---|---|
committer | Ian Hinder <ian.hinder@aei.mpg.de> | 2012-11-21 16:17:43 +0100 |
commit | 7a654b106b7c29cf5c9522d586478f68ab47657d (patch) | |
tree | 7f31902b084ba85e02ba345976a9017ce2f937cd /Tools/CodeGen | |
parent | 2d7502d4f7cb0dba0b52640de4bb624946460775 (diff) |
Change format of internal data structure for group storage
Diffstat (limited to 'Tools/CodeGen')
-rw-r--r-- | Tools/CodeGen/Schedule.m | 13 | ||||
-rw-r--r-- | Tools/CodeGen/Thorn.m | 26 |
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 |