Skip to content

Commit

Permalink
Bugfix: Fix potential race condition when multiple (N)MSSM classes
Browse files Browse the repository at this point in the history
are run in parallel
  • Loading branch information
Alexander Voigt authored and Alexander Voigt committed Aug 10, 2016
1 parent 3584c64 commit 44b31fa
Show file tree
Hide file tree
Showing 13 changed files with 782 additions and 410 deletions.
4 changes: 2 additions & 2 deletions meta/FlexibleSUSY.m
Expand Up @@ -985,12 +985,12 @@ corresponding tadpole is real or imaginary (only in models with CP
If[SARAH`UseHiggs2LoopMSSM === True,
{twoLoopTadpolePrototypes, twoLoopTadpoleFunctions} = SelfEnergies`CreateTwoLoopTadpolesMSSM[SARAH`HiggsBoson];
{twoLoopSelfEnergyPrototypes, twoLoopSelfEnergyFunctions} = SelfEnergies`CreateTwoLoopSelfEnergiesMSSM[{SARAH`HiggsBoson, SARAH`PseudoScalar}];
twoLoopHiggsHeaders = "#include \"sfermions.hpp\"\n#include \"mssm_twoloophiggs.h\"\n";
twoLoopHiggsHeaders = "#include \"sfermions.hpp\"\n#include \"mssm_twoloophiggs.hpp\"\n";
];
If[FlexibleSUSY`UseHiggs2LoopNMSSM === True,
{twoLoopTadpolePrototypes, twoLoopTadpoleFunctions} = SelfEnergies`CreateTwoLoopTadpolesNMSSM[SARAH`HiggsBoson];
{twoLoopSelfEnergyPrototypes, twoLoopSelfEnergyFunctions} = SelfEnergies`CreateTwoLoopSelfEnergiesNMSSM[{SARAH`HiggsBoson, SARAH`PseudoScalar}];
twoLoopHiggsHeaders = "#include \"sfermions.hpp\"\n#include \"nmssm_twoloophiggs.h\"\n";
twoLoopHiggsHeaders = "#include \"sfermions.hpp\"\n#include \"mssm_twoloophiggs.hpp\"\n#include \"nmssm_twoloophiggs.hpp\"\n";
];
setEWSBParametersFromGSLVector = EWSB`SetEWSBParametersFromGSLVector[parametersFixedByEWSB, freePhases, "x"];
calculateTreeLevelTadpoles = EWSB`FillArrayWithEWSBEqs[SARAH`HiggsBoson, "tadpole"];
Expand Down
631 changes: 282 additions & 349 deletions meta/SelfEnergies.m

Large diffs are not rendered by default.

7 changes: 5 additions & 2 deletions src/module.mk
Expand Up @@ -20,7 +20,9 @@ LIBFLEXI_SRC := \
$(DIR)/linalg.cpp \
$(DIR)/lowe.cpp \
$(DIR)/sfermions.cpp \
$(DIR)/mssm_twoloophiggs.f \
$(DIR)/mssm_twoloophiggs.cpp \
$(DIR)/mssm_twoloophiggs_impl.f \
$(DIR)/nmssm_twoloophiggs.cpp \
$(DIR)/nmssm2loop.f \
$(DIR)/numerics.cpp \
$(DIR)/numerics2.cpp \
Expand Down Expand Up @@ -79,9 +81,10 @@ LIBFLEXI_HDR := \
$(DIR)/matching.hpp \
$(DIR)/minimizer.hpp \
$(DIR)/mssm_twoloophiggs.h \
$(DIR)/mssm_twoloophiggs.hpp \
$(DIR)/mycomplex.h \
$(DIR)/nmssm_twoloophiggs.hpp \
$(DIR)/nmssm2loop.h \
$(DIR)/nmssm_twoloophiggs.h \
$(DIR)/numerics.h \
$(DIR)/numerics2.hpp \
$(DIR)/pmns.hpp \
Expand Down
221 changes: 221 additions & 0 deletions src/mssm_twoloophiggs.cpp
@@ -0,0 +1,221 @@
// ====================================================================
// This file is part of FlexibleSUSY.
//
// FlexibleSUSY is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published
// by the Free Software Foundation, either version 3 of the License,
// or (at your option) any later version.
//
// FlexibleSUSY is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with FlexibleSUSY. If not, see
// <http://www.gnu.org/licenses/>.
// ====================================================================

#include "mssm_twoloophiggs.hpp"
#include "mssm_twoloophiggs.h"
#include "config.h"
#include <utility>

#ifdef ENABLE_THREADS
#include <mutex>
#define LOCK_MUTEX() std::lock_guard<std::mutex> lg(mtx_mssm)
#else
#define LOCK_MUTEX()
#endif

namespace flexiblesusy {

static std::mutex mtx_mssm; /// locks MSSM fortran functions

Eigen::Matrix<double, 2, 1> tadpole_higgs_2loop_at_as_mssm(
double rmtsq, double mg, double mst1sq, double mst2sq,
double sxt, double cxt, double scalesq,
double amu, double tanb, double vev2, double gs)
{
Eigen::Matrix<double, 2, 1> result;

LOCK_MUTEX();

ewsb2loop_(&rmtsq, &mg, &mst1sq, &mst2sq, &sxt, &cxt, &scalesq,
&amu, &tanb, &vev2, &gs, &result(0), &result(1));

return result;
}

Eigen::Matrix<double, 2, 1> tadpole_higgs_2loop_at_at_mssm(
double rmtsq, double rmbsq, double mAsq, double mst1sq,
double mst2sq, double msb1sq, double msb2sq,
double sxt, double cxt, double sxb, double cxb,
double scalesq, double amu, double tanb, double vev2)
{
Eigen::Matrix<double, 2, 1> result;

LOCK_MUTEX();

ddstad_(&rmtsq, &rmbsq, &mAsq, &mst1sq, &mst2sq, &msb1sq, &msb2sq,
&sxt, &cxt, &sxb, &cxb, &scalesq, &amu, &tanb, &vev2,
&result(0), &result(1));

return result;
}

Eigen::Matrix<double, 2, 1> tadpole_higgs_2loop_ab_as_mssm(
double rmbsq, double mg, double msb1sq, double msb2sq,
double sxb, double cxb, double scalesq,
double amu, double cotbeta, double vev2, double gs)
{
Eigen::Matrix<double, 2, 1> result(tadpole_higgs_2loop_at_as_mssm(
rmbsq, mg, msb1sq, msb2sq, sxb, cxb, scalesq,
amu, cotbeta, vev2, gs));

std::swap(result(0), result(1));

return result;
}

Eigen::Matrix<double, 2, 1> tadpole_higgs_2loop_atau_atau_mssm(
double rmtausq, double mAsq, double msnusq, double mstau1sq,
double mstau2sq, double sintau, double costau, double scalesq,
double amu, double tanb, double vev2)
{
Eigen::Matrix<double, 2, 1> result;

LOCK_MUTEX();

tausqtad_(&rmtausq, &mAsq, &msnusq, &mstau1sq, &mstau2sq, &sintau,
&costau, &scalesq, &amu, &tanb, &vev2, &result(0), &result(1));

return result;
}

Eigen::Matrix<double, 2, 2> self_energy_higgs_2loop_at_as_mssm(
double rmtsq, double mg, double mst1sq, double mst2sq,
double sxt, double cxt, double scalesq, double amu,
double tanb, double vev2, double gs, int scheme)
{
Eigen::Matrix<double, 2, 2> result;

LOCK_MUTEX();

dszhiggs_(&rmtsq, &mg, &mst1sq, &mst2sq, &sxt, &cxt, &scalesq, &amu,
&tanb, &vev2, &gs, &scheme,
&result(0,0), &result(1,1), &result(0,1));

result(1,0) = result(0,1);

return result;
}

Eigen::Matrix<double, 2, 2> self_energy_higgs_2loop_at_at_mssm(
double rmtsq, double rmbsq, double fmasq, double mst1sq,
double mst2sq, double msb1sq, double msb2sq,
double sxt, double cxt, double sxb, double cxb,
double scalesq, double amu, double tanb, double vev2)
{
Eigen::Matrix<double, 2, 2> result;

LOCK_MUTEX();

ddshiggs_(&rmtsq, &rmbsq, &fmasq, &mst1sq, &mst2sq, &msb1sq, &msb2sq,
&sxt, &cxt, &sxb, &cxb, &scalesq, &amu, &tanb, &vev2,
&result(0,0), &result(0,1), &result(1,1));

result(1,0) = result(0,1);

return result;
}

Eigen::Matrix<double, 2, 2> self_energy_higgs_2loop_ab_as_mssm(
double rmbsq, double mg, double msb1sq, double msb2sq,
double sxb, double cxb, double scalesq, double amu,
double cotbeta, double vev2, double gs, int scheme)
{
Eigen::Matrix<double, 2, 2> result(self_energy_higgs_2loop_at_as_mssm(
rmbsq, mg, msb1sq, msb2sq, sxb, cxb, scalesq, amu,
cotbeta, vev2, gs, scheme));

std::swap(result(0,0), result(1,1));

return result;
}

Eigen::Matrix<double, 2, 2> self_energy_higgs_2loop_atau_atau_mssm(
double rmtausq, double fmasq, double msnusq, double mstau1sq,
double mstau2sq, double sintau, double costau, double scalesq,
double amu, double tanb, double vev2, int scheme)
{
Eigen::Matrix<double, 2, 2> result;

LOCK_MUTEX();

tausqhiggs_(&rmtausq, &fmasq, &msnusq, &mstau1sq, &mstau2sq, &sintau,
&costau, &scalesq, &amu, &tanb, &vev2, &scheme,
&result(0,0), &result(1,1), &result(0,1));

result(1,0) = result(0,1);

return result;
}

double self_energy_pseudoscalar_2loop_at_as_mssm(
double rmtsq, double mg, double mst1sq, double mst2sq,
double sxt, double cxt, double scalesq, double amu,
double tanb, double vev2, double gs)
{
double result;

LOCK_MUTEX();

dszodd_(&rmtsq, &mg, &mst1sq, &mst2sq, &sxt, &cxt, &scalesq, &amu,
&tanb, &vev2, &gs, &result);

return result;
}

double self_energy_pseudoscalar_2loop_at_at_mssm(
double rmtsq, double rmbsq, double fmasq, double mst1sq,
double mst2sq, double msb1sq, double msb2sq,
double sxt, double cxt, double sxb, double cxb,
double scalesq, double amu, double tanb, double vev2)
{
double result;

LOCK_MUTEX();

ddsodd_(&rmtsq, &rmbsq, &fmasq, &mst1sq, &mst2sq, &msb1sq, &msb2sq,
&sxt, &cxt, &sxb, &cxb, &scalesq, &amu, &tanb, &vev2, &result);

return result;
}

double self_energy_pseudoscalar_2loop_ab_as_mssm(
double rmbsq, double mg, double msb1sq, double msb2sq,
double sxb, double cxb, double scalesq, double amu,
double cotbeta, double vev2, double gs)
{
return self_energy_pseudoscalar_2loop_at_as_mssm(
rmbsq, mg, msb1sq, msb2sq, sxb, cxb, scalesq, amu,
cotbeta, vev2, gs);
}

double self_energy_pseudoscalar_2loop_atau_atau_mssm(
double rmtausq, double fmasq, double msnusq, double mstau1sq,
double mstau2sq, double sintau, double costau, double scalesq,
double amu, double tanb, double vev2)
{
double result;

LOCK_MUTEX();

tausqodd_(&rmtausq, &fmasq, &msnusq, &mstau1sq, &mstau2sq, &sintau,
&costau, &scalesq, &amu, &tanb, &vev2, &result);

return result;
}

} // namespace flexiblesusy
19 changes: 2 additions & 17 deletions src/mssm_twoloophiggs.h
@@ -1,6 +1,6 @@

#ifndef MSSM_TWOLOOPHIGGS_H
#define MSSM_TWOLOOPHIGGS_H
#ifndef _MSSM_TWOLOOPHIGGS_H_
#define _MSSM_TWOLOOPHIGGS_H_

#ifdef __cplusplus
extern "C" {
Expand Down Expand Up @@ -215,21 +215,6 @@ int tausqtad_(double * t, double * A0, double * BL, double * T1,
double * mu, double * tanb, double * vv,
double * s1, double * s2);

#define tadpole_higgs_2loop_at_as_mssm ewsb2loop_
#define tadpole_higgs_2loop_ab_as_mssm ewsb2loop_
#define tadpole_higgs_2loop_at_at_mssm ddstad_
#define tadpole_higgs_2loop_atau_atau_mssm tausqtad_

#define self_energy_higgs_2loop_at_as_mssm dszhiggs_
#define self_energy_higgs_2loop_ab_as_mssm dszhiggs_
#define self_energy_higgs_2loop_at_at_mssm ddshiggs_
#define self_energy_higgs_2loop_atau_atau_mssm tausqhiggs_

#define self_energy_pseudoscalar_2loop_at_as_mssm dszodd_
#define self_energy_pseudoscalar_2loop_ab_as_mssm dszodd_
#define self_energy_pseudoscalar_2loop_at_at_mssm ddsodd_
#define self_energy_pseudoscalar_2loop_atau_atau_mssm tausqodd_

#ifdef __cplusplus
}
#endif
Expand Down
93 changes: 93 additions & 0 deletions src/mssm_twoloophiggs.hpp
@@ -0,0 +1,93 @@
// ====================================================================
// This file is part of FlexibleSUSY.
//
// FlexibleSUSY is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published
// by the Free Software Foundation, either version 3 of the License,
// or (at your option) any later version.
//
// FlexibleSUSY is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with FlexibleSUSY. If not, see
// <http://www.gnu.org/licenses/>.
// ====================================================================

#ifndef MSSM_TWOLOOPHIGGS_H
#define MSSM_TWOLOOPHIGGS_H

#include <Eigen/Core>

namespace flexiblesusy {

Eigen::Matrix<double, 2, 1> tadpole_higgs_2loop_at_as_mssm(
double rmtsq, double mg, double mst1sq, double mst2sq,
double sxt, double cxt, double scalesq,
double amu, double tanb, double vev2, double gs);

Eigen::Matrix<double, 2, 1> tadpole_higgs_2loop_at_at_mssm(
double rmtsq, double rmbsq, double mAsq, double mst1sq,
double mst2sq, double msb1sq, double msb2sq,
double sxt, double cxt, double sxb, double cxb,
double scalesq, double amu, double tanb, double vev2);

Eigen::Matrix<double, 2, 1> tadpole_higgs_2loop_ab_as_mssm(
double rmbsq, double mg, double msb1sq, double msb2sq,
double sxb, double cxb, double scalesq,
double amu, double cotbeta, double vev2, double gs);

Eigen::Matrix<double, 2, 1> tadpole_higgs_2loop_atau_atau_mssm(
double rmtausq, double mAsq, double msnusq, double mstau1sq,
double mstau2sq, double sintau, double costau, double scalesq,
double amu, double tanb, double vev2);


Eigen::Matrix<double, 2, 2> self_energy_higgs_2loop_at_as_mssm(
double rmtsq, double mg, double mst1sq, double mst2sq,
double sxt, double cxt, double scalesq, double amu,
double tanb, double vev2, double gs, int scheme = 0);

Eigen::Matrix<double, 2, 2> self_energy_higgs_2loop_at_at_mssm(
double rmtsq, double rmbsq, double fmasq, double mst1sq,
double mst2sq, double msb1sq, double msb2sq,
double sxt, double cxt, double sxb, double cxb,
double scalesq, double amu, double tanb, double vev2);

Eigen::Matrix<double, 2, 2> self_energy_higgs_2loop_ab_as_mssm(
double rmbsq, double mg, double msb1sq, double msb2sq,
double sxb, double cxb, double scalesq, double amu,
double cotbeta, double vev2, double gs, int scheme = 0);

Eigen::Matrix<double, 2, 2> self_energy_higgs_2loop_atau_atau_mssm(
double rmtausq, double fmasq, double msnusq, double mstau1sq,
double mstau2sq, double sintau, double costau, double scalesq,
double amu, double tanb, double vev2, int scheme = 0);


double self_energy_pseudoscalar_2loop_at_as_mssm(
double rmtsq, double mg, double mst1sq, double mst2sq,
double sxt, double cxt, double scalesq, double amu,
double tanb, double vev2, double gs);

double self_energy_pseudoscalar_2loop_at_at_mssm(
double rmtsq, double rmbsq, double fmasq, double mst1sq,
double mst2sq, double msb1sq, double msb2sq,
double sxt, double cxt, double sxb, double cxb,
double scalesq, double amu, double tanb, double vev2);

double self_energy_pseudoscalar_2loop_ab_as_mssm(
double rmbsq, double mg, double msb1sq, double msb2sq,
double sxb, double cxb, double scalesq, double amu,
double cotbeta, double vev2, double gs);

double self_energy_pseudoscalar_2loop_atau_atau_mssm(
double rmtausq, double fmasq, double msnusq, double mstau1sq,
double mstau2sq, double sintau, double costau, double scalesq,
double amu, double tanb, double vev2);

} // namespace flexiblesusy

#endif
File renamed without changes.
3 changes: 0 additions & 3 deletions src/nmssm2loop.h
Expand Up @@ -4,7 +4,4 @@

extern "C" int effpot_(int *lp,double *mt,double *mg,double *T1,double *T2,double *st,double *ct,double *q2,double *tanb,double *vv,double *l,double *xx,double *as, double DMS[][3][3], double DMP[][3][3]);

#define self_energy_higgs_2loop_at_as_nmssm effpot_
#define self_energy_higgs_2loop_ab_as_nmssm effpot_

#endif

0 comments on commit 44b31fa

Please sign in to comment.