Skip to content

Commit

Permalink
Add test of EWSB solution in the CNMSSM
Browse files Browse the repository at this point in the history
  • Loading branch information
Dylan Harries committed Feb 10, 2017
1 parent 56d55c4 commit fe06e92
Show file tree
Hide file tree
Showing 3 changed files with 156 additions and 2 deletions.
3 changes: 3 additions & 0 deletions test/module.mk
Expand Up @@ -154,6 +154,7 @@ endif

ifeq ($(WITH_CNMSSM), yes)
TEST_SRC += \
$(DIR)/test_CNMSSM_ewsb.cpp \
$(DIR)/test_CNMSSM_semi_analytic_solutions.cpp
endif

Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions test/test_CNMSSM.hpp
Expand Up @@ -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));
Expand All @@ -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<double,3,3> Yu(Eigen::Matrix<double,3,3>::Zero());
Expand Down
151 changes: 151 additions & 0 deletions test/test_CNMSSM_ewsb.cpp
@@ -0,0 +1,151 @@
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE test_CNMSSM_ewsb

#include <boost/test/unit_test.hpp>

#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<Semi_analytic> 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<Semi_analytic> 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<double> tadpole_hh_1(model.tadpole_hh(0));
const std::complex<double> tadpole_hh_2(model.tadpole_hh(1));
const std::complex<double> 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<Semi_analytic> 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<double,3,1> tadpole_2l(model.tadpole_hh_2loop());

const std::complex<double> tadpole_hh_1(
model.tadpole_hh(0) + tadpole_2l(0));
const std::complex<double> tadpole_hh_2(
model.tadpole_hh(1) + tadpole_2l(1));
const std::complex<double> 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);
}

0 comments on commit fe06e92

Please sign in to comment.