Skip to content

Commit

Permalink
Add test checking that two-scale solution is a fixed point of the sem…
Browse files Browse the repository at this point in the history
…i-analytic iteration
  • Loading branch information
Dylan Harries committed Feb 7, 2017
1 parent d7a778b commit 4179f2e
Showing 1 changed file with 204 additions and 33 deletions.
237 changes: 204 additions & 33 deletions test/test_CMSSMSemiAnalytic_consistent_solutions.cpp
Expand Up @@ -5,16 +5,66 @@

#define private public

#include "test_CMSSMSemiAnalytic.hpp"
#include "CMSSMSemiAnalytic_input_parameters.hpp"
#include "CMSSMSemiAnalytic_slha_io.hpp"
#include "CMSSMSemiAnalytic_semi_analytic_ewsb_solver.hpp"
#include "CMSSMSemiAnalytic_semi_analytic_spectrum_generator.hpp"
#include "CMSSMSemiAnalytic_semi_analytic_susy_convergence_tester.hpp"

#include "CMSSM_input_parameters.hpp"
#include "CMSSM_slha_io.hpp"
#include "CMSSM_two_scale_ewsb_solver.hpp"
#include "CMSSM_two_scale_spectrum_generator.hpp"

#include "two_scale_running_precision.hpp"
#include "two_scale_solver.hpp"

using namespace flexiblesusy;

template <class NewModel, class OldModel>
NewModel copy_parameters_from_model(const OldModel& old_model)
{
NewModel new_model;

new_model.set_loops(old_model.get_loops());
new_model.set_scale(old_model.get_scale());
new_model.set_ewsb_loop_order(old_model.get_ewsb_loop_order());
new_model.set_thresholds(old_model.get_thresholds());

new_model.set_Yu(old_model.get_Yu());
new_model.set_Yd(old_model.get_Yd());
new_model.set_Ye(old_model.get_Ye());

new_model.set_g1(old_model.get_g1());
new_model.set_g2(old_model.get_g2());
new_model.set_g3(old_model.get_g3());

new_model.set_Mu(old_model.get_Mu());

new_model.set_vd(old_model.get_vd());
new_model.set_vu(old_model.get_vu());

new_model.set_TYu(old_model.get_TYu());
new_model.set_TYd(old_model.get_TYd());
new_model.set_TYe(old_model.get_TYe());

new_model.set_mHd2(old_model.get_mHd2());
new_model.set_mHu2(old_model.get_mHu2());
new_model.set_BMu(old_model.get_BMu());

new_model.set_mq2(old_model.get_mq2());
new_model.set_mu2(old_model.get_mu2());
new_model.set_md2(old_model.get_md2());
new_model.set_ml2(old_model.get_ml2());
new_model.set_me2(old_model.get_me2());

new_model.set_MassB(old_model.get_MassB());
new_model.set_MassWB(old_model.get_MassWB());
new_model.set_MassG(old_model.get_MassG());

return new_model;
}

