Skip to content

Commit

Permalink
Add function for calculating model parameters from coefficients
Browse files Browse the repository at this point in the history
  • Loading branch information
Dylan Harries committed Jan 20, 2017
1 parent 07c1e91 commit 40a4f62
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 15 deletions.
7 changes: 4 additions & 3 deletions meta/FlexibleSUSY.m
Expand Up @@ -1460,6 +1460,7 @@ corresponding tadpole is real or imaginary (only in models with CP
createBasisEvaluators = "", applyBoundaryConditions = "",
datasets, numberOfTrialPoints, initializeTrialBoundaryValues = "",
createLinearSystemSolvers = "", calculateCoefficients = "",
evaluateSemiAnalyticSolns = "",
calculateCoefficientsPrototypes = "", calculateCoefficientsFunctions = ""},
semiAnalyticSolutionsDefs = SemiAnalytic`CreateSemiAnalyticSolutionsDefinitions[semiAnalyticSolns];
boundaryValueStructDefs = SemiAnalytic`CreateLocalBoundaryValuesDefinitions[semiAnalyticSolns];
Expand All @@ -1472,6 +1473,7 @@ corresponding tadpole is real or imaginary (only in models with CP
createLinearSystemSolvers = SemiAnalytic`CreateLinearSystemSolvers[datasets, semiAnalyticSolns];
{numberOfTrialPoints, initializeTrialBoundaryValues} = SemiAnalytic`InitializeTrialInputValues[datasets];
applyBoundaryConditions = SemiAnalytic`ApplySemiAnalyticBoundaryConditions[semiAnalyticBCs, semiAnalyticSolns];
evaluateSemiAnalyticSolns = SemiAnalytic`EvaluateSemiAnalyticSolutions[semiAnalyticSolns];
calculateCoefficients = SemiAnalytic`CalculateCoefficients[datasets];
{calculateCoefficientsPrototypes, calculateCoefficientsFunctions} = SemiAnalytic`CreateCoefficientsCalculations[semiAnalyticSolns];
WriteOut`ReplaceInFiles[files, { "@semiAnalyticSolutionsDefs@" -> IndentText[WrapLines[semiAnalyticSolutionsDefs]],
Expand All @@ -1486,23 +1488,22 @@ corresponding tadpole is real or imaginary (only in models with CP
"@createLinearSystemSolvers@" -> IndentText[WrapLines[createLinearSystemSolvers]],
"@calculateCoefficients@" -> IndentText[calculateCoefficients],
"@applyBoundaryConditions@" -> IndentText[WrapLines[applyBoundaryConditions]],
"@evaluateSemiAnalyticSolns@" -> IndentText[WrapLines[evaluateSemiAnalyticSolns]],
"@calculateCoefficientsPrototypes@" -> IndentText[calculateCoefficientsPrototypes],
"@calculateCoefficientsFunctions@" -> calculateCoefficientsFunctions,
Sequence @@ GeneralReplacementRules[] }];
];

WriteSemiAnalyticModelClass[semiAnalyticBCs_List, semiAnalyticSolns_List, files_List] :=
Module[{semiAnalyticSolutionsDefs = "", boundaryValuesDefs = "",
calculateParameterValues = "", calculateCoeffFunctions = "",
calculateCoeffFunctions = "",
setBoundaryValueParameters = ""},
semiAnalyticSolutionsDefs = SemiAnalytic`CreateSemiAnalyticSolutionsDefinitions[semiAnalyticSolns];
boundaryValuesDefs = SemiAnalytic`CreateBoundaryValuesDefinitions[semiAnalyticSolns];
applySemiAnalyticBCs = SemiAnalytic`ApplySemiAnalyticBoundaryConditions[semiAnalyticBCs, semiAnalyticSolns];
calculateParameterValues = SemiAnalytic`EvaluateSemiAnalyticSolutions[semiAnalyticSolns];
setBoundaryValueParameters = SemiAnalytic`SetModelBoundaryValueParameters[semiAnalyticSolns];
WriteOut`ReplaceInFiles[files, { "@semiAnalyticSolutionsDefs@" -> IndentText[WrapLines[semiAnalyticSolutionsDefs]],
"@boundaryValuesDefs@" -> IndentText[WrapLines[boundaryValuesDefs]],
"@calculateParameterValues@" -> IndentText[WrapLines[calculateParameterValues]],
"@calculateCoeffFunctions@" -> calculateCoeffFunctions,
"@setBoundaryValueParameters@" -> IndentText[WrapLines[setBoundaryValueParameters]],
Sequence @@ GeneralReplacementRules[] }];
Expand Down
8 changes: 4 additions & 4 deletions meta/SemiAnalytic.m
Expand Up @@ -796,17 +796,17 @@
ExpandSemiAnalyticSolutions[solutions_List] :=
ExpandSemiAnalyticSolution /@ solutions;

EvaluateSemiAnalyticSolution[solution_] :=
EvaluateSemiAnalyticSolution[solution_, class_String] :=
Module[{parameter, basisRules, coeffs},
parameter = GetName[solution];
basisRules = Rule[#, CreateBoundaryValue[#]]& /@ (GetBoundaryValueParameters[solution]);
coeffs = CreateCoefficients[solution];
Parameters`SetParameter[parameter, Dot[coeffs, GetBasis[solution]] /. basisRules]
Parameters`SetParameter[parameter, Dot[coeffs, GetBasis[solution]] /. basisRules, class]
];

EvaluateSemiAnalyticSolutions[solutions_List] :=
EvaluateSemiAnalyticSolutions[solutions_List, class_String:"model."] :=
Module[{result = ""},
(result = result <> EvaluateSemiAnalyticSolution[#])& /@ solutions;
(result = result <> EvaluateSemiAnalyticSolution[#, class])& /@ solutions;
Return[result];
];

Expand Down
5 changes: 0 additions & 5 deletions templates/semi_analytic_model.cpp.in
Expand Up @@ -81,11 +81,6 @@ void CLASSNAME::set_precision(double p)
@ModelName@_mass_eigenstates::set_precision(p);
}

void CLASSNAME::calculate_parameter_values()
{
@calculateParameterValues@
}

@calculateCoeffFunctions@

std::ostream& operator<<(std::ostream& ostr, const @ModelName@<Semi_analytic>& model)
Expand Down
2 changes: 0 additions & 2 deletions templates/semi_analytic_model.hpp.in
Expand Up @@ -69,8 +69,6 @@ private:
@semiAnalyticSolutionsDefs@
// boundary values
@boundaryValuesDefs@

void calculate_parameter_values();
};

std::ostream& operator<<(std::ostream&, const @ModelName@<Semi_analytic>&);
Expand Down
6 changes: 6 additions & 0 deletions templates/semi_analytic_solutions.cpp.in
Expand Up @@ -98,5 +98,11 @@ void @ModelName@_semi_analytic_solutions::set_to_boundary_values(
@applyBoundaryConditions@
}

void @ModelName@_semi_analytic_solutions::evaluate_solutions(
@ModelName@_soft_parameters& model)
{
@evaluateSemiAnalyticSolns@
}

@calculateCoefficientsFunctions@
} // namespace flexiblesusy
2 changes: 1 addition & 1 deletion templates/semi_analytic_solutions.hpp.in
Expand Up @@ -64,7 +64,7 @@ public:
@boundaryValueSetters@
@coefficientGetters@
void calculate_coefficients(const @ModelName@_soft_parameters&);
void set_semi_analytic_solutions(@ModelName@_soft_parameters&);
void evaluate_solutions(@ModelName@_soft_parameters&);

private:
struct Boundary_values {
Expand Down

0 comments on commit 40a4f62

Please sign in to comment.