diff --git a/test/module.mk b/test/module.mk index 304363d2e..29564d936 100644 --- a/test/module.mk +++ b/test/module.mk @@ -148,6 +148,7 @@ ifneq ($(findstring semi_analytic,$(SOLVERS)),) ifeq ($(WITH_CMSSMSemiAnalytic), yes) TEST_SRC += \ + $(DIR)/test_CMSSMSemiAnalytic_ewsb.cpp \ $(DIR)/test_CMSSMSemiAnalytic_semi_analytic_solutions.cpp endif @@ -762,6 +763,8 @@ $(DIR)/test_NSM_low_scale_constraint.x: $(LIBNSM) $(LIBFLEXI) $(filter-out -%,$( $(DIR)/test_VCMSSM_ewsb.x: $(LIBVCMSSM) $(LIBCMSSM) $(LIBFLEXI) $(LIBLEGACY) $(filter-out -%,$(LOOPFUNCLIBS)) +$(DIR)/test_CMSSMSemiAnalytic_ewsb.x: $(LIBCMSSMSemiAnalytic) $(LIBFLEXI) $(LIBLEGACY) $(filter-out -%,$(LOOPFUNCLIBS)) + $(DIR)/test_CMSSMSemiAnalytic_semi_analytic_solutions.x: $(LIBCMSSMSemiAnalytic) $(LIBFLEXI) $(LIBLEGACY) $(filter-out -%,$(LOOPFUNCLIBS)) # general test rule which links all libraries needed for a generated model diff --git a/test/test_CMSSMSemiAnalytic.hpp b/test/test_CMSSMSemiAnalytic.hpp index 73ad99ac6..dbfa95153 100644 --- a/test/test_CMSSMSemiAnalytic.hpp +++ b/test/test_CMSSMSemiAnalytic.hpp @@ -7,6 +7,53 @@ #include "wrappers.hpp" #include "ew_input.hpp" +struct Boundary_values { + double m12{}; + double Azero{}; + double m0Sq{}; + double BMu0{}; + double Mu{}; +}; + +void setup_high_scale_CMSSMSemiAnalytic_const( + flexiblesusy:: CMSSMSemiAnalytic_mass_eigenstates& model, + const Boundary_values& values) +{ + model.set_TYu(model.get_Yu() * values.Azero); + model.set_TYd(model.get_Yd() * values.Azero); + model.set_TYe(model.get_Ye() * values.Azero); + + model.set_mq2(values.m0Sq * UNITMATRIX(3)); + model.set_mu2(values.m0Sq * UNITMATRIX(3)); + model.set_md2(values.m0Sq * UNITMATRIX(3)); + model.set_ml2(values.m0Sq * UNITMATRIX(3)); + model.set_me2(values.m0Sq * UNITMATRIX(3)); + model.set_mHd2(values.m0Sq); + model.set_mHu2(values.m0Sq); + + model.set_MassB(values.m12); + model.set_MassWB(values.m12); + model.set_MassG(values.m12); + + model.set_Mu(values.Mu); + model.set_BMu(values.BMu0); +} + +void setup_high_scale_CMSSMSemiAnalytic( + flexiblesusy::CMSSMSemiAnalytic_mass_eigenstates& model, + Boundary_values& values) +{ + using namespace flexiblesusy; + + values.m12 = 300.0; + values.Azero = -200.; + values.m0Sq = Sqr(250); + values.BMu0 = -1.e4; + values.Mu = model.get_Mu(); + + setup_high_scale_CMSSMSemiAnalytic_const(model, values); +} + void setup_CMSSMSemiAnalytic_const(flexiblesusy::CMSSMSemiAnalytic_mass_eigenstates& m, const flexiblesusy::CMSSMSemiAnalytic_input_parameters& input) { @@ -25,7 +72,7 @@ void setup_CMSSMSemiAnalytic_const(flexiblesusy::CMSSMSemiAnalytic_mass_eigensta const double cosBeta = cos(atan(tanBeta)); const double M12 = input.m12; const double m0 = input.m12; - const double a0 = input.Azero + 100.; + const double a0 = input.Azero; const double root2 = Sqrt(2.0); const double vev = 246.0; const double vu = vev * sinBeta; diff --git a/test/test_CMSSMSemiAnalytic_ewsb.cpp b/test/test_CMSSMSemiAnalytic_ewsb.cpp new file mode 100644 index 000000000..0b47819b7 --- /dev/null +++ b/test/test_CMSSMSemiAnalytic_ewsb.cpp @@ -0,0 +1,51 @@ +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE test_CMSSMSemiAnalytic_ewsb + +#include + +#include "test_CMSSMSemiAnalytic.hpp" +#include "CMSSMSemiAnalytic_semi_analytic_ewsb_solver.hpp" +#include "CMSSMSemiAnalytic_semi_analytic_solutions.hpp" + +using namespace flexiblesusy; + +BOOST_AUTO_TEST_CASE( test_CMSSMSemiAnalytic_ewsb_tree_level_solution ) +{ + const double precision = 1.0e-5; + CMSSMSemiAnalytic_input_parameters input; + CMSSMSemiAnalytic_mass_eigenstates model(input); + setup_CMSSMSemiAnalytic(model, input); + + const double high_scale = 2.e16; + model.run_to(high_scale); + + Boundary_values values; + setup_high_scale_CMSSMSemiAnalytic(model, values); + + CMSSMSemiAnalytic_semi_analytic_solutions solns; + solns.set_input_scale(high_scale); + solns.set_output_scale(Electroweak_constants::MZ); + solns.set_AzeroBasis(values.Azero); + solns.set_m12Basis(values.m12); + solns.set_m0SqBasis(values.m0Sq); + solns.set_BMu0Basis(values.BMu0); + solns.set_MuBasis(values.Mu); + + solns.calculate_coefficients(model); + + model.run_to(Electroweak_constants::MZ); + + CMSSMSemiAnalytic_ewsb_solver ewsb_solver; + ewsb_solver.set_loop_order(0); + ewsb_solver.set_semi_analytic_solutions(&solns); + model.set_ewsb_solver(&ewsb_solver); + + std::cout << "initially, m0Sq = " << model.get_m0Sq() << '\n'; + model.set_ewsb_iteration_precision(precision); + const int error = model.solve_ewsb_tree_level(); + std::cout << "finally, m0Sq = " << model.get_m0Sq() << '\n'; + BOOST_CHECK_EQUAL(error, 0); + + BOOST_CHECK_SMALL(model.get_ewsb_eq_hh_1(), precision); + BOOST_CHECK_SMALL(model.get_ewsb_eq_hh_2(), precision); +} diff --git a/test/test_CMSSMSemiAnalytic_semi_analytic_solutions.cpp b/test/test_CMSSMSemiAnalytic_semi_analytic_solutions.cpp index 9248efbbe..432881622 100644 --- a/test/test_CMSSMSemiAnalytic_semi_analytic_solutions.cpp +++ b/test/test_CMSSMSemiAnalytic_semi_analytic_solutions.cpp @@ -9,37 +9,6 @@ using namespace flexiblesusy; -struct Boundary_values { - double m12{}; - double Azero{}; - double m0Sq{}; - double BMu0{}; - double Mu{}; -}; - -void setup_high_scale_CMSSMSemiAnalytic( - CMSSMSemiAnalytic_mass_eigenstates& model, const Boundary_values& values) -{ - model.set_TYu(model.get_Yu() * values.Azero); - model.set_TYd(model.get_Yd() * values.Azero); - model.set_TYe(model.get_Ye() * values.Azero); - - model.set_mq2(values.m0Sq * UNITMATRIX(3)); - model.set_mu2(values.m0Sq * UNITMATRIX(3)); - model.set_md2(values.m0Sq * UNITMATRIX(3)); - model.set_ml2(values.m0Sq * UNITMATRIX(3)); - model.set_me2(values.m0Sq * UNITMATRIX(3)); - model.set_mHd2(values.m0Sq); - model.set_mHu2(values.m0Sq); - - model.set_MassB(values.m12); - model.set_MassWB(values.m12); - model.set_MassG(values.m12); - - model.set_Mu(values.Mu); - model.set_BMu(values.BMu0); -} - BOOST_AUTO_TEST_CASE( test_CMSSMSemiAnalytic_coefficients ) { CMSSMSemiAnalytic_input_parameters input; @@ -50,12 +19,6 @@ BOOST_AUTO_TEST_CASE( test_CMSSMSemiAnalytic_coefficients ) model.run_to(high_scale); Boundary_values values; - values.m12 = 300.0; - values.Azero = -200.; - values.m0Sq = Sqr(250); - values.BMu0 = -1.e4; - values.Mu = model.get_Mu(); - setup_high_scale_CMSSMSemiAnalytic(model, values); CMSSMSemiAnalytic_semi_analytic_solutions solns;