flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
library_fflite.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_fflite.hpp"
20#include "fflite.hpp"
21#include "fortran_utils.hpp"
22#include <boost/preprocessor/repeat.hpp>
23#include <limits>
24
25#define NAN_Q std::numeric_limits<double>::quiet_NaN()
26#define SET_TO_NAN(Z, INDEX, DATA) DATA[INDEX] = {NAN_Q, NAN_Q};
27#define UNDEFINED(R, ARGS, NAME) \
28 std::complex<double> Fflite::NAME ARGS noexcept { return {NAN_Q, NAN_Q}; }
29
30namespace flexiblesusy
31{
32namespace looplibrary
33{
34
36{
38 ltini_();
41}
42
43std::complex<double> Fflite::A0(A_ARGS) noexcept
44{
45 std::complex<double> ca0;
46 int ier;
47 ljffca0_(ca0, 0, scl2_in, m02_in, ier);
48 return ca0;
49}
50
51std::complex<double> Fflite::B0(B_ARGS) noexcept
52{
53 std::complex<double> cb0;
54 int ier;
55 ljffcb0_(cb0, 0, scl2_in, p10_in, m02_in, m12_in, ier);
56 return cb0;
57}
58
59std::complex<double> Fflite::B1(B_ARGS) noexcept
60{
61 std::complex<double> cb1;
62 int ier;
63 std::complex<double> cb0 = B0(p10_in, m02_in, m12_in, scl2_in);
64 std::complex<double> ca0i[2] = {A0(m02_in, scl2_in), A0(m12_in, scl2_in)};
65 std::complex<double> piDpj[9];
66 ljffcot2_(piDpj, p10_in, m02_in, m12_in, m02_in - p10_in, m12_in - p10_in,
67 m02_in - m12_in, ier);
68 ljffcb1_(cb1, cb0, ca0i, p10_in, m02_in, m12_in, piDpj, ier);
69 return cb1;
70}
71
72std::complex<double> Fflite::B00(B_ARGS) noexcept
73{
74 std::complex<double> cb2i[2];
75 int ier;
76 std::complex<double> cb1 = B1(p10_in, m02_in, m12_in, scl2_in);
77 std::complex<double> cb0 = B0(p10_in, m02_in, m12_in, scl2_in);
78 std::complex<double> ca0i[2] = {A0(m02_in, scl2_in), A0(m12_in, scl2_in)};
79 std::complex<double> piDpj[9];
80 ljffcot2_(piDpj, p10_in, m02_in, m12_in, m02_in - p10_in, m12_in - p10_in,
81 m02_in - m12_in, ier);
82 ljffcb2p_(cb2i, cb1, cb0, ca0i, p10_in, m02_in, m12_in, piDpj, ier);
83 return cb2i[1];
84}
85
86BOOST_PP_SEQ_FOR_EACH(UNDEFINED, (C_ARGS), C_SEQ)
87BOOST_PP_SEQ_FOR_EACH(UNDEFINED, (D_ARGS), D_SEQ)
88
89void Fflite::A(Acoeff_t& a, A_ARGS) noexcept
90{
91 a.at(0) = A0(m02_in, scl2_in);
92}
93
94void Fflite::B(Bcoeff_t& b, B_ARGS) noexcept
95{
96 b.at(0) = B0(p10_in, m02_in, m12_in, scl2_in);
97 b.at(1) = B1(p10_in, m02_in, m12_in, scl2_in);
98 b.at(2) = B00(p10_in, m02_in, m12_in, scl2_in);
99}
100
101void Fflite::C(Ccoeff_t& c, C_ARGS) noexcept
102{
103 BOOST_PP_REPEAT(C_N, SET_TO_NAN, c)
104}
105
106void Fflite::D(Dcoeff_t& d, D_ARGS) noexcept
107{
108 BOOST_PP_REPEAT(D_N, SET_TO_NAN, d)
109}
110
111} // namespace looplibrary
112} // namespace flexiblesusy
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 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 B(Bcoeff_t &, BOOST_PP_SEQ_FOR_EACH(ARGS_TYPE,,(p10_in)(m02_in)(m12_in)) double scl2_in) noexcept override
void ljffcb1_(std::complex< double > &cb1, const std::complex< double > &cb0, const std::complex< double > *ca0i, const std::complex< double > &xp, const std::complex< double > &xm1, const std::complex< double > &xm2, const std::complex< double > *piDpj, int &ier)
void ljffcb2p_(std::complex< double > *cb2i, const std::complex< double > &cb1, const std::complex< double > &cb0, const std::complex< double > *ca0i, const std::complex< double > &cp, const std::complex< double > &xm1, const std::complex< double > &xm2, const std::complex< double > *piDpj, int &ier)
void ljffca0_(std::complex< double > &ca0, const double &d0, const double &xmm, const std::complex< double > &cm, int &ier)
void ljffcot2_(std::complex< double > *cpiDpj, const std::complex< double > &cp, const std::complex< double > &cma, const std::complex< double > &cmb, const std::complex< double > &cmap, const std::complex< double > &cmbp, const std::complex< double > &cmamb, int &ier)
void ltini_()
void ljffcb0_(std::complex< double > &cb0, const double &d0, const double &xmu, const std::complex< double > &cp, const std::complex< double > &cma, const std::complex< double > &cmb, int &ier)
#define UNDEFINED(R, ARGS, NAME)
#define SET_TO_NAN(Z, INDEX, DATA)
#define B_ARGS
#define C_ARGS
#define D_ARGS
#define D_SEQ
#define C_SEQ
#define A_ARGS
#define D_N
#define C_N
void flush() noexcept
Flushes output of fortran routines.
void swap() noexcept
Swaps stdout and stderr descriptors.
std::array< std::complex< double >, BOOST_PP_SEQ_SIZE((0)(1)(2)(00)(11)(12)(22)) > Ccoeff_t
void() A(aa)) coeff_t &arr
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 B0(double m1, double m2, double scale) noexcept
(arguments are interpreted as unsquared)