flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
library_softsusy.cpp
Go to the documentation of this file.
1// ====================================================================
2// This file is part of FlexibleSUSY.
3//
4// FlexibleSUSY is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published
6// by the Free Software Foundation, either version 3 of the License,
7// or (at your option) any later version.
8//
9// FlexibleSUSY is distributed in the hope that it will be useful, but
10// WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with FlexibleSUSY. If not, see
16// <http://www.gnu.org/licenses/>.
17// ====================================================================
18
19#include "library_softsusy.hpp"
20#include "numerics.h"
21#include <limits>
22
23#define NAN_Q std::numeric_limits<double>::quiet_NaN()
24#define UNDEFINED(R, ARGS, NAME) \
25 std::complex<double> Softsusy::NAME ARGS noexcept { return {NAN_Q, NAN_Q}; }
26
27namespace flexiblesusy
28{
29namespace looplibrary
30{
31
32std::complex<double> Softsusy::A0(A_ARGS) noexcept
33{
34 const double m2 = m02_in.real();
35 const double q2 = scl2_in;
36
37 return {softsusy::rea0(m2, q2), 0.0};
38}
39
40std::complex<double> Softsusy::B0(B_ARGS) noexcept
41{
42 const double p = std::sqrt(p10_in.real());
43 const double m1 = std::sqrt(m02_in.real());
44 const double m2 = std::sqrt(m12_in.real());
45 const double q = std::sqrt(scl2_in);
46
47 return {softsusy::b0(p, m1, m2, q), 0.0};
48}
49
50std::complex<double> Softsusy::B1(B_ARGS) noexcept
51{
52 const double p = std::sqrt(p10_in.real());
53 const double m1 = std::sqrt(m02_in.real());
54 const double m2 = std::sqrt(m12_in.real());
55 const double q = std::sqrt(scl2_in);
56
57 return {(-1) * softsusy::b1(p, m1, m2, q), 0.0};
58}
59
60std::complex<double> Softsusy::B00(B_ARGS) noexcept
61{
62 const double p = std::sqrt(p10_in.real());
63 const double m1 = std::sqrt(m02_in.real());
64 const double m2 = std::sqrt(m12_in.real());
65 const double q = std::sqrt(scl2_in);
66
67 return {softsusy::b22(p, m1, m2, q), 0.0};
68}
69
70
71std::complex<double> Softsusy::DB0(DB_ARGS) noexcept
72{
73 const double p = p10_in.real();
74 const double m1 = m02_in.real();
75 const double m2 = m12_in.real();
76
77 return {softsusy::db0(p, m1, m2), 0.0};
78}
79
80BOOST_PP_SEQ_FOR_EACH(UNDEFINED, (DB_ARGS), (DB1)(DB00))
81
82std::complex<double> Softsusy::C0(C_ARGS) noexcept
83{
84 const double m1 = std::sqrt(m02_in.real());
85 const double m2 = std::sqrt(m12_in.real());
86 const double m3 = std::sqrt(m22_in.real());
87
88 return {softsusy::c0(m1, m2, m3), 0.0};
89}
90
91std::complex<double> Softsusy::C00(C_ARGS) noexcept
92{
93 const double m1 = std::sqrt(m02_in.real());
94 const double m2 = std::sqrt(m12_in.real());
95 const double m3 = std::sqrt(m22_in.real());
96 const double q = std::sqrt(scl2_in);
97
98 return {softsusy::c00(m1, m2, m3, q), 0.0};
99}
100
101BOOST_PP_SEQ_FOR_EACH(UNDEFINED, (C_ARGS), (C1)(C2)(C11)(C12)(C22))
102
103std::complex<double> Softsusy::D0(D_ARGS) noexcept
104{
105 const double m1 = std::sqrt(m02_in.real());
106 const double m2 = std::sqrt(m12_in.real());
107 const double m3 = std::sqrt(m22_in.real());
108 const double m4 = std::sqrt(m32_in.real());
109
110 return {softsusy::d0(m1, m2, m3, m4), 0.0};
111}
112
113std::complex<double> Softsusy::D00(D_ARGS) noexcept
114{
115 const double m1 = std::sqrt(m02_in.real());
116 const double m2 = std::sqrt(m12_in.real());
117 const double m3 = std::sqrt(m22_in.real());
118 const double m4 = std::sqrt(m32_in.real());
119
120 return {softsusy::d27(m1, m2, m3, m4), 0.0};
121}
122
123BOOST_PP_SEQ_FOR_EACH(UNDEFINED, (D_ARGS),
124 (D1)(D11)(D12)(D13)(D2)(D22)(D23)(D3)(D33))
125
126void Softsusy::A(Acoeff_t& a, A_ARGS) noexcept
127{
128 const double m = std::sqrt(m02_in.real());
129 const double q = std::sqrt(scl2_in);
130
131 a.at(0) = {softsusy::a0(m, q), 0.0};
132}
133
134void Softsusy::DB(DBcoeff_t& db, DB_ARGS) noexcept
135{
136 const double p = p10_in.real();
137 const double m1 = m02_in.real();
138 const double m2 = m12_in.real();
139
140 static constexpr std::complex<double> undefined = {NAN_Q, NAN_Q};
141 db.at(0) = {softsusy::db0(p, m1, m2), 0.};
142 db.at(1) = undefined;
143 db.at(2) = undefined;
144}
145
146void Softsusy::B(Bcoeff_t& b, B_ARGS) noexcept
147{
148 const double p = std::sqrt(p10_in.real());
149 const double m1 = std::sqrt(m02_in.real());
150 const double m2 = std::sqrt(m12_in.real());
151 const double q = std::sqrt(scl2_in);
152
153 b.at(0) = {softsusy::b0(p, m1, m2, q), 0.0};
154 b.at(1) = {(-1) * softsusy::b1(p, m1, m2, q), 0.0};
155 b.at(2) = {softsusy::b22(p, m1, m2, q), 0.0};
156}
157
158void Softsusy::C(Ccoeff_t& c, C_ARGS) noexcept
159{
160 const double m1 = std::sqrt(m02_in.real());
161 const double m2 = std::sqrt(m12_in.real());
162 const double m3 = std::sqrt(m22_in.real());
163 const double q = std::sqrt(scl2_in);
164 std::complex<double> undefined = {NAN_Q, NAN_Q};
165
166 c.at(0) = {softsusy::c0(m1, m2, m3), 0.0};
167 c.at(1) = undefined;
168 c.at(2) = undefined;
169 c.at(3) = {softsusy::c00(m1, m2, m3, q), 0.0};
170 c.at(4) = undefined;
171 c.at(5) = undefined;
172 c.at(6) = undefined;
173}
174
175void Softsusy::D(Dcoeff_t& d, D_ARGS) noexcept
176{
177 const double m1 = std::sqrt(m02_in.real());
178 const double m2 = std::sqrt(m12_in.real());
179 const double m3 = std::sqrt(m22_in.real());
180 const double m4 = std::sqrt(m32_in.real());
181 std::complex<double> undefined = {NAN_Q, NAN_Q};
182
183 d.at(0) = {softsusy::d0(m1, m2, m3, m4), 0.0};
184 d.at(1) = undefined;
185 d.at(2) = undefined;
186 d.at(3) = undefined;
187 d.at(4) = {softsusy::d27(m1, m2, m3, m4), 0.0};
188 d.at(5) = undefined;
189 d.at(6) = undefined;
190 d.at(7) = undefined;
191 d.at(8) = undefined;
192 d.at(9) = undefined;
193 d.at(10) = undefined;
194}
195
196} // namespace looplibrary
197} // namespace flexiblesusy
void B(Bcoeff_t &, BOOST_PP_SEQ_FOR_EACH(ARGS_TYPE,,(p10_in)(m02_in)(m12_in)) double scl2_in) noexcept override
void C(Ccoeff_t &, BOOST_PP_SEQ_FOR_EACH(ARGS_TYPE,,(p10_in)(p21_in)(p20_in)(m02_in)(m12_in)(m22_in)) double scl2_in) noexcept override
void D(Dcoeff_t &, BOOST_PP_SEQ_FOR_EACH(ARGS_TYPE,,(p10_in)(p21_in)(p32_in)(p30_in)(p20_in)(p31_in)(m02_in)(m12_in)(m22_in)(m32_in)) double scl2_in) noexcept override
void DB(DBcoeff_t &, BOOST_PP_SEQ_FOR_EACH(ARGS_TYPE,,(p10_in)(m02_in)(m12_in)) double scl2_in) noexcept override
void A(Acoeff_t &, BOOST_PP_SEQ_FOR_EACH(ARGS_TYPE,,(m02_in)) double scl2_in) noexcept override
#define NAN_Q
#define UNDEFINED(R, ARGS, NAME)
#define B_ARGS
#define C_ARGS
#define D_ARGS
#define A_ARGS
#define DB_ARGS
std::array< std::complex< double >, BOOST_PP_SEQ_SIZE((0)(1)(2)(00)(11)(12)(22)) > Ccoeff_t
std::array< std::complex< double >, BOOST_PP_SEQ_SIZE((0)(1)(00)) > DBcoeff_t
std::array< std::complex< double >, BOOST_PP_SEQ_SIZE((0)) > Acoeff_t
std::array< std::complex< double >, BOOST_PP_SEQ_SIZE((0)(1)(2)(3)(00)(11)(12)(13)(22)(23)(33)) > Dcoeff_t
std::array< std::complex< double >, BOOST_PP_SEQ_SIZE((0)(1)(00)) > Bcoeff_t
double b1(double p, double m1, double m2, double q) noexcept
Note that b1 is NOT symmetric in m1 <-> m2!!!
Definition numerics.cpp:246
double c00(double m1, double m2, double m3, double q) noexcept
Definition numerics.cpp:481
double rea0(double x, double q) noexcept
Definition numerics.cpp:139
double c0(double m1, double m2, double m3) noexcept
Definition numerics.cpp:396
double a0(double m, double q) noexcept
Definition numerics.cpp:125
double b22(double p, double m1, double m2, double q) noexcept
Definition numerics.cpp:298
double d27(double m1, double m2, double m3, double m4) noexcept
Definition numerics.cpp:385
double b0(double p, double m1, double m2, double q) noexcept
Definition numerics.cpp:174
double d0(double m1, double m2, double m3, double m4) noexcept
Definition numerics.cpp:345
double db0(double, double x, double y) noexcept
Definition numerics.cpp:233
loop functions