Skip to content

Commit

Permalink
KrancThorn.m: Continue using Code object to group variables in Create…
Browse files Browse the repository at this point in the history
…KrancThorn
  • Loading branch information
ianhinder committed Sep 13, 2013
1 parent 57d2efa commit 85902ef
Showing 1 changed file with 49 additions and 36 deletions.
85 changes: 49 additions & 36 deletions Tools/CodeGen/KrancThorn.m
Expand Up @@ -338,44 +338,39 @@ Thorn generation (main entry point for non-tensorial thorns)
Map[Append[#, Parameters -> AllNumericParameters[GetObjectField[c, "Parameters"]]] &,
GetObjectField[c, "Calculations"]]];

includeFiles = GetObjectField[c, "IncludeFiles"];
partialDerivs = GetObjectField[c, "PartialDerivatives"];
parameters = GetObjectField[c, "Parameters"];
calcs = GetObjectField[c, "Calculations"];
inheritedImplementations = GetObjectField[c, "InheritedImplementations"];
groups = GetObjectField[c, "Groups"];
declaredGroups = GetObjectField[c, "DeclaredGroups"];
sources = GetObjectField[c, "Sources"];

(* ------------------------------------------------------------------------
Split calculations according to SplitVars option
------------------------------------------------------------------------ *)

calcs = SplitCalculations[calcs];
c = ApplyToObjectField[c, "Calculations", SplitCalculations];

(* ------------------------------------------------------------------------
Symmetries
------------------------------------------------------------------------ *)

AppendTo[includeFiles, "Symmetry.h"];
c = AppendObjectField[c, "IncludeFiles", "Symmetry.h"];

InfoMessage[Terse, "Creating symmetry registration file"];
AppendTo[
sources,

c = AppendObjectField[
c, "Sources",
{Filename -> "RegisterSymmetries.cc",
Contents -> CreateSymmetriesRegistrationSource[
thornName, implementation,
declaredGroups, groups, OptionValue[ReflectionSymmetries], False]}];
GetObjectField[c, "Name"], GetObjectField[c,"Implementation"],
GetObjectField[c, "DeclaredGroups"], GetObjectField[c, "Groups"],
OptionValue[ReflectionSymmetries], False]}];

(* ------------------------------------------------------------------------
Startup source file
------------------------------------------------------------------------ *)

InfoMessage[Terse, "Creating startup file"];
AppendTo[
sources,

c = AppendObjectField[
c, "Sources",
{Filename -> "Startup.cc",
Contents -> CreateStartupFile[thornName, thornName]}];
Contents -> CreateStartupFile[GetObjectField[c, "Name"],
GetObjectField[c, "Name"]]}];

(* ------------------------------------------------------------------------
Create CCL files
Expand All @@ -384,26 +379,30 @@ Thorn generation (main entry point for non-tensorial thorns)
InfoMessage[Terse, "Creating configuration file"];
configuration = CreateConfiguration[opts];

(* TODO: Pass Code object directly into these functions *)

InfoMessage[Terse, "Creating interface file"];
interface = CreateKrancInterface[declaredGroups, groups,
implementation, inheritedImplementations, includeFiles, opts];
interface = CreateKrancInterface[Sequence@@(GetObjectField[c,#]& /@ {"DeclaredGroups", "Groups",
"Implementation", "InheritedImplementations", "IncludeFiles"}), opts];

InfoMessage[Terse, "Creating param file"];
param = CreateKrancParam[declaredGroups,
groups,
thornName,
parameters,
evolutionTimelevels,
defaultEvolutionTimelevels,
calcs, opts];
param = CreateKrancParam[
Sequence@@
(GetObjectField[c,#]& /@
{"DeclaredGroups", "Groups", "Name", "Parameters",
"EvolutionTimelevels", "DefaultEvolutionTimelevels",
"Calculations"}), opts];

InfoMessage[Terse, "Creating schedule file"];
schedule = CreateKrancScheduleFile[calcs, declaredGroups, groups, thornName,
evolutionTimelevels,opts];
schedule = CreateKrancScheduleFile[
Sequence@@
(GetObjectField[c,#]& /@
{"Calculations", "DeclaredGroups", "Groups", "Name",
"EvolutionTimelevels"}), opts];

If[OptionValue[UseCaKernel],
InfoMessage[Terse, "Creating CaKernel file"];
cakernel = CaKernelCCL[calcs, opts];
cakernel = CaKernelCCL[GetObjectField[c, "Calculations"], opts];
,
cakernel = None;
];
Expand All @@ -412,18 +411,32 @@ Thorn generation (main entry point for non-tensorial thorns)
Create Boundary source files
------------------------------------------------------------------------ *)

sources = Join[
sources,
CactusBoundary`GetSources[declaredGroups, groups, implementation, thornName]];
c = JoinObjectField[
c, "Sources",
CactusBoundary`GetSources[
Sequence@@
(GetObjectField[c,#]& /@
{"DeclaredGroups", "Groups", "Implementation", "Name"})]];

(* ------------------------------------------------------------------------
Add parameter check source file
------------------------------------------------------------------------ *)

If[Length[OptionValue[ParameterConditions]] > 0,
AppendTo[sources,
{Filename -> "ParamCheck.cc",
Contents -> ParameterCheckSource[thornName, OptionValue[ParameterConditions]]}]];
c = AppendObjectField[
c, "Sources",
{Filename -> "ParamCheck.cc",
Contents -> ParameterCheckSource[GetObjectField[c, "Name"],
OptionValue[ParameterConditions]]}]];

includeFiles = GetObjectField[c, "IncludeFiles"];
partialDerivs = GetObjectField[c, "PartialDerivatives"];
parameters = GetObjectField[c, "Parameters"];
calcs = GetObjectField[c, "Calculations"];
inheritedImplementations = GetObjectField[c, "InheritedImplementations"];
groups = GetObjectField[c, "Groups"];
declaredGroups = GetObjectField[c, "DeclaredGroups"];
sources = GetObjectField[c, "Sources"];

(* ------------------------------------------------------------------------
Create finite differencing header file
Expand Down

0 comments on commit 85902ef

Please sign in to comment.