Skip to content

Commit

Permalink
Store boundary values in model class
Browse files Browse the repository at this point in the history
  • Loading branch information
Dylan Harries committed Dec 19, 2016
1 parent 12e7585 commit 2614736
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 1 deletion.
7 changes: 6 additions & 1 deletion meta/FlexibleSUSY.m
Expand Up @@ -1277,11 +1277,16 @@ corresponding tadpole is real or imaginary (only in models with CP
WriteOut`ReplaceInFiles[files, { Sequence @@ GeneralReplacementRules[] }];

WriteSemiAnalyticModelClass[semiAnalyticBCs_List, semiAnalyticSolns_List, files_List] :=
Module[{semiAnalyticSolutionsDefs = "", semiAnalyticSolutionsInit = ""},
Module[{semiAnalyticSolutionsDefs = "", semiAnalyticSolutionsInit = "",
boundaryValuesDefs = "", boundaryValuesInit = ""},
semiAnalyticSolutionsDefs = SemiAnalytic`CreateSemiAnalyticSolutionsDefinitions[semiAnalyticSolns];
semiAnalyticSolutionsInit = SemiAnalytic`CreateSemiAnalyticSolutionsInitialization[semiAnalyticSolns];
boundaryValuesDefs = SemiAnalytic`CreateBoundaryValuesDefinitions[semiAnalyticSolns];
boundaryValuesInit = SemiAnalytic`CreateBoundaryValuesInitialization[semiAnalyticSolns];
WriteOut`ReplaceInFiles[files, { "@semiAnalyticSolutionsDefs@" -> IndentText[WrapLines[semiAnalyticSolutionsDefs]],
"@semiAnalyticSolutionsInit@" -> IndentText[WrapLines[semiAnalyticSolutionsInit]],
"@boundaryValuesDefs@" -> IndentText[WrapLines[boundaryValuesDefs]],
"@boundaryValuesInit@" -> IndentText[WrapLines[boundaryValuesInit]],
Sequence @@ GeneralReplacementRules[] }];
];

Expand Down
22 changes: 22 additions & 0 deletions meta/SemiAnalytic.m
Expand Up @@ -20,6 +20,8 @@

CreateSemiAnalyticSolutionsDefinitions::usage="";
CreateSemiAnalyticSolutionsInitialization::usage="";
CreateBoundaryValuesDefinitions::usage="";
CreateBoundaryValuesInitialization::usage="";

Begin["`Private`"];

Expand Down Expand Up @@ -203,6 +205,7 @@
{_, _},
rules = GetBoundaryValueFromSetting[noTemp[[i,1]], noTemp[[i,2]]];
finalRules = Last[(finalRules = Utils`AppendOrReplaceInList[finalRules, #, test])& /@ rules];,
(* @todo intermediate boundary values can be added to a list of extra parameters *)
FlexibleSUSY`FSMinimize[__],
fixedPars = Constraint`FindFixedParametersFromConstraint[{noTemp[[i]]}];
boundaryValues = Symbol[CConversion`ToValidCSymbolString[#] <> "MinSol"]& /@ fixedPars;
Expand Down Expand Up @@ -461,6 +464,25 @@
Return[def];
];

GetBoundaryValueParameters[solutions_List] :=
DeleteDuplicates[Flatten[(Parameters`FindAllParameters[GetBasis[#]])& /@ solutions]];

CreateBoundaryValuesDefinitions[solutions_List] :=
Module[{boundaryValues, defns},
boundaryValues = GetBoundaryValueParameters[solutions];
defns = (CConversion`CreateCType[Parameters`GetType[#]]
<> " basis_" <> CConversion`ToValidCSymbolString[#])& /@ boundaryValues;
Utils`StringJoinWithSeparator[defns, ";\n"] <> ";\n"
];

CreateBoundaryValuesInitialization[solutions_List] :=
Module[{boundaryValues, def = ""},
boundaryValues = GetBoundaryValueParameters[solutions];
(def = def <> "," <> CConversion`CreateDefaultConstructor["basis_" <> CConversion`ToValidCSymbolString[#],
Parameters`GetType[#]])& /@ boundaryValues;
Return[def];
];

DependsAtMostOn[num_?NumericQ, pars_List] := True;
DependsAtMostOn[True, pars_List] := True;
DependsAtMostOn[False, pars_List] := True;
Expand Down
8 changes: 8 additions & 0 deletions templates/semi_analytic_model.cpp.in
Expand Up @@ -41,6 +41,7 @@ using namespace @ModelName@_info;
CLASSNAME::@ModelName@(const @ModelName@_input_parameters& input_)
: @ModelName@_mass_eigenstates(input_)
@semiAnalyticSolutionsInit@
@boundaryValuesInit@
{
}

Expand Down Expand Up @@ -78,6 +79,13 @@ void CLASSNAME::set_precision(double p)
@ModelName@_mass_eigenstates::set_precision(p);
}

void CLASSNAME::set_model_parameters_to_boundary_values(@ModelName@_soft_parameters& model) const
{
@applySemiAnalyticBCs@
}

@calculateCoeffFunctions@

std::ostream& operator<<(std::ostream& ostr, const @ModelName@<Semi_analytic>& model)
{
model.print(ostr);
Expand Down
6 changes: 6 additions & 0 deletions templates/semi_analytic_model.hpp.in
Expand Up @@ -59,9 +59,15 @@ public:
virtual void print(std::ostream& out = std::cout) const;
virtual void set_precision(double);

void calculate_coefficients(double);

private:
// semi-analytic solution coefficients
@semiAnalyticSolutionsDefs@
// boundary values
@boundaryValuesDefs@

void set_parameters_to_boundary_values(@ModelName@_soft_parameters&) const;
};

std::ostream& operator<<(std::ostream&, const @ModelName@<Semi_analytic>&);
Expand Down

0 comments on commit 2614736

Please sign in to comment.