|
Go to the documentation of this file.
21#include <boost/preprocessor/arithmetic/sub.hpp>
22#include <boost/preprocessor/cat.hpp>
23#include <boost/preprocessor/repetition/repeat.hpp>
26#define A_ARGS_N BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(A_ARGS_SEQ), 1)
27#define B_ARGS_N BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(B_ARGS_SEQ), 1)
28#define C_ARGS_N BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(C_ARGS_SEQ), 1)
29#define D_ARGS_N BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(D_ARGS_SEQ), 1)
31#define COLLIER_TYPE(Z, N, TEXT) const std::complex<double>*,
32#define COLLIER_ARGS(N) \
33 BOOST_PP_REPEAT(N, COLLIER_TYPE, ) const std::complex<double>*
34#define IMPL(R, ARGS, NAME) \
35 void BOOST_PP_CAT(NAME, _impl)(std::complex<double>*, COLLIER_ARGS(ARGS));
38#define COLLIER_B(R, ARGS, NAME) \
39 std::complex<double> Collier::NAME ARGS noexcept \
41 const std::complex<double> p10(p10_in.real(), 0.); \
42 const std::complex<double> m02 = m02_in; \
43 const std::complex<double> m12 = m12_in; \
44 std::complex<double> res = 0.0; \
45 set_mu2_uv(scl2_in); \
46 BOOST_PP_CAT(NAME, _impl)(&res, &p10, &m02, &m12); \
49#define COLLIER_C(R, ARGS, NAME) \
50 std::complex<double> Collier::NAME ARGS noexcept \
52 const std::complex<double> p10(p10_in.real(), 0.); \
53 const std::complex<double> p21(p21_in.real(), 0.); \
54 const std::complex<double> p20(p20_in.real(), 0.); \
55 const std::complex<double> m02 = m02_in; \
56 const std::complex<double> m12 = m12_in; \
57 const std::complex<double> m22 = m22_in; \
58 std::complex<double> res = 0.0; \
59 set_mu2_uv(scl2_in); \
60 BOOST_PP_CAT(NAME, _impl)(&res, &p10, &p21, &p20, &m02, &m12, &m22); \
63#define COLLIER_D(R, ARGS, NAME) \
64 std::complex<double> Collier::NAME ARGS noexcept \
66 const std::complex<double> p10(p10_in.real(), 0.); \
67 const std::complex<double> p21(p21_in.real(), 0.); \
68 const std::complex<double> p32(p32_in.real(), 0.); \
69 const std::complex<double> p30(p30_in.real(), 0.); \
70 const std::complex<double> p20(p20_in.real(), 0.); \
71 const std::complex<double> p31(p31_in.real(), 0.); \
72 const std::complex<double> m02 = m02_in; \
73 const std::complex<double> m12 = m12_in; \
74 const std::complex<double> m22 = m22_in; \
75 const std::complex<double> m32 = m32_in; \
76 std::complex<double> res = 0.0; \
77 set_mu2_uv(scl2_in); \
78 BOOST_PP_CAT(NAME, _impl) \
79 (&res, &p10, &p21, &p32, &p30, &p20, &p31, &m02, &m12, &m22, &m32); \
104void Collier::initialize() noexcept
112void Collier::set_mu2_uv( double scl2_in) noexcept
114 double scl2 = scl2_in;
115 if (std::abs(scl2 - this->current_mu2_uv) >
118 this->current_mu2_uv = scl2;
122std::complex<double> Collier::A0( A_ARGS) noexcept
124 const std::complex<double> m02 = m02_in;
125 std::complex<double> res = 0.0;
137 const std::complex<double> m02 = m02_in;
145 const std::complex<double> p10(p10_in.real(), 0.);
146 const std::complex<double> m02 = m02_in;
147 const std::complex<double> m12 = m12_in;
155 const std::complex<double> p10(p10_in.real(), 0.);
156 const std::complex<double> p21(p21_in.real(), 0.);
157 const std::complex<double> p20(p20_in.real(), 0.);
158 const std::complex<double> m02 = m02_in;
159 const std::complex<double> m12 = m12_in;
160 const std::complex<double> m22 = m22_in;
163 get_C_impl(c.data(), &p10, &p21, &p20, &m02, &m12, &m22);
168 const std::complex<double> p10(p10_in.real(), 0.);
169 const std::complex<double> p21(p21_in.real(), 0.);
170 const std::complex<double> p32(p32_in.real(), 0.);
171 const std::complex<double> p30(p30_in.real(), 0.);
172 const std::complex<double> p20(p20_in.real(), 0.);
173 const std::complex<double> p31(p31_in.real(), 0.);
174 const std::complex<double> m02 = m02_in;
175 const std::complex<double> m12 = m12_in;
176 const std::complex<double> m22 = m22_in;
177 const std::complex<double> m32 = m32_in;
180 get_D_impl(d.data(), &p10, &p21, &p32, &p30, &p20, &p31, &m02, &m12, &m22,
void initialize_collier_impl()
void get_A_impl(const std::complex< double >[BOOST_PP_SEQ_SIZE((0))], BOOST_PP_REPEAT(BOOST_PP_SUB(BOOST_PP_SEQ_SIZE((m02_in)), 1), COLLIER_TYPE,) const std::complex< double > *)
void get_C_impl(const std::complex< double >[BOOST_PP_SEQ_SIZE((0)(1)(2)(00)(11)(12)(22))], BOOST_PP_REPEAT(BOOST_PP_SUB(BOOST_PP_SEQ_SIZE((p10_in)(p21_in)(p20_in)(m02_in)(m12_in)(m22_in)), 1), COLLIER_TYPE,) const std::complex< double > *)
void set_mu2_uv_impl(double *)
void get_B_impl(const std::complex< double >[BOOST_PP_SEQ_SIZE((0)(1)(00))], BOOST_PP_REPEAT(BOOST_PP_SUB(BOOST_PP_SEQ_SIZE((p10_in)(m02_in)(m12_in)), 1), COLLIER_TYPE,) const std::complex< double > *)
#define COLLIER_D(R, ARGS, NAME)
#define COLLIER_C(R, ARGS, NAME)
#define IMPL(R, ARGS, NAME)
#define COLLIER_B(R, ARGS, NAME)
void get_D_impl(const std::complex< double >[BOOST_PP_SEQ_SIZE((0)(1)(2)(3)(00)(11)(12)(13)(22)(23)(33))], BOOST_PP_REPEAT(BOOST_PP_SUB(BOOST_PP_SEQ_SIZE((p10_in)(p21_in)(p32_in)(p30_in)(p20_in)(p31_in)(m02_in)(m12_in)(m22_in)(m32_in)), 1), COLLIER_TYPE,) const std::complex< double > *)
void flush() noexcept Flushes output of fortran routines.
void swap() noexcept Swaps stdout and stderr descriptors.
void() C(cc)) coeff_t &arr
std::array< std::complex< double >, BOOST_PP_SEQ_SIZE((0)(1)(2)(00)(11)(12)(22)) > Ccoeff_t
void() D(dd)) coeff_t &arr
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
void() B(bb)) coeff_t &arr
|