From fe06e92a07064276422211edc7016dedca05b81a Mon Sep 17 00:00:00 2001 From: Dylan Harries Date: Fri, 10 Feb 2017 17:41:50 +1030 Subject: [PATCH] Add test of EWSB solution in the CNMSSM --- test/module.mk | 3 + test/test_CNMSSM.hpp | 4 +- test/test_CNMSSM_ewsb.cpp | 151 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+), 2 deletions(-) create mode 100644 test/test_CNMSSM_ewsb.cpp diff --git a/test/module.mk b/test/module.mk index f1dc53404..685041ac2 100644 --- a/test/module.mk +++ b/test/module.mk @@ -154,6 +154,7 @@ endif ifeq ($(WITH_CNMSSM), yes) TEST_SRC += \ + $(DIR)/test_CNMSSM_ewsb.cpp \ $(DIR)/test_CNMSSM_semi_analytic_solutions.cpp endif @@ -785,6 +786,8 @@ $(DIR)/test_CMSSMSemiAnalytic_ewsb_solution.x: $(LIBCMSSMSemiAnalytic) $(LIBCMSS $(DIR)/test_CMSSMSemiAnalytic_semi_analytic_solutions.x: $(LIBCMSSMSemiAnalytic) $(LIBFLEXI) $(LIBLEGACY) $(filter-out -%,$(LOOPFUNCLIBS)) +$(DIR)/test_CNMSSM_ewsb.x: $(LIBCNMSSM) $(LIBFLEXI) $(LIBLEGACY) $(filter-out -%,$(LOOPFUNCLIBS)) + $(DIR)/test_CNMSSM_semi_analytic_solutions.x: $(LIBCNMSSM) $(LIBFLEXI) $(LIBLEGACY) $(filter-out -%,$(LOOPFUNCLIBS)) # general test rule which links all libraries needed for a generated model diff --git a/test/test_CNMSSM.hpp b/test/test_CNMSSM.hpp index 8b6debd6d..9b5982b77 100644 --- a/test/test_CNMSSM.hpp +++ b/test/test_CNMSSM.hpp @@ -69,7 +69,7 @@ void setup_CNMSSM_const(flexiblesusy::CNMSSM_mass_eigenstates& m, const double g2 = Sqrt(4.0 * Pi * alpha2); const double g3 = Sqrt(4.0 * Pi * ALPHASMZ); const double lambda = input.LambdaInput; - const double kappa = 0.01; + const double kappa = 0.0297; const double tanBeta = input.TanBeta; const double sinBeta = Sin(ArcTan(tanBeta)); const double cosBeta = Cos(ArcTan(tanBeta)); @@ -80,7 +80,7 @@ void setup_CNMSSM_const(flexiblesusy::CNMSSM_mass_eigenstates& m, const double vev = 246.0; const double vu = vev * sinBeta; const double vd = vev * cosBeta; - const double vS = 1000.; + const double vS = 7000.; const double scale = Electroweak_constants::MZ; Eigen::Matrix Yu(Eigen::Matrix::Zero()); diff --git a/test/test_CNMSSM_ewsb.cpp b/test/test_CNMSSM_ewsb.cpp new file mode 100644 index 000000000..f24933cf6 --- /dev/null +++ b/test/test_CNMSSM_ewsb.cpp @@ -0,0 +1,151 @@ +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE test_CNMSSM_ewsb + +#include + +#include "test_CNMSSM.hpp" +#include "CNMSSM_semi_analytic_ewsb_solver.hpp" +#include "CNMSSM_semi_analytic_solutions.hpp" +#include "root_finder.hpp" + +using namespace flexiblesusy; + +BOOST_AUTO_TEST_CASE( test_CNMSSM_ewsb_tree_level_solution ) +{ + const double precision = 1.0e-5; + CNMSSM_input_parameters input; + CNMSSM_mass_eigenstates model(input); + setup_CNMSSM(model, input); + + const double high_scale = 2.0e16; + model.run_to(high_scale); + + Boundary_values values; + setup_high_scale_CNMSSM(model, values); + + CNMSSM_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.calculate_coefficients(model); + + model.run_to(Electroweak_constants::MZ); + + CNMSSM_ewsb_solver ewsb_solver; + ewsb_solver.set_loop_order(0); + ewsb_solver.set_semi_analytic_solutions(&solns); + model.set_ewsb_solver(&ewsb_solver); + + model.set_ewsb_loop_order(0); + model.set_ewsb_iteration_precision(precision); + const int error = model.solve_ewsb_tree_level(); + 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); + BOOST_CHECK_SMALL(model.get_ewsb_eq_hh_3(), precision); +} + +BOOST_AUTO_TEST_CASE( test_CNMSSM_ewsb_one_loop_solution ) +{ + const double precision = 1.0e-5; + CNMSSM_input_parameters input; + CNMSSM_mass_eigenstates model(input); + setup_CNMSSM(model, input); + + const double high_scale = 2.e16; + model.run_to(high_scale); + + Boundary_values values; + setup_high_scale_CNMSSM(model, values); + + CNMSSM_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.calculate_coefficients(model); + + model.run_to(Electroweak_constants::MZ); + model.calculate_DRbar_masses(); + + CNMSSM_ewsb_solver ewsb_solver; + ewsb_solver.set_loop_order(1); + ewsb_solver.set_semi_analytic_solutions(&solns); + model.set_ewsb_solver(&ewsb_solver); + + model.set_ewsb_loop_order(1); + model.set_ewsb_iteration_precision(precision); + const int error = model.solve_ewsb_one_loop(); + BOOST_CHECK_EQUAL(error, 0); + + const std::complex tadpole_hh_1(model.tadpole_hh(0)); + const std::complex tadpole_hh_2(model.tadpole_hh(1)); + const std::complex tadpole_hh_3(model.tadpole_hh(2)); + + BOOST_CHECK_SMALL(Im(tadpole_hh_1), 1.0e-12); + BOOST_CHECK_SMALL(Im(tadpole_hh_2), 1.0e-12); + BOOST_CHECK_SMALL(Im(tadpole_hh_3), 1.0e-12); + + BOOST_CHECK_SMALL(model.get_ewsb_eq_hh_1() - Re(tadpole_hh_1), 1.0); + BOOST_CHECK_SMALL(model.get_ewsb_eq_hh_2() - Re(tadpole_hh_2), 1.0); + BOOST_CHECK_SMALL(model.get_ewsb_eq_hh_3() - Re(tadpole_hh_3), 1.0); +} + +BOOST_AUTO_TEST_CASE( test_CNMSSM_ewsb_two_loop_solution ) +{ + const double precision = 1.0e-5; + CNMSSM_input_parameters input; + CNMSSM_mass_eigenstates model(input); + setup_CNMSSM(model, input); + + const double high_scale = 2.e16; + model.run_to(high_scale); + + Boundary_values values; + setup_high_scale_CNMSSM(model, values); + + CNMSSM_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.calculate_coefficients(model); + + model.run_to(Electroweak_constants::MZ); + model.calculate_DRbar_masses(); + + CNMSSM_ewsb_solver ewsb_solver; + ewsb_solver.set_loop_order(2); + ewsb_solver.set_semi_analytic_solutions(&solns); + model.set_ewsb_solver(&ewsb_solver); + + model.set_ewsb_loop_order(2); + model.set_ewsb_iteration_precision(precision); + const int error = model.solve_ewsb(); + BOOST_CHECK_EQUAL(error, 0); + + const Eigen::Matrix tadpole_2l(model.tadpole_hh_2loop()); + + const std::complex tadpole_hh_1( + model.tadpole_hh(0) + tadpole_2l(0)); + const std::complex tadpole_hh_2( + model.tadpole_hh(1) + tadpole_2l(1)); + const std::complex tadpole_hh_3( + model.tadpole_hh(2) + tadpole_2l(2)); + + BOOST_CHECK_SMALL(Im(tadpole_hh_1), 1.0e-12); + BOOST_CHECK_SMALL(Im(tadpole_hh_2), 1.0e-12); + BOOST_CHECK_SMALL(Im(tadpole_hh_3), 1.0e-12); + + BOOST_CHECK_SMALL(model.get_ewsb_eq_hh_1() - Re(tadpole_hh_1), 1.0); + BOOST_CHECK_SMALL(model.get_ewsb_eq_hh_2() - Re(tadpole_hh_2), 1.0); + BOOST_CHECK_SMALL(model.get_ewsb_eq_hh_3() - Re(tadpole_hh_3), 1.0); +}