CMSSM_input_parameters initialize_two_scale_input(
double m0Sq, const CMSSMSemiAnalytic_input_parameters& semi_analytic_input)
{
Expand All @@ -33,51 +83,45 @@ CMSSM<Two_scale> initialize_two_scale_model(
const CMSSMSemiAnalytic<Semi_analytic>& semi_analytic_model,
const CMSSMSemiAnalytic_input_parameters& semi_analytic_input)
{
CMSSM<Two_scale> two_scale_model;

two_scale_model.set_loops(semi_analytic_model.get_loops());
two_scale_model.set_scale(semi_analytic_model.get_scale());
two_scale_model.set_ewsb_loop_order(semi_analytic_model.get_ewsb_loop_order());
two_scale_model.set_thresholds(semi_analytic_model.get_thresholds());
CMSSM<Two_scale> two_scale_model
= copy_parameters_from_model<CMSSM<Two_scale> >(semi_analytic_model);

two_scale_model.set_input_parameters(
initialize_two_scale_input(semi_analytic_model.get_m0Sq(),
semi_analytic_input));

two_scale_model.set_Yu(semi_analytic_model.get_Yu());
two_scale_model.set_Yd(semi_analytic_model.get_Yd());
two_scale_model.set_Ye(semi_analytic_model.get_Ye());

two_scale_model.set_g1(semi_analytic_model.get_g1());
two_scale_model.set_g2(semi_analytic_model.get_g2());
two_scale_model.set_g3(semi_analytic_model.get_g3());
two_scale_model.calculate_DRbar_masses();

two_scale_model.set_Mu(semi_analytic_model.get_Mu());
return two_scale_model;
}

two_scale_model.set_vd(semi_analytic_model.get_vd());
two_scale_model.set_vu(semi_analytic_model.get_vu());
CMSSMSemiAnalytic_input_parameters initialize_semi_analytic_input(
double MuInput, const CMSSM_input_parameters& two_scale_input)
{
CMSSMSemiAnalytic_input_parameters input;

two_scale_model.set_TYu(semi_analytic_model.get_TYu());
two_scale_model.set_TYd(semi_analytic_model.get_TYd());
two_scale_model.set_TYe(semi_analytic_model.get_TYe());
input.m12 = two_scale_input.m12;
input.Azero = two_scale_input.Azero;
input.TanBeta = two_scale_input.TanBeta;
input.MuInput = MuInput;

two_scale_model.set_mHd2(semi_analytic_model.get_mHd2());
two_scale_model.set_mHu2(semi_analytic_model.get_mHu2());
two_scale_model.set_BMu(semi_analytic_model.get_BMu());
return input;
}

two_scale_model.set_mq2(semi_analytic_model.get_mq2());
two_scale_model.set_mu2(semi_analytic_model.get_mu2());
two_scale_model.set_md2(semi_analytic_model.get_md2());
two_scale_model.set_ml2(semi_analytic_model.get_ml2());
two_scale_model.set_me2(semi_analytic_model.get_me2());
CMSSMSemiAnalytic<Semi_analytic> initialize_semi_analytic_model(
const CMSSM<Two_scale>& two_scale_model,
const CMSSM_input_parameters& two_scale_input)
{
CMSSMSemiAnalytic<Semi_analytic> semi_analytic_model
= copy_parameters_from_model<CMSSMSemiAnalytic<Semi_analytic> >(two_scale_model);

two_scale_model.set_MassB(semi_analytic_model.get_MassB());
two_scale_model.set_MassWB(semi_analytic_model.get_MassWB());
two_scale_model.set_MassG(semi_analytic_model.get_MassG());
semi_analytic_model.set_input_parameters(
initialize_semi_analytic_input(two_scale_model.get_Mu(),
two_scale_input));

two_scale_model.calculate_DRbar_masses();
semi_analytic_model.calculate_DRbar_masses();

return two_scale_model;
return semi_analytic_model;
}

template <class Model>
Expand Down Expand Up @@ -189,6 +233,69 @@ CMSSM<Two_scale> run_single_two_scale_iteration(const CMSSM<Two_scale>& model, c
return next_model;
}

CMSSMSemiAnalytic<Semi_analytic> run_single_semi_analytic_iteration(const CMSSMSemiAnalytic<Semi_analytic>& model, const CMSSMSemiAnalytic_scales& scales)
{
CMSSMSemiAnalytic<Semi_analytic> next_model(model);

CMSSMSemiAnalytic_semi_analytic_solutions& solutions(
next_model.get_semi_analytic_solutions());

CMSSMSemiAnalytic_ewsb_solver<Semi_analytic> ewsb_solver;
ewsb_solver.set_semi_analytic_solutions(&solutions);
next_model.set_ewsb_solver(&ewsb_solver);

CMSSMSemiAnalytic_high_scale_constraint<Semi_analytic> high_scale_constraint;
CMSSMSemiAnalytic_susy_scale_constraint<Semi_analytic> susy_scale_constraint;
CMSSMSemiAnalytic_low_scale_constraint<Semi_analytic> low_scale_constraint;
CMSSMSemiAnalytic_soft_parameters_constraint<Semi_analytic> soft_constraint;

high_scale_constraint.set_model(&next_model);
susy_scale_constraint.set_model(&next_model);
low_scale_constraint.set_model(&next_model);
soft_constraint.set_model(&next_model);

softsusy::QedQcd qedqcd;
qedqcd.to(qedqcd.displayPoleMZ());

susy_scale_constraint.set_sm_parameters(qedqcd);
low_scale_constraint.set_sm_parameters(qedqcd);
soft_constraint.set_sm_parameters(qedqcd);

high_scale_constraint.set_soft_parameters_constraint(&soft_constraint);

high_scale_constraint.initialize();
susy_scale_constraint.initialize();
low_scale_constraint.initialize();
soft_constraint.initialize();

high_scale_constraint.scale = scales.HighScale;
susy_scale_constraint.scale = scales.SUSYScale;
low_scale_constraint.scale = scales.LowScale;
soft_constraint.scale = scales.SUSYScale;

CMSSMSemiAnalytic_susy_convergence_tester<Semi_analytic> convergence_tester(
&next_model, 1.0e-4);

Two_scale_increasing_precision running_precision(10.0, 1.0e-4);

// apply constraints once
RGFlow<Two_scale> inner_solver;
inner_solver.reset();
inner_solver.set_convergence_tester(&convergence_tester);
inner_solver.set_running_precision(&running_precision);

inner_solver.add(&low_scale_constraint, &next_model);
inner_solver.add(&high_scale_constraint, &next_model);
inner_solver.add(&susy_scale_constraint, &next_model);

inner_solver.solve();

next_model.run_to(scales.SUSYScale);
soft_constraint.apply();

return next_model;
}

std::vector<CMSSMSemiAnalytic_input_parameters> initialize_semi_analytic_inputs()
{
std::vector<CMSSMSemiAnalytic_input_parameters> inputs{4};
Expand Down Expand Up @@ -216,6 +323,19 @@ std::vector<CMSSMSemiAnalytic_input_parameters> initialize_semi_analytic_inputs(
return inputs;
}

std::vector<CMSSM_input_parameters> initialize_two_scale_inputs()
{
std::vector<CMSSM_input_parameters> inputs{1};

inputs[0].m0 = 125.;
inputs[0].m12 = 500.;
inputs[0].TanBeta = 10.;
inputs[0].SignMu = 1;
inputs[0].Azero = 0.;

return inputs;
}

BOOST_AUTO_TEST_CASE( test_semi_analytic_to_two_scale )
{
const double precision = 1.0e-4;
Expand Down Expand Up @@ -266,3 +386,54 @@ BOOST_AUTO_TEST_CASE( test_semi_analytic_to_two_scale )
BOOST_CHECK_LT(mass_rel_diff, test_precision);
}
}

BOOST_AUTO_TEST_CASE( test_two_scale_to_semi_analytic )
{
const double precision = 1.0e-4;

const std::vector<CMSSM_input_parameters> two_scale_inputs(
initialize_two_scale_inputs());

for (const auto& two_scale_input: two_scale_inputs) {
softsusy::QedQcd qedqcd;

CMSSM_spectrum_generator<Two_scale> spectrum_generator;
spectrum_generator.set_precision_goal(precision);
spectrum_generator.set_max_iterations(0);
spectrum_generator.set_calculate_sm_masses(0);

spectrum_generator.run(qedqcd, two_scale_input);

const auto& two_scale_problems = spectrum_generator.get_problems();

BOOST_CHECK_EQUAL(two_scale_problems.have_problem(), false);

const double high_scale = spectrum_generator.get_high_scale();
const double susy_scale = spectrum_generator.get_susy_scale();
const double low_scale = spectrum_generator.get_low_scale();

const CMSSM<Two_scale> two_scale_model = spectrum_generator.get_model();

CMSSMSemiAnalytic_scales scales;
scales.HighScale = high_scale;
scales.SUSYScale = susy_scale;
scales.LowScale = low_scale;

const CMSSMSemiAnalytic<Semi_analytic> semi_analytic_model(
initialize_semi_analytic_model(two_scale_model, two_scale_input));

const CMSSMSemiAnalytic<Semi_analytic> single_iteration_model =
run_single_semi_analytic_iteration(semi_analytic_model, scales);

// check that the originally found solution is an (approximate)
// fixed point of the semi-analytic iteration as well
const double susy_pars_rel_diff = max_susy_parameters_rel_diff(
semi_analytic_model, single_iteration_model);
const double mass_rel_diff = max_mass_rel_diff(
semi_analytic_model, single_iteration_model);

const double test_precision = 20. * precision;
BOOST_CHECK_LT(susy_pars_rel_diff, test_precision);
BOOST_CHECK_LT(mass_rel_diff, test_precision);
}
}

0 comments on commit 4179f2e

Please sign in to comment.