|
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 DB_ARGS_N BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(DB_ARGS_SEQ), 1)
29#define C_ARGS_N BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(C_ARGS_SEQ), 1)
30#define D_ARGS_N BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(D_ARGS_SEQ), 1)
32#define COLLIER_TYPE(Z, N, TEXT) const std::complex<double>*,
33#define COLLIER_ARGS(N) \
34 BOOST_PP_REPEAT(N, COLLIER_TYPE, ) const std::complex<double>*
35#define IMPL(R, ARGS, NAME) \
36 void BOOST_PP_CAT(NAME, _impl)(std::complex<double>*, COLLIER_ARGS(ARGS));
39#define COLLIER_B(R, ARGS, NAME) \
40 std::complex<double> Collier::NAME ARGS noexcept \
42 const std::complex<double> p10(p10_in.real(), 0.); \
43 const std::complex<double> m02 = m02_in; \
44 const std::complex<double> m12 = m12_in; \
45 std::complex<double> res = 0.0; \
46 set_mu2_uv(scl2_in); \
47 BOOST_PP_CAT(NAME, _impl)(&res, &p10, &m02, &m12); \
50#define COLLIER_C(R, ARGS, NAME) \
51 std::complex<double> Collier::NAME ARGS noexcept \
53 const std::complex<double> p10(p10_in.real(), 0.); \
54 const std::complex<double> p21(p21_in.real(), 0.); \
55 const std::complex<double> p20(p20_in.real(), 0.); \
56 const std::complex<double> m02 = m02_in; \
57 const std::complex<double> m12 = m12_in; \
58 const std::complex<double> m22 = m22_in; \
59 std::complex<double> res = 0.0; \
60 set_mu2_uv(scl2_in); \
61 BOOST_PP_CAT(NAME, _impl)(&res, &p10, &p21, &p20, &m02, &m12, &m22); \
64#define COLLIER_D(R, ARGS, NAME) \
65 std::complex<double> Collier::NAME ARGS noexcept \
67 const std::complex<double> p10(p10_in.real(), 0.); \
68 const std::complex<double> p21(p21_in.real(), 0.); \
69 const std::complex<double> p32(p32_in.real(), 0.); \
70 const std::complex<double> p30(p30_in.real(), 0.); \
71 const std::complex<double> p20(p20_in.real(), 0.); \
72 const std::complex<double> p31(p31_in.real(), 0.); \
73 const std::complex<double> m02 = m02_in; \
74 const std::complex<double> m12 = m12_in; \
75 const std::complex<double> m22 = m22_in; \
76 const std::complex<double> m32 = m32_in; \
77 std::complex<double> res = 0.0; \
78 set_mu2_uv(scl2_in); \
79 BOOST_PP_CAT(NAME, _impl) \
80 (&res, &p10, &p21, &p32, &p30, &p20, &p31, &m02, &m12, &m22, &m32); \
107void Collier::initialize() noexcept
115void Collier::set_mu2_uv( double scl2_in) noexcept
117 double scl2 = scl2_in;
118 if (std::abs(scl2 - this->current_mu2_uv) >
119 std::numeric_limits<double>::epsilon()) {
121 this->current_mu2_uv = scl2;
125std::complex<double> Collier::A0( A_ARGS) noexcept
127 const std::complex<double> m02 = m02_in;
128 std::complex<double> res = 0.0;
141 const std::complex<double> m02 = m02_in;
149 const std::complex<double> p10(p10_in.real(), 0.);
150 const std::complex<double> m02 = m02_in;
151 const std::complex<double> m12 = m12_in;
159 const std::complex<double> p10(p10_in.real(), 0.);
160 const std::complex<double> m02 = m02_in;
161 const std::complex<double> m12 = m12_in;
169 const std::complex<double> p10(p10_in.real(), 0.);
170 const std::complex<double> p21(p21_in.real(), 0.);
171 const std::complex<double> p20(p20_in.real(), 0.);
172 const std::complex<double> m02 = m02_in;
173 const std::complex<double> m12 = m12_in;
174 const std::complex<double> m22 = m22_in;
177 get_C_impl(c.data(), &p10, &p21, &p20, &m02, &m12, &m22);
182 const std::complex<double> p10(p10_in.real(), 0.);
183 const std::complex<double> p21(p21_in.real(), 0.);
184 const std::complex<double> p32(p32_in.real(), 0.);
185 const std::complex<double> p30(p30_in.real(), 0.);
186 const std::complex<double> p20(p20_in.real(), 0.);
187 const std::complex<double> p31(p31_in.real(), 0.);
188 const std::complex<double> m02 = m02_in;
189 const std::complex<double> m12 = m12_in;
190 const std::complex<double> m22 = m22_in;
191 const std::complex<double> m32 = m32_in;
194 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_DB_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 > *)
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 > *)
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
|