diff options
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 |