Skip to content

Commit

Permalink
patch to circumvent EWSB issue in MRSSM tower
Browse files Browse the repository at this point in the history
  • Loading branch information
tst authored and Alexander Voigt committed Jul 22, 2016
1 parent 8a0540f commit 7575fe4
Show file tree
Hide file tree
Showing 6 changed files with 6 additions and 64 deletions.
58 changes: 0 additions & 58 deletions meta/EWSB.m
Expand Up @@ -19,10 +19,6 @@
CreateTreeLevelEwsbSolver::usage="Converts tree-level EWSB solutions
to C form";

SolveTreeLevelEwsbVia::usage="Solves tree-level EWSB equations for the
given list of parameters. Retuns an empty string if no unique
solution can be found";

CreateEWSBRootFinders::usage="Creates comma separated list of GSL root
finders";

Expand Down Expand Up @@ -633,60 +629,6 @@
Return[result];
];

SolveTreeLevelEwsbVia[equations_List, {}] :=
Module[{},
Print["Error: SolveTreeLevelEwsbVia: list of output parameters is empty"];
Quit[1];
];

SolveTreeLevelEwsbVia[equations_List, parameters_List] :=
Module[{result = "", simplifiedEqs, solution, i, par, expr, parStr, type, ctype},
If[Length[equations] =!= Length[parameters],
Print["Warning: SolveTreeLevelEwsbVia: trying to solve ",
Length[equations], " equations for ", Length[parameters],
" parameters ", parameters];
];
simplifiedEqs = (# == 0)& /@ equations;
simplifiedEqs = Parameters`FilterOutIndependentEqs[simplifiedEqs, parameters];
solution = TimeConstrainedSolve[simplifiedEqs, parameters];
If[solution === {} || Length[solution] > 1,
Print["Error: can't solve the EWSB equations for the parameters ",
parameters, " uniquely"];
Print["Here are the EWSB equations we have: ", InputForm[simplifiedEqs]];
Print["Here is the solution we get: ", InputForm[solution]];
Return[result];
];
solution = solution[[1]]; (* select first solution *)
(* create local const refs to input parameters appearing
in the solution *)
result = Parameters`CreateLocalConstRefsForInputParameters[solution, "LOCALINPUT"] <> "\n";
For[i = 1, i <= Length[solution], i++,
par = solution[[i,1]];
expr = solution[[i,2]];
type = CConversion`GetScalarElementType[Parameters`GetType[par]];
ctype = CConversion`CreateCType[type];
parStr = "new_" <> CConversion`ToValidCSymbolString[par];
result = result <>
"const " <> ctype <> " " <> parStr <> " = " <>
CConversion`CastTo[CConversion`RValueToCFormString[expr],type] <> ";\n";
];
result = result <> "\n";
For[i = 1, i <= Length[solution], i++,
par = solution[[i,1]];
parStr = CConversion`ToValidCSymbolString[par];
result = result <>
"if (IsFinite(new_" <> parStr <> "))\n" <>
IndentText[CConversion`RValueToCFormString[par] <>
" = new_" <> parStr <> ";"] <> "\n" <>
"else\n" <>
IndentText["error = 1;"] <> "\n";
If[i < Length[solution],
result = result <> "\n";
];
];
Return[result];
];

CreateNewEWSBRootFinder[] :=
"new Root_finder<number_of_ewsb_equations>(CLASSNAME::tadpole_equations, &params, number_of_ewsb_iterations, ewsb_iteration_precision, ";

