diff options
Diffstat (limited to 'Tools/CodeGen/KrancThorn.m')
-rw-r--r-- | Tools/CodeGen/KrancThorn.m | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/Tools/CodeGen/KrancThorn.m b/Tools/CodeGen/KrancThorn.m index 16287d7..93760cc 100644 --- a/Tools/CodeGen/KrancThorn.m +++ b/Tools/CodeGen/KrancThorn.m @@ -28,7 +28,8 @@ BeginPackage["KrancThorn`", {"CodeGen`", "Thorn`", "MapLookup`", "KrancGroups`", "Differencing`", "CalculationFunction`", "Errors`", "Helpers`", "CactusBoundary`", - "KrancTensor`", "Param`", "Schedule`", "Interface`", "Kranc`", "Jacobian`"}]; + "KrancTensor`", "Param`", "Schedule`", "Interface`", "Kranc`", "Jacobian`", + "ConservationCalculation`"}]; CreateKrancThorn::usage = "Construct a Kranc thorn"; @@ -94,7 +95,7 @@ CreateKrancThorn[groupsOrig_, parentDirectory_, thornName_, opts:OptionsPattern[ evolvedODEGroupDefinitions, rhsODEGroupDefinitions, rhsODEGroups, allParams, boundarySources, reflectionSymmetries, realParamDefs, intParamDefs, - pDefs}, + pDefs, consCalcs, consCalcsIn, consGroups}, (* Parse named arguments *) @@ -112,7 +113,7 @@ CreateKrancThorn[groupsOrig_, parentDirectory_, thornName_, opts:OptionsPattern[ includeFiles = OptionValue[IncludeFiles]; evolutionTimelevels = OptionValue[EvolutionTimelevels]; (* Redundant *) defaultEvolutionTimelevels = lookupDefault[{opts}, DefaultEvolutionTimelevels, evolutionTimelevels]; - realParams = OptionValue[RealParameters]; + realParams = OptionValue[RealParameters] ~Join~ ConservationDifferencingRealParameters[]; intParams = OptionValue[IntParameters]; realParamDefs = MakeFullParamDefs[realParams]; intParamDefs = MakeFullParamDefs[intParams]; @@ -123,7 +124,8 @@ CreateKrancThorn[groupsOrig_, parentDirectory_, thornName_, opts:OptionsPattern[ extendedRealParams = OptionValue[ExtendedRealParameters]; extendedIntParams = OptionValue[ExtendedIntParameters]; extendedKeywordParams = OptionValue[ExtendedKeywordParameters]; - partialDerivs = OptionValue[PartialDerivatives]; + partialDerivs = OptionValue[PartialDerivatives] ~Join~ + ConservationDifferencingOperators[]; reflectionSymmetries = OptionValue[ReflectionSymmetries]; coordGroup = {"grid::coordinates", {Kranc`x,Kranc`y,Kranc`z,Kranc`r}}; @@ -151,6 +153,22 @@ CreateKrancThorn[groupsOrig_, parentDirectory_, thornName_, opts:OptionsPattern[ InfoMessage[Terse, "Creating startup file"]; startup = CreateStartupFile[thornName, thornName]; + consCalcsIn = Append[#,Groups -> groups]& /@ + OptionValue[ConservationCalculations]; + + (* Add in calculations to solve any conservation laws that have + been provided *) + calcs = Join[calcs, + consCalcs = Flatten[Map[ProcessConservationCalculation[#,thornName] &, + consCalcsIn],1]]; + (* Print["consCalcs = ", consCalcs]; *) + + consGroups = Union@Flatten[ + Map[ConservationCalculationDeclaredGroups, consCalcsIn],1]; + + groups = Join[groups, consGroups]; + declaredGroups = Join[declaredGroups, Map[groupName, consGroups]]; + (* Get the different types of group *) evolvedGroups = extractEvolvedGroups[declaredGroups, calcs, groups]; nonevolvedGroups = extractNonevolvedGroups[declaredGroups, calcs, groups]; |