aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2013-09-13 15:43:23 +0200
committerIan Hinder <ian.hinder@aei.mpg.de>2013-09-13 15:43:23 +0200
commit110424e82ef48f68c1c6cd35fca215ccfd37bb55 (patch)
treeebf39d09b39b25a0439f2e4fcb4e5e44c7a97510
parenta8e14b3165e9aec46cb28a4e737987b95f3285e1 (diff)
Move MoL code processing from KrancThorn.m to MoL.m
-rw-r--r--Tools/CodeGen/KrancThorn.m54
-rw-r--r--Tools/CodeGen/MoL.m62
2 files changed, 62 insertions, 54 deletions
diff --git a/Tools/CodeGen/KrancThorn.m b/Tools/CodeGen/KrancThorn.m
index 963fdc7..8231a3a 100644
--- a/Tools/CodeGen/KrancThorn.m
+++ b/Tools/CodeGen/KrancThorn.m
@@ -235,59 +235,7 @@ CreateKrancThorn[groupsOrig_, parentDirectory_, thornName_, opts:OptionsPattern[
MoL
------------------------------------------------------------------------ *)
- Module[
- {evolvedGroups, nonevolvedGroups, evolvedODEGroups,
- nonevolvedODEGroups, rhsGroupDefinitions,
- rhsODEGroupDefinitions, rhsGroups, rhsODEGroups,
-
- groups, declaredGroups, calcs, odeGroups},
-
- groups = GetObjectField[c, "Groups"];
- declaredGroups = GetObjectField[c, "DeclaredGroups"];
- calcs = GetObjectField[c, "Calculations"];
- odeGroups = GetObjectField[c, "ODEGroups"];
-
- groups = MoLProcessGroups[declaredGroups,
- calcs, groups, GetObjectField[c,"EvolutionTimelevels"]];
-
- (* Get the different types of group *)
- evolvedGroups = MoLEvolvedGroups[declaredGroups, calcs, groups];
- nonevolvedGroups = MoLNonevolvedGroups[declaredGroups, calcs, groups];
-
- evolvedODEGroups = MoLEvolvedGroups[odeGroups, calcs, groups];
- nonevolvedODEGroups = MoLNonevolvedGroups[odeGroups, calcs, groups];
-
- (* Replace the dots in the calculation *)
- calcs = MoLReplaceDots[calcs];
-
- rhsGroupDefinitions = MoLRHSGroupDefinitions[groups, evolvedGroups];
- rhsODEGroupDefinitions = MoLRHSODEGroupDefinitions[groups, evolvedODEGroups];
-
- (* Add the RHS groups *)
- groups = Join[groups, rhsGroupDefinitions, rhsODEGroupDefinitions];
-
- rhsGroups = Map[groupName, rhsGroupDefinitions];
- rhsODEGroups = Map[groupName, rhsODEGroupDefinitions];
-
- (* This possibly shouldn't be in MoL but under ODEs instead *)
- calcs = Map[Append[#, ODEGroups -> Join[odeGroups, rhsODEGroups]] &, calcs];
-
- declaredGroups = Join[declaredGroups, rhsGroups, odeGroups, rhsODEGroups];
-
- InfoMessage[Terse, "Creating MoL registration file"];
- (* TODO: only do this for thorns with evolved variables *)
-
- c = SetObjectField[c, "Groups", groups];
- c = SetObjectField[c, "DeclaredGroups", declaredGroups];
- c = SetObjectField[c, "Calculations", calcs];
- c = AppendObjectField[
- c, "Sources",
- {Filename -> "RegisterMoL.cc",
- Contents -> CreateKrancMoLRegister[
- evolvedGroups, nonevolvedGroups, evolvedODEGroups,
- nonevolvedODEGroups,
- Sequence@@(GetObjectField[c,#]& /@
- {"Groups", "Implementation", "Name"})]}]];
+ c = MoLProcessCode[c, opts];
(* ------------------------------------------------------------------------
Add options to calculations
diff --git a/Tools/CodeGen/MoL.m b/Tools/CodeGen/MoL.m
index a2a64e0..d393327 100644
--- a/Tools/CodeGen/MoL.m
+++ b/Tools/CodeGen/MoL.m
@@ -21,7 +21,7 @@
BeginPackage[
"MoL`",
{"Errors`", "Helpers`", "Kranc`", "CodeGenKranc`", "MapLookup`", "CodeGenCactus`",
- "CodeGen`", "CodeGenC`", "KrancGroups`", "Calculation`"}];
+ "CodeGen`", "CodeGenC`", "KrancGroups`", "Calculation`", "Code`", "Object`"}];
CreateKrancMoLRegister;
CreateMoLBoundariesSource::usage = "";
@@ -37,6 +37,7 @@ MoLUsedFunctions;
MoLProcessGroups;
MoLParameterStructures;
MoLUsedParameters;
+MoLProcessCode;
Begin["`Private`"];
@@ -698,6 +699,65 @@ DefFn[
(* {Name -> "MoL_Num_Constrained_Vars", Type -> "CCTK_INT"} *)
}}];
+Options[MoLProcessCode] = ThornOptions;
+
+DefFn[
+ MoLProcessCode[cIn_Code, opts:OptionsPattern[]] :=
+ Module[
+ {evolvedGroups, nonevolvedGroups, evolvedODEGroups,
+ nonevolvedODEGroups, rhsGroupDefinitions,
+ rhsODEGroupDefinitions, rhsGroups, rhsODEGroups,
+
+ groups, declaredGroups, calcs, odeGroups,
+ c = cIn},
+
+ groups = GetObjectField[c, "Groups"];
+ declaredGroups = GetObjectField[c, "DeclaredGroups"];
+ calcs = GetObjectField[c, "Calculations"];
+ odeGroups = GetObjectField[c, "ODEGroups"];
+
+ groups = MoLProcessGroups[declaredGroups,
+ calcs, groups, GetObjectField[c,"EvolutionTimelevels"]];
+
+ (* Get the different types of group *)
+ evolvedGroups = MoLEvolvedGroups[declaredGroups, calcs, groups];
+ nonevolvedGroups = MoLNonevolvedGroups[declaredGroups, calcs, groups];
+
+ evolvedODEGroups = MoLEvolvedGroups[odeGroups, calcs, groups];
+ nonevolvedODEGroups = MoLNonevolvedGroups[odeGroups, calcs, groups];
+
+ (* Replace the dots in the calculation *)
+ calcs = MoLReplaceDots[calcs];
+
+ rhsGroupDefinitions = MoLRHSGroupDefinitions[groups, evolvedGroups];
+ rhsODEGroupDefinitions = MoLRHSODEGroupDefinitions[groups, evolvedODEGroups];
+
+ (* Add the RHS groups *)
+ groups = Join[groups, rhsGroupDefinitions, rhsODEGroupDefinitions];
+
+ rhsGroups = Map[groupName, rhsGroupDefinitions];
+ rhsODEGroups = Map[groupName, rhsODEGroupDefinitions];
+
+ (* This possibly shouldn't be in MoL but under ODEs instead *)
+ calcs = Map[Append[#, ODEGroups -> Join[odeGroups, rhsODEGroups]] &, calcs];
+
+ declaredGroups = Join[declaredGroups, rhsGroups, odeGroups, rhsODEGroups];
+
+ InfoMessage[Terse, "Creating MoL registration file"];
+ (* TODO: only do this for thorns with evolved variables *)
+
+ c = SetObjectField[c, "Groups", groups];
+ c = SetObjectField[c, "DeclaredGroups", declaredGroups];
+ c = SetObjectField[c, "Calculations", calcs];
+ AppendObjectField[
+ c, "Sources",
+ {Filename -> "RegisterMoL.cc",
+ Contents -> CreateKrancMoLRegister[
+ evolvedGroups, nonevolvedGroups, evolvedODEGroups,
+ nonevolvedODEGroups,
+ Sequence@@(GetObjectField[c,#]& /@
+ {"Groups", "Implementation", "Name"})]}]]];
+
End[];
EndPackage[];