From 110424e82ef48f68c1c6cd35fca215ccfd37bb55 Mon Sep 17 00:00:00 2001 From: Ian Hinder Date: Fri, 13 Sep 2013 15:43:23 +0200 Subject: Move MoL code processing from KrancThorn.m to MoL.m --- Tools/CodeGen/KrancThorn.m | 54 +--------------------------------------- Tools/CodeGen/MoL.m | 62 +++++++++++++++++++++++++++++++++++++++++++++- 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[]; -- cgit v1.2.3