|
Go to the documentation of this file.
20#include "clooptools.h"
22#include <boost/preprocessor/seq/elem.hpp>
23#include <boost/preprocessor/seq/for_each_i.hpp>
31#define REAL(R, DUMMY, ELEM) , ELEM.real()
33#define CAT_(a, b) a##b
34#define CAT(a, b) CAT_(a, b)
36#define LIB(PAIR) BOOST_PP_SEQ_ELEM(0, PAIR)
37#define LT(PAIR) BOOST_PP_SEQ_ELEM(1, PAIR)
39#define LIB_NAME(PAIR, INDEX) CAT(LIB(PAIR), INDEX)
40#define LIB_ARGS(PAIR) CAT(LIB(PAIR), _ARGS)
42#define LT_ARGS(PAIR) CAT(LIB(PAIR), _ARGS_SEQ)
43#define LT_NAME(PAIR) CAT(LIB(PAIR), 0i)
44#define LT_IDX(PAIR, INDEX) CAT(LT(PAIR), INDEX)
46#define LT_ONE(_, PAIR, I, INDEX) \
47 std::complex<double> Looptools::LIB_NAME(PAIR, \
48 INDEX)(LIB_ARGS(PAIR)) noexcept \
50 set_mu2_uv(scl2_in); \
51 return LT_NAME(PAIR)(LT_IDX(PAIR, INDEX) \
52 BOOST_PP_SEQ_FOR_EACH(REAL, , LT_ARGS(PAIR))); \
55#define LT_ONE_DERIVATIVE(_, PAIR, I, INDEX) \
56 std::complex<double> Looptools::CAT(D, LIB_NAME(PAIR, INDEX))(LIB_ARGS(PAIR)) noexcept \
58 set_mu2_uv(scl2_in); \
59 return LT_NAME(PAIR)(CAT(CAT(d, LT(PAIR)), INDEX) \
60 BOOST_PP_SEQ_FOR_EACH(REAL, , LT_ARGS(PAIR))); \
65 void Looptools::LIB(PAIR)(CAT(LIB(PAIR), coeff_t) & \
67 CAT(LIB(PAIR), _ARGS)) noexcept \
69 const int coeffs[] = {BOOST_PP_SEQ_ENUM( \
70 BOOST_PP_SEQ_TRANSFORM(APPEND, LT(PAIR), CAT(LIB(PAIR), _CSEQ)))}; \
71 ComplexType res[CAT(N, LT(PAIR))]; \
72 set_mu2_uv(scl2_in); \
75 (res BOOST_PP_SEQ_FOR_EACH(REAL, , CAT(LIB(PAIR), _ARGS_SEQ))); \
76 for (int i = 0; i < CAT(LIB(PAIR), _N); ++i) { \
77 arr.at(i) = res[coeffs[i]]; \
81#define LT_ALL_DERIVATIVE(PAIR) \
82 void Looptools::CAT(D, LIB(PAIR))(CAT(LIB(PAIR), coeff_t) & \
84 CAT(LIB(PAIR), _ARGS)) noexcept \
86 const int coeffs[] = {BOOST_PP_SEQ_ENUM( \
87 BOOST_PP_SEQ_TRANSFORM(APPEND, CAT(d, LT(PAIR)), CAT(LIB(PAIR), _CSEQ)))}; \
88 ComplexType res[CAT(N, LT(PAIR))]; \
89 set_mu2_uv(scl2_in); \
92 (res BOOST_PP_SEQ_FOR_EACH(REAL, , CAT(LIB(PAIR), _ARGS_SEQ))); \
93 for (int i = 0; i < CAT(CAT(D, LIB(PAIR)), _N); ++i) { \
94 arr.at(i) = res[coeffs[i]]; \
113 if (std::abs(scl2_in - this->current_mu2_uv) >
114 std::numeric_limits<double>::epsilon()) {
116 this->current_mu2_uv = scl2_in;
void flush() noexcept Flushes output of fortran routines.
void swap() noexcept Swaps stdout and stderr descriptors.
|