Expand Down
4 changes: 2 additions & 2 deletions meta/FlexibleSUSY.m
Expand Up @@ -888,7 +888,7 @@ corresponding tadpole is real or imaginary (only in models with CP
clearOutputParameters = "", solveEwsbTreeLevel = "",
clearPhases = "",
saveEwsbOutputParameters, restoreEwsbOutputParameters,
softScalarMasses, softHiggsMasses,
softScalarMasses, treeLevelEWSBOutputParameters,
saveSoftHiggsMasses, restoreSoftHiggsMasses,
solveTreeLevelEWSBviaSoftHiggsMasses,
solveEWSBTemporarily,
Expand Down Expand Up @@ -1032,7 +1032,7 @@ corresponding tadpole is real or imaginary (only in models with CP
EWSBSolvers = EWSB`CreateEWSBRootFinders[FlexibleSUSY`FSEWSBSolvers];
setEWSBSolution = EWSB`SetEWSBSolution[parametersFixedByEWSB, freePhases, "solver->get_solution"];
fillArrayWithEWSBParameters = EWSB`FillArrayWithParameters["ewsb_parameters", parametersFixedByEWSB];
solveEwsbWithTadpoles = EWSB`CreateEwsbSolverWithTadpoles[ewsbSolution, softHiggsMasses];
solveEwsbWithTadpoles = EWSB`CreateEwsbSolverWithTadpoles[ewsbSolution, treeLevelEWSBOutputParameters];
getEWSBParametersFromGSLVector = EWSB`GetEWSBParametersFromGSLVector[parametersFixedByEWSB, freePhases, "x"];
setEWSBParametersFromLocalCopies = EWSB`SetEWSBParametersFromLocalCopies[parametersFixedByEWSB, "model"];
ewsbParametersInitializationList = EWSB`CreateEWSBParametersInitializationList[parametersFixedByEWSB];
Expand Down
2 changes: 1 addition & 1 deletion templates/mass_eigenstates.cpp.in
Expand Up @@ -375,7 +375,7 @@ int CLASSNAME::solve_ewsb_tree_level()
return error;
}

int CLASSNAME::solve_ewsb_tree_level_via_soft_higgs_masses()
int CLASSNAME::solve_ewsb_tree_level_custom()
{
int error = 0;

Expand Down
2 changes: 1 addition & 1 deletion templates/mass_eigenstates.hpp.in
Expand Up @@ -168,7 +168,7 @@ private:
int solve_ewsb_iteratively();
int solve_ewsb_iteratively(unsigned);
int solve_ewsb_iteratively_with(EWSB_solver*, const double[number_of_ewsb_equations]);
int solve_ewsb_tree_level_via_soft_higgs_masses();
int solve_ewsb_tree_level_custom();
void ewsb_initial_guess(double[number_of_ewsb_equations]);
int ewsb_step(double[number_of_ewsb_equations]) const;
static int ewsb_step(const gsl_vector*, void*, gsl_vector*);
Expand Down
2 changes: 1 addition & 1 deletion test/test_NMSSM_ewsb.cpp
Expand Up @@ -59,7 +59,7 @@ BOOST_AUTO_TEST_CASE( test_NMSSM_ewsb_tree_level_via_soft_higgs_masses )
NmssmSoftsusy s;
setup_NMSSM(m, s, input);

const int error = m.solve_ewsb_tree_level_via_soft_higgs_masses();
const int error = m.solve_ewsb_tree_level_custom();

BOOST_CHECK_EQUAL(error, 0);
BOOST_CHECK_SMALL(m.get_ewsb_eq_hh_1(), 5.0e-09);
Expand Down
2 changes: 1 addition & 1 deletion test/test_SMSSM_ewsb.cpp
Expand Up @@ -80,7 +80,7 @@ BOOST_AUTO_TEST_CASE( test_SMSSM_ewsb_tree_level_via_soft_higgs_masses )
NmssmSoftsusy s;
setup_SMSSM(m, s, input);

const int error = m.solve_ewsb_tree_level_via_soft_higgs_masses();
const int error = m.solve_ewsb_tree_level_custom();

BOOST_CHECK_EQUAL(error, 0);
BOOST_CHECK_SMALL(m.get_ewsb_eq_hh_1(), 2.0e-09);
Expand Down

0 comments on commit 7575fe4

Please sign in to comment.