Skip to content

Commit

Permalink
Generate code for semi-analytic constraint
Browse files Browse the repository at this point in the history
initially defined to apply at the same scale as
that at which the EWSB conditions are solved
  • Loading branch information
Dylan Harries committed Jan 6, 2017
1 parent f1b9456 commit 725914d
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
38 changes: 37 additions & 1 deletion meta/FlexibleSUSY.m
Expand Up @@ -2283,7 +2283,8 @@ corresponding tadpole is real or imaginary (only in models with CP
extraSLHAOutputBlocks, effectiveCouplings ={}, extraVertices = {},
vertexRules, vertexRuleFileName, effectiveCouplingsFileName,
Lat$massMatrices, spectrumGeneratorFiles = {}, spectrumGeneratorInputFile,
semiAnalyticBCs, semiAnalyticSolns},
semiAnalyticBCs, semiAnalyticSolns, semiAnalyticScale, semiAnalyticScaleGuess,
semiAnalyticScaleMinimum, semiAnalyticScaleMaximum},
(* check if SARAH`Start[] was called *)
If[!ValueQ[Model`Name],
Print["Error: Model`Name is not defined. Did you call SARAH`Start[\"Model\"]?"];
Expand Down Expand Up @@ -3020,7 +3021,32 @@ corresponding tadpole is real or imaginary (only in models with CP
semiAnalyticBCs = SemiAnalytic`SelectSemiAnalyticConstraint[{FlexibleSUSY`LowScaleInput,
FlexibleSUSY`SUSYScaleInput,
FlexibleSUSY`HighScaleInput}];

semiAnalyticSolns = SemiAnalytic`GetSemiAnalyticSolutions[semiAnalyticBCs];

(* construct additional semi-analytic constraint from user-defined constraints *)
Which[SemiAnalytic`IsSemiAnalyticConstraintScale[FlexibleSUSY`HighScaleInput],
semiAnalyticScale = FlexibleSUSY`HighScale;
semiAnalyticScaleGuess = FlexibleSUSY`HighScaleFirstGuess;
semiAnalyticScaleMinimum = FlexibleSUSY`HighScaleMinimum;
semiAnalyticScaleMaximum = FlexibleSUSY`HighScaleMaximum;,
SemiAnalytic`IsSemiAnalyticConstraintScale[FlexibleSUSY`SUSYScaleInput],
semiAnalyticScale = FlexibleSUSY`SUSYScale;
semiAnalyticScaleGuess = FlexibleSUSY`SUSYScaleFirstGuess;
semiAnalyticScaleMinimum = FlexibleSUSY`SUSYScaleMinimum;
semiAnalyticScaleMaximum = FlexibleSUSY`SUSYScaleMaximum;,
SemiAnalytic`IsSemiAnalyticConstraintScale[FlexibleSUSY`LowScaleInput],
semiAnalyticScale = FlexibleSUSY`LowScale;
semiAnalyticScaleGuess = FlexibleSUSY`LowScaleFirstGuess;
semiAnalyticScaleMinimum = FlexibleSUSY`LowScaleMinimum;
semiAnalyticScaleMaximum = FlexibleSUSY`LowScaleMaximum;,
True,
semiAnalyticScale = FlexibleSUSY`SUSYScale;
semiAnalyticScaleGuess = FlexibleSUSY`SUSYScaleFirstGuess;
semiAnalyticScaleMinimum = FlexibleSUSY`SUSYScaleMinimum;
semiAnalyticScaleMaximum = FlexibleSUSY`SUSYScaleMaximum;
];

Print["Creating classes for convergence testers ..."];
WriteConvergenceTesterClass[Complement[Parameters`GetModelParameters[], SemiAnalytic`GetSemiAnalyticParameters[]],
{{FileNameJoin[{$flexiblesusyTemplateDir, "susy_convergence_tester.hpp.in"}],
Expand Down Expand Up @@ -3081,6 +3107,16 @@ corresponding tadpole is real or imaginary (only in models with CP
FileNameJoin[{FSOutputDir, FlexibleSUSY`FSModelName <> "_semi_analytic_low_scale_constraint.cpp"}]}
}];

Print["Creating class for semi-analytic constraint ..."];
WriteSemiAnalyticConstraintClass[semiAnalyticScale, {},
semiAnalyticScaleGuess,
{semiAnalyticScaleMinimum, semiAnalyticScaleMaximum}, False,
{{FileNameJoin[{$flexiblesusyTemplateDir, "semi_analytic_soft_parameters_constraint.hpp.in"}],
FileNameJoin[{FSOutputDir, FlexibleSUSY`FSModelName <> "_semi_analytic_soft_parameters_constraint.hpp"}]},
{FileNameJoin[{$flexiblesusyTemplateDir, "semi_analytic_soft_parameters_constraint.cpp.in"}],
FileNameJoin[{FSOutputDir, FlexibleSUSY`FSModelName <> "_semi_analytic_soft_parameters_constraint.cpp"}]}
}];

Print["Creating class for semi-analytic model ..."];
WriteSemiAnalyticModelClass[semiAnalyticBCs, semiAnalyticSolns,
{{FileNameJoin[{$flexiblesusyTemplateDir, "semi_analytic_model.hpp.in"}],
Expand Down
4 changes: 4 additions & 0 deletions meta/SemiAnalytic.m
Expand Up @@ -10,6 +10,8 @@
IsSemiAnalyticSetting::usage="";
IsBasisParameterSetting::usage="";
IsSemiAnalyticConstraint::usage="";
IsSemiAnalyticConstraintScale::usage="Returns True if given constraint
corresponds to the scale at which the semi-analytic solutions are evaluated.";
SelectSemiAnalyticConstraint::usage="";

SetSemiAnalyticParameters::usage="";
Expand Down Expand Up @@ -148,6 +150,8 @@
RemoveUnusedSettings[result]
];

IsSemiAnalyticConstraintScale[settings_List] := MemberQ[settings, FlexibleSUSY`FSSolveEWSBFor[___]];

SelectParametersWithMassDimension[parameters_List, dim_?IntegerQ] :=
Module[{allParameters},
allParameters = Parameters`GetModelParametersWithMassDimension[dim];
Expand Down

0 comments on commit 725914d

Please sign in to comment.