Skip to content

Commit

Permalink
KrancThorn.m: Calls into ConservationCalculation package to generate …
Browse files Browse the repository at this point in the history
…code for solving conservation laws
  • Loading branch information
ianhinder committed Oct 1, 2010
1 parent 24e05e2 commit d4e40df
Showing 1 changed file with 33 additions and 6 deletions.
39 changes: 33 additions & 6 deletions Tools/CodeGen/KrancThorn.m
Expand Up @@ -27,7 +27,8 @@
BeginPackage["KrancThorn`", {"CodeGen`", "Thorn`",
"MapLookup`", "KrancGroups`", "Differencing`",
"CalculationFunction`", "Errors`", "Helpers`", "CactusBoundary`",
"TensorTools`", "Param`", "Schedule`", "Interface`", "Kranc`"}];
"TensorTools`", "Param`", "Schedule`", "Interface`", "Kranc`",
"ConservationCalculation`"}];

CreateKrancThorn::usage = "Construct a Kranc thorn";
CreateKrancThornTT::usage = "Construct a Kranc thorn using TensorTools";
Expand Down Expand Up @@ -93,7 +94,7 @@ Thorn generation (main entry point for non-tensorial thorns)
interface, evolvedGroupDefinitions, rhsGroupDefinitions, thornspec,
allParams, boundarySources, reflectionSymmetries,
realParamDefs, intParamDefs,
pDefs, useCSE},
pDefs, useCSE, consCalcs, consCalcsIn, consGroups},

(* Parse named arguments *)

Expand Down Expand Up @@ -121,7 +122,8 @@ Thorn generation (main entry point for non-tensorial thorns)
extendedRealParams = OptionValue[ExtendedRealParameters];
extendedIntParams = OptionValue[ExtendedIntParameters];
extendedKeywordParams = OptionValue[ExtendedKeywordParameters];
partialDerivs = OptionValue[PartialDerivatives];
partialDerivs = OptionValue[PartialDerivatives] ~Join~
ConservationDifferencingOperators[];
reflectionSymmetries = OptionValue[ReflectionSymmetries];
useCSE = OptionValue[UseCSE];

Expand All @@ -144,6 +146,21 @@ Thorn generation (main entry point for non-tensorial thorns)
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, 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];
Expand Down Expand Up @@ -313,20 +330,30 @@ Thorn generation (main entry point for non-tensorial thorns)
Tensors
-------------------------------------------------------------------------- *)

(*Options[CreateKrancThornTT] = ThornOptions;*)

CreateKrancThornTT[groups_, parentDirectory_, thornName_, opts___] :=
Module[{calcs, expCalcs, expGroups, options, derivs, expDerivs, reflectionSymmetries, declaredGroups},
Module[{calcs, expCalcs, expGroups, options, derivs, expDerivs, reflectionSymmetries, declaredGroups, consCalcs, expConsCalcs},
InfoMessage[Terse, "Processing tensorial arguments"];
calcs = lookup[{opts}, Calculations];
consCalcs = lookupDefault[{opts}, ConservationCalculations, {}];
derivs = lookupDefault[{opts}, PartialDerivatives, {}];
Map[CheckCalculationTensors, calcs];
expCalcs = Map[makeCalculationExplicit, calcs];
expConsCalcs = Map[makeCalculationExplicit, consCalcs];

Print["expConsCalcs == ", expConsCalcs];

InfoMessage[Info, "Group definitions:", groups];

expDerivs = Flatten[Map[MakeExplicit,derivs],1];
expGroups = Map[makeGroupExplicit, groups];
options = Join[DeleteCases[{opts}, Calculations -> _], {Calculations -> expCalcs}];
options = Join[DeleteCases[options, PartialDerivatives -> _], {PartialDerivatives -> expDerivs}];
options = {opts};
options = Join[DeleteCases[options, Calculations -> _], {Calculations -> expCalcs}];
options = Join[DeleteCases[options, ConservationCalculations -> _],
{ConservationCalculations -> expConsCalcs}];
options = Join[DeleteCases[options, PartialDerivatives -> _],
{PartialDerivatives -> expDerivs}];

declaredGroups = lookupDefault[{opts}, DeclaredGroups, {}];
evolutionTimelevels = lookupDefault[{opts}, EvolutionTimelevels, 3];
Expand Down

0 comments on commit d4e40df

Please sign in to comment.