flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
threshold_loop_functions.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
20#include "Cl2.hpp"
21#include "Li2.hpp"
23#include "logger.hpp"
24#include "numerics.h"
25
26#include <algorithm>
27#include <cmath>
28#include <limits>
29
30namespace flexiblesusy {
31namespace threshold_loop_functions {
32
33namespace {
34 template <typename T> constexpr T sqr(T x) noexcept { return x*x; }
35 template <typename T> constexpr T cube(T x) noexcept { return x*x*x; }
36 template <typename T> constexpr T quad(T x) noexcept { return sqr(sqr(x)); }
37 template <typename T> constexpr T pow5(T x) noexcept { return x*quad(x); }
38 template <typename T> constexpr T pow6(T x) noexcept { return sqr(cube(x)); }
39 template <typename T> constexpr T pow7(T x) noexcept { return x*pow6(x); }
40 template <typename T> constexpr T pow8(T x) noexcept { return sqr(quad(x)); }
41 template <typename T> constexpr T pow9(T x) noexcept { return x*pow8(x); }
42
43
44 template <typename T>
45 bool is_zero(T a, T prec) noexcept
46 {
47 return std::fabs(a) < prec;
48 }
49
50 template <typename T>
51 bool is_equal(T a, T b, T prec) noexcept
52 {
53 return is_zero(a - b, prec);
54 }
55
56 template <typename T>
57 bool is_equal_rel(T a, T b, T prec) noexcept
58 {
60 return true;
61 }
62
63 const T min = std::min(std::abs(a), std::abs(b));
64
66 return is_equal(a, b, prec);
67 }
68
69 const double max = std::max(std::fabs(a), std::fabs(b));
70
71 return is_equal(a, b, prec*max);
72 }
73
74 bool is_close(double a, double b, double prec) noexcept
75 {
76 const double max = std::max(std::abs(a), std::abs(b));
77 return is_zero(a - b, prec*(1.0 + max));
78 }
79
80 double logx(double x) noexcept
81 {
83 return 0.;
84 }
85
86 return std::log(x);
87 }
88
89 double xlogx(double x) noexcept
90 {
91 if (x <= 0.) {
92 return 0.;
93 }
94
95 return x * std::log(x);
96 }
97
98 void sort(double& x, double& y, double& z) noexcept
99 {
100 if (x > y) { std::swap(x, y); }
101 if (y > z) { std::swap(y, z); }
102 if (x > y) { std::swap(x, y); }
103 }
104
105} // anonymous namespace
106
107double F1(double x) noexcept
108{
109 const double eps = std::numeric_limits<double>::epsilon();
110
111 if (is_zero(x, eps)) {
112 return 0.;
113 }
114
115 if (is_equal(x, 1., 0.01)) {
116 const double d = x - 1;
117 const double d2 = sqr(d);
118 return 1 + d2*(-1/6. + d*(1/6. - 2/15.*d));
119 }
120
121 const double x2 = sqr(x);
122
123 return x*std::log(x2)/(x2 - 1);
124}
125
126double F2(double x) noexcept
127{
128 const double eps = std::numeric_limits<double>::epsilon();
129
130 if (is_zero(x, eps)) {
131 return 0.;
132 }
133
134 if (is_equal(x, 1., 0.01)) {
135 const double d = (x - 1)*(x + 1);
136 const double d2 = sqr(d);
137 return 1 + d2*(-0.1 + d*(0.1 - 3/35.*d));
138 }
139
140 const double x2 = sqr(x);
141
142 return 6*x2*(2 - 2*x2 + (1 + x2)*std::log(x2))/cube(x2 - 1);
143}
144
145double F3(double x) noexcept
146{
147 const double eps = std::numeric_limits<double>::epsilon();
148
149 if (is_zero(x, eps)) {
150 return 0.;
151 }
152
153 if (is_equal(x, 1., 0.01)) {
154 const double d = x - 1;
155 return 1 + d*(5/9. + d*(-4/9. + d*(2/9. - 7/90.*d)));
156 }
157
158 const double x2 = sqr(x);
159
160 return 2*x*(5*(1 - x2) + (1 + 4*x2)*std::log(x2))/(3*sqr(x2 - 1));
161}
162
163double F4(double x) noexcept
164{
165 const double eps = std::numeric_limits<double>::epsilon();
166
167 if (is_zero(x, eps)) {
168 return 0.;
169 }
170
171 if (is_equal(x, 1., 0.01)) {
172 const double d = x - 1;
173 const double d2 = sqr(d);
174 return 1 + d*(-1/3. + d2*(2/15. - d/6.));
175 }
176
177 const double x2 = sqr(x);
178
179 return 2*x*(x2 - 1 - std::log(x2))/sqr(x2 - 1);
180}
181
182double F5(double x) noexcept
183{
184 const double eps = std::numeric_limits<double>::epsilon();
185
186 if (is_zero(x, eps)) {
187 return 0.;
188 }
189
190 if (is_equal(x, 1., 0.01)) {
191 const double d = x - 1;
192 const double d2 = sqr(d);
193 return 1 + d2*(-0.3 + d*(0.3 - 3/14.*d));
194 }
195
196 if (is_equal(x, -1., 0.01)) {
197 const double d = x + 1;
198 const double d2 = sqr(d);
199 return -1 + d2*(0.3 + d*(0.3 + 3/14.*d));
200 }
201
202 const double x2 = sqr(x);
203 const double x4 = sqr(x2);
204
205 return 3*x*(1 - x4 + 2*x2*std::log(x2))/cube(1 - x2);
206}
207
208double F6(double x) noexcept
209{
210 const double eps = std::numeric_limits<double>::epsilon();
211
212 if (is_zero(x, eps)) {
213 return -0.75;
214 }
215
216 const double x2 = sqr(x);
217
218 if (is_equal(x2, 1., 0.01)) {
219 const double d = (x - 1)*(x + 1);
220 return d*(1/3. + d*(-1/8. + d*(1/15. + d/24.)));
221 }
222
223 return (x2 - 3)/(4*(1 - x2)) + x2*(x2 - 2)/(2*sqr(1 - x2))*std::log(x2);
224}
225
226double F7(double x) noexcept
227{
228 const double eps = std::numeric_limits<double>::epsilon();
229
230 if (is_zero(x, eps)) {
231 return -1.5;
232 }
233
234 const double x2 = sqr(x);
235
236 if (is_equal(x2, 1., 0.01)) {
237 const double d = (x - 1)*(x + 1);
238 return 1 + d*(3/2. + d*(-9/20. + d*(0.2 - 3/28.*d)));
239 }
240
241 const double x4 = sqr(x2);
242
243 return -3*(x4 - 6*x2 + 1)/(2*sqr(x2 - 1))
244 + 3*x4*(x2 - 3)/cube(x2 - 1)*std::log(x2);
245}
246
248static double F8_1_1(double x1, double x2) noexcept
249{
250 const double d1 = (x1 - 1)*(x1 + 1);
251 const double d2 = (x2 - 1)*(x2 + 1);
252 const double d12 = sqr(d1);
253 const double d22 = sqr(d2);
254 const double d13 = d1*d12;
255 const double d23 = d2*d22;
256 const double d14 = sqr(d12);
257 const double d24 = sqr(d22);
258
259 return 1 + 2/3.*(d1 + d2) + 1/6.*(-d12 - d1*d2 - d22)
260 + (d13 + d12*d2 + d1*d22 + d23)/15.
261 + (-d14 - d13*d2 - d12*d22 - d1*d23 - d24)/30.;
262}
263
265static double F8_1_x2(double x1, double x2) noexcept
266{
267 const double x22 = sqr(x2);
268 const double d = (x1 - 1)*(x1 + 1);
269
270 if (is_zero(x2, 0.01)) {
271 return 2*x22 + d*(1 - x22 + d*(-1/3. + 2/3.*x22));
272 }
273
274 const double d2 = sqr(d);
275 const double d3 = d*d2;
276 const double d4 = sqr(d2);
277 const double y = (x2 - 1)*(x2 + 1);
278 const double y2 = sqr(y);
279 const double y3 = y*y2;
280 const double y4 = sqr(y2);
281 const double y5 = y2*y3;
282 const double y6 = sqr(y3);
283 const double lx22 = std::log(x22);
284
285 return
286 - 2 + 2*(1 + x22*(-1 + lx22*x22))/y2
287 + d*(-1 + x22*(4 + x22*(-3 + 2*lx22)))/y3
288 + d2*(-1 + x22*(6 + x22*(-3 + 6*lx22 + -2*x22)))/(3*y4)
289 + d3*(-1 + x22*(8 + x22*(12*lx22 + x22*(-8 + x22))))/(6*y5)
290 + d4*(-3 + x22*(30 + x22*(20 + 60*lx22 + x22*(-60 + x22*(15 - 2*x22)))))/(30*y6);
291}
292
294static double F8_0_x2(double x1, double x2) noexcept
295{
296 const double x12 = sqr(x1);
297 const double x22 = sqr(x2);
298 const double lx22 = std::log(x22);
299
300 return 2*(1 - x22 + (x12 + x22)*lx22)/(-1 + x22);
301}
302
303// F8(x1,x2) in the limit x1 -> x2, x2 != 1
304static double F8_x1_x2(double x1, double x2) noexcept
305{
306 const double x22 = sqr(x2);
307 const double d = (x1 - x2)*(x1 + x2);
308 const double d2 = sqr(d);
309 const double d3 = d*d2;
310 const double y = (x2 - 1)*(x2 + 1);
311 const double y2 = sqr(y);
312 const double y3 = y*y2;
313 const double y4 = sqr(y2);
314 const double y5 = y2*y3;
315 const double lx22 = std::log(x22);
316
317 return
318 + 2*((-2 + x22)*x22*lx22 + y)/y2
319 + d*(3 + x22*(-4 + x22) + 2*lx22)/y3
320 + d2*(-2 + x22*(-3 - 6*lx22 + x22*(6 - x22)))/(3*x22*y4)
321 + d3*(-1 + x22*(8 + x22*(12*lx22 + x22*(-8 + x22))))/(6*x22*x22*y5);
322}
323
324double F8(double x1, double x2) noexcept
325{
326 const double eps = 10.*std::numeric_limits<double>::epsilon();
327
328 if (is_zero(x1, eps) && is_zero(x2, eps)) {
329 return -2.;
330 }
331
332 const double ax1 = std::fabs(x1);
333 const double ax2 = std::fabs(x2);
334
335 if (is_equal(ax1, 1., 0.01) && is_equal(ax2, 1., 0.01)) {
336 return F8_1_1(x1, x2);
337 }
338
339 if (is_equal(ax1, 1., 0.01)) {
340 return F8_1_x2(x1, x2);
341 }
342
343 if (is_equal(ax2, 1., 0.01)) {
344 return F8_1_x2(x2, x1);
345 }
346
347 if (is_zero(x1, 0.00001)) {
348 return F8_0_x2(x1, x2);
349 }
350
351 if (is_zero(x2, 0.00001)) {
352 return F8_0_x2(x2, x1);
353 }
354
355 if (is_equal(ax1, ax2, 0.00001)) {
356 return F8_x1_x2(x1, x2);
357 }
358
359 const double x12 = sqr(x1);
360 const double x22 = sqr(x2);
361 const double x14 = sqr(x12);
362 const double x24 = sqr(x22);
363
364 return -2. + 2./(x12 - x22)*(
365 + x14/(x12 - 1)*std::log(x12)
366 - x24/(x22 - 1)*std::log(x22));
367}
368
370static double F9_1_1(double x1, double x2) noexcept
371{
372 const double d1 = (x1 - 1)*(x1 + 1);
373 const double d2 = (x2 - 1)*(x2 + 1);
374 const double d12 = sqr(d1);
375 const double d22 = sqr(d2);
376 const double d13 = d1*d12;
377 const double d23 = d2*d22;
378 const double d14 = sqr(d12);
379 const double d24 = sqr(d22);
380
381 return 1
382 + 1/3.*(-d2 - d1)
383 + 1/6.*(d12 + d1*d2 + d22)
384 + 1/10.*(-d13 - d12*d2 - d1*d22 - d23)
385 + 1/15.*(d14 + d13*d2 + d12*d22 + d1*d23 + d24);
386}
387
389static double F9_1_x2(double x1, double x2) noexcept
390{
391 const double x22 = sqr(x2);
392 const double d = (x1 - 1)*(x1 + 1);
393 const double d2 = sqr(d);
394 const double d3 = d*d2;
395 const double d4 = sqr(d2);
396 const double y = (x2 - 1)*(x2 + 1);
397 const double y2 = sqr(y);
398 const double y3 = y*y2;
399 const double y4 = sqr(y2);
400 const double y5 = y2*y3;
401 const double y6 = sqr(y3);
402 const double lx22 = std::log(x22);
403
404 if (is_zero(x2, 0.01)) {
405 return 2 + d;
406 }
407
408 return
409 + 2*(1 + x22*(-1 + lx22))/y2
410 + d*(1 + x22*(2*lx22 - x22))/y3
411 + d2*(2 + x22*(3 + 6*lx22 + x22*(-6 + x22)))/(3*y4)
412 + d3*(3 + x22*(10 + 12*lx22 + x22*(-18 + x22*(6 - x22))))/(6*y5)
413 + d4*(12 + x22*(65 + 60*lx22 + x22*(-120 + x22*(60 + x22*(-20 + 3*x22)))))/(30*y6);
414}
415
417static double F9_0_x2(double /* x1 */, double x2) noexcept
418{
419 const double x22 = sqr(x2);
420
421 return 2*std::log(x22)/(-1 + x22);
422}
423
425static double F9_x1_x2(double x1, double x2) noexcept
426{
427 const double x22 = sqr(x2);
428 const double d = (x1 - x2)*(x1 + x2);
429 const double d2 = sqr(d);
430 const double d3 = d*d2;
431 const double y = (x2 - 1)*(x2 + 1);
432 const double y2 = sqr(y);
433 const double y3 = y*y2;
434 const double y4 = sqr(y2);
435 const double y5 = y2*y3;
436 const double lx22 = std::log(x22);
437
438 return
439 + 2*(y - lx22)/y2
440 + d*(1 + x22*(2*lx22 - x22))/(x22*y3)
441 + d2*(1 + x22*(-6 + x22*(3 - 6*lx22 + 2*x22)))/(3*x22*x22*y4)
442 + d3*(1 + x22*(-6 + x22*(18 + x22*(-10 + 12*lx22 - 3*x22))))/(6*x22*x22*x22*y5);
443}
444
445double F9(double x1, double x2) noexcept
446{
447 const double ax1 = std::fabs(x1);
448 const double ax2 = std::fabs(x2);
449
450 if (is_equal(ax1, 1., 0.01) && is_equal(ax2, 1., 0.01)) {
451 return F9_1_1(x1, x2);
452 }
453
454 if (is_equal(ax1, 1., 0.01)) {
455 return F9_1_x2(x1, x2);
456 }
457
458 if (is_equal(ax2, 1., 0.01)) {
459 return F9_1_x2(x2, x1);
460 }
461
462 if (is_zero(x1, 0.0001)) {
463 return F9_0_x2(x1, x2);
464 }
465
466 if (is_zero(x2, 0.0001)) {
467 return F9_0_x2(x2, x1);
468 }
469
470 if (is_equal(ax1, ax2, 0.00001)) {
471 return F9_x1_x2(x1, x2);
472 }
473
474 const double x12 = sqr(x1);
475 const double x22 = sqr(x2);
476
477 return 2/(x12 - x22)*(
478 + x12/(x12 - 1)*std::log(x12)
479 - x22/(x22 - 1)*std::log(x22));
480}
481
482double f(double r) noexcept
483{
484 return F5(r);
485}
486
487double g(double r) noexcept
488{
489 return F7(r);
490}
491
492double f1(double r) noexcept
493{
494 const double r2 = sqr(r);
495
496 if (is_zero(r, 0.01)) {
497 return 18./7.*r2;
498 }
499
500 const double d = r2 - 1;
501
502 if (is_equal(std::fabs(r), 1., 0.01)) {
503 return 1 + d*(4/7. + d*(-13/70. + d*(3/35. - 23/490.*d)));
504 }
505
506 const double d2 = sqr(d);
507 const double d3 = d*d2;
508
509 return 6*(r2 + 3)*r2/(7*d2) + 6*(r2 - 5)*sqr(r2)*std::log(r2)/(7*d3);
510}
511
512double f2(double r) noexcept
513{
514 const double r2 = sqr(r);
515
516 if (is_zero(r, 0.01)) {
517 return 22./9.*r2;
518 }
519
520 const double d = r2 - 1;
521
522 if (is_equal(std::fabs(r), 1., 0.01)) {
523 return 1 + d*(16/27. + d*(-49/270. + d*(11/135. - 83/1890.*d)));
524 }
525
526 const double d2 = sqr(d);
527 const double d3 = d*d2;
528
529 return 2*(r2 + 11)*r2/(9*d2) + 2*(5*r2 - 17)*sqr(r2)*std::log(r2)/(9*d3);
530}
531
532double f3(double r) noexcept
533{
534 if (is_zero(r, 1e-6)) {
535 return 4./3.;
536 }
537
538 const double r2 = sqr(r);
539 const double d = r2 - 1;
540
541 if (is_equal(std::fabs(r), 1., 0.01)) {
542 return 1 + d*(2/9. + d*(1/90. + d*(-2/45. + 29/630.*d)));
543 }
544
545 const double r4 = sqr(r2);
546 const double d2 = sqr(d);
547 const double d3 = d*d2;
548
549 return 2*(r4 + 9*r2 + 2)/(3*d2) + 2*(r4 - 7*r2 - 6)*r2*std::log(r2)/(3*d3);
550}
551
552double f4(double r) noexcept
553{
554 if (is_zero(r, 1e-6)) {
555 return 12./7.;
556 }
557
558 const double r2 = sqr(r);
559 const double d = r2 - 1;
560
561 if (is_equal(std::fabs(r), 1., 0.01)) {
562 return 1 + d*(2/21. + d*(13/210. + d*(-8/105. + 101/1470.*d)));
563 }
564
565 const double r4 = sqr(r2);
566 const double d2 = sqr(d);
567 const double d3 = d*d2;
568
569 return 2*(5*r4 + 25*r2 + 6)/(7*d2) + 2*(r4 - 19*r2 - 18)*r2*std::log(r2)/(7*d3);
570}
571
573static double f5_0_0(double r1, double r2) noexcept
574{
575 if (is_zero(r1, 1e-6) && is_zero(r2, 1e-6)) {
576 return 0.75;
577 }
578
579 if (std::abs(r1) > std::abs(r2)) {
580 std::swap(r1, r2);
581 }
582
583 const double r12 = sqr(r1);
584 const double r22 = sqr(r2);
585 const double r2lr2 = xlogx(r2);
586 const double lr2 = logx(r2);
587
588 // expansion of f5 in
589 // r1 up to (including) r1^2
590 // r2 up to (including) r1^3
591 return 0.75*(
592 + 1
593 + 2*r1*(r2 + r2lr2)
594 + 2*r22 + 2*r2*r2lr2
595 + r12*(2 + 2*lr2 + r2*(2*r2 + 6*r2lr2))
596 + r1*r22*(6*r2lr2 + 2*r2)
597 );
598}
599
601static double f5_1_1(double r1, double r2) noexcept
602{
603 const double d1 = r1 - 1;
604 const double d2 = r2 - 1;
605 const double d12 = sqr(d1);
606 const double d22 = sqr(d2);
607 const double d13 = d1*d12;
608 const double d23 = d2*d22;
609 const double d14 = sqr(d12);
610 const double d24 = sqr(d22);
611
612 return 1
613 + 3./8.*(d1 + d2)
614 + 1./40.*(d12 + d1*d2 + d22)
615 + 1./20.*(-d13 - d12*d2 - d1*d22 - d23)
616 + 1./280.*(9*(d14 + d13*d2 + d12*d22 + d1*d23 + d24));
617}
618
620static double f5_1_r2(double r1, double r2) noexcept
621{
622 if (is_zero(r2, 0.01)) {
623 const double d = r1 - 1;
624 return 0.75*(1 + d*(1./3. + d/6. + r2/3.));
625 }
626
627 const double d1 = r1 - 1;
628 const double d2 = r2 - 1;
629 const double d12 = sqr(d1);
630 const double d13 = d12*d1;
631 const double d14 = d13*d1;
632 const double d22 = sqr(d2);
633 const double d23 = d22*d2;
634 const double d24 = d23*d2;
635 const double d25 = d24*d2;
636 const double d26 = d25*d2;
637 const double d27 = d26*d2;
638 const double y = 1 + r2;
639 const double y2 = sqr(y);
640 const double r22 = sqr(r2);
641 const double lr22 = std::log(r22);
642
643 return
644 + (-3 + r2*(3 + r2*(6 + r2*(3*lr22 + r2*(-3 + (-3 + 3*lr22)*r2)))))/(4.*d23*y2)
645 + d1*(1 + r2*(-1 + r2*(-2 + r2*(8 + 3*lr22 + r2*(1 + (-7 + 3*lr22)*r2)))))/(4.*d24*y2)
646 + d12*(-1 + r2*(4 + r2*(-1 + r2*(4 + 6*lr22 + r2*(5 + (-8 + 6*lr22 - 3*r2)*r2)))))/(8.*d25*y2)
647 + d13*(-4 + r2*(17 + r2*(-4 + r2*(25 + 30*lr22 + r2*(20 + r2*(-41 + 30*lr22 + (-12 - r2)*r2))))))/(40.*d26*y2)
648 + d14*(-2 + r2*(9 + r2*(4 + r2*(33 + 30*lr22 + r22*(-33 + 30*lr22 + r2*(-4 + r2*(-9 + 2*r2)))))))/(40.*d27*y2);
649}
650
652static double f5_0_r2(double r1, double r2) noexcept
653{
654 const double r22 = sqr(r2);
655 const double lr22 = std::log(r22);
656
657 // expansion in terms of r1 around r1 = 0 up to maximum possible
658 // power such that no IR-divergent terms appear (e.g. log(r1))
659 const double res =
660 (1 + r22*(lr22 + (-1 + lr22)*r22)
661 + r1*(r1*(2 + lr22 + (-2 + lr22)*r22) + r2*(2 + lr22 + (-2 + lr22)*r22)))/sqr(-1 + r22);
662
663 return 0.75 * res;
664}
665
667static double f5_r1_r2(double r1, double r2) noexcept
668{
669 const double d = r1 - r2;
670 const double d2 = sqr(d);
671 const double d3 = d2*d;
672 const double r22 = sqr(r2);
673 const double y = r22 - 1;
674 const double y3 = sqr(y)*y;
675 const double y4 = y3*y;
676 const double y5 = y4*y;
677 const double y6 = y5*y;
678 const double lr22 = std::log(r22);
679
680 return 0.75*(
681 + (-1 + r22*(-5 - 3*lr22 + r22*(5 - 6*lr22 + (1 + lr22)*r22)))/y3
682 + d*r2*(11 + 3*lr22 + r22*(3 + 18*lr22 + r22*(-15 + 3*lr22 + r22)))/y4
683 + d2*(-17 - 3*lr22 + r22*(-116 - 75*lr22 + r22*(90 - 105*lr22 + r22*(44 - 9*lr22 - r22))))/(3.*y5)
684 + d3*(3 + r22*(273 + 90*lr22 + r22*(314 + 510*lr22 + r22*(-498 + 342*lr22 + r22*(-93 + 18*lr22 + r22)))))/(6.*r2*y6)
685 );
686}
687
688double f5(double r1, double r2) noexcept
689{
690 const double eps_zero = 1e-4;
691 const double eps_one = 1e-2;
692
693 if (is_zero(r1, eps_zero) && is_zero(r2, eps_zero)) {
694 return f5_0_0(r1, r2);
695 }
696
697 if (is_equal(r1, 1., eps_one) && is_equal(r2, 1., eps_one)) {
698 return f5_1_1(r1, r2);
699 }
700
701 if (is_equal(r1, -1., eps_one) && is_equal(r2, -1., eps_one)) {
702 return f5_1_1(-r1, -r2);
703 }
704
705 if (is_equal(r1, 1., eps_one)) {
706 return f5_1_r2(r1, r2);
707 }
708
709 if (is_equal(r2, 1., 0.01)) {
710 return f5_1_r2(r2, r1);
711 }
712
713 if (is_zero(r1, eps_zero)) {
714 return f5_0_r2(r1, r2);
715 }
716
717 if (is_zero(r2, eps_zero)) {
718 return f5_0_r2(r2, r1);
719 }
720
721 if (is_equal(r1, r2, 0.0001)) {
722 return f5_r1_r2(r2, r1);
723 }
724
725 const double r12 = sqr(r1);
726 const double r22 = sqr(r2);
727
728 const double result
729 = (1 + sqr(r1 + r2) - r12*r22)/((r12 - 1)*(r22 - 1))
730 + (cube(r1)*(r12 + 1)*std::log(r12))/(sqr(r12 - 1)*(r1 - r2))
731 - (cube(r2)*(r22 + 1)*std::log(r22))/((r1 - r2)*sqr(r22 - 1));
732
733 return 0.75 * result;
734}
735
737static double f6_0_0(double r1, double r2) noexcept
738{
739 if (is_zero(r1, 1e-10) && is_zero(r2, 1e-10)) {
740 return 0.;
741 }
742
743 const double r22 = sqr(r2);
744 const double lr22 = std::log(r22);
745
746 const double res =
747 r22*(1 + (1 + lr22)*r22)
748 + r1*(r2*(1 + (1 + lr22)*r22)
749 + r1*(1 + r22*(1 + lr22 + (1 + 2*lr22)*r22)
750 + r1*(r2*(1 + lr22 + (1 + 2*lr22)*r22)
751 + r1*(1 + lr22 + r22*(1 + 2*lr22 + (1 + 3*lr22)*r22)))));
752
753 return 6./7.*res;
754}
755
757static double f6_1_1(double r1, double r2) noexcept
758{
759 const double d1 = r1 - 1;
760 const double d2 = r2 - 1;
761
762 return
763 1 + d2*(4./7 + d2*(-2./35 + (-1./70 + 9.*d2/490)*d2)) +
764 d1*(4./7 + d2*(-2./35 + d2*(-1./70 + (9./490 - 3.*d2/245)*d2)) +
765 d1*(-2./35 + d2*(-1./70 + d2*(9./490 + (-3./245 + d2/147)*d2)) +
766 d1*(-1./70 + d2*(9./490 + d2*(-3./245 + (1./147 - d2/294)*d2)) +
767 d1*(9./490 + d2*(-3./245 + d2*(1./147 + (-1./294 + 5.*d2/3234)*d2))))));
768}
769
771static double f6_0_1(double r1, double r2) noexcept
772{
773 const double d2 = r2 - 1;
774 const double d22 = sqr(d2);
775
776 return
777 + 3./7 + d2*(4./7 + (-2./35 + 3.*d2/70)*d22)
778 + r1*(3./7 + d2*(1./7 + d2*(-1./7 + (3./35 - 3.*d2/70)*d2))
779 + r1*(3./7 + d2*(-2./7 + d2*(1./7 + (-2./35 + d2/70)*d2))
780 + r1*(-3./7 + d2*(1./7 + (-2./35 + d2/14)*d22)
781 + r1*(-3./7 + d2*(4./7 + d2*(-4./7 + (18./35 - 31.*d2/70)*d2))))));
782}
783
785static double f6_1_r2(double r1, double r2) noexcept
786{
787 if (is_zero(r2, 1e-4)) {
788 return f6_0_1(r2, r1);
789 }
790
791 const double r22 = sqr(r2);
792 const double lr22 = std::log(r22);
793 const double y = 1 + r2;
794 const double y2 = sqr(y);
795 const double z = r2 - 1;
796 const double z2 = sqr(z);
797 const double z3 = z2*z;
798 const double z4 = z3*z;
799 const double z5 = z4*z;
800 const double z6 = z5*z;
801 const double z7 = z6*z;
802 const double d = r1 - 1;
803 const double d2 = sqr(d);
804 const double d3 = d2*d;
805 const double d4 = d3*d;
806
807 return
808 (-3 + r22*(6 + r2*(6 + r2*(-3 + r2*(-6 + 6*lr22)))))/(7.*z3*y2)
809 + d*(4 + r2*(-7 + r2*(-8 + r2*(20 + r2*(4 + r2*(-13 + 6*lr22))))))/(7.*z4*y2)
810 + d2*r2*(1 + r2*(-4 + r2*(4 + r2*(8 + r2*(-5 - 4*r2 + 6*lr22)))))/(7.*z5*y2)
811 + d3*(-2 + r2*(11 + r2*(-22 + r2*(10 + r2*(50 + r2*(-23 + r2*(-26 + 2*r2) + 30*lr22))))))/(35.*z6*y2)
812 + d4*(-3 + r2*(18 + r2*(-40 + r2*(24 + r2*(90 + r2*(-42 + r2*(-48 + r22) + 60*lr22))))))/(70.*z7*y2);
813}
814
816static double f6_0_r2(double r1, double r2) noexcept
817{
818 const double r22 = sqr(r2);
819 const double lr22 = std::log(r22);
820
821 return
822 6./7.*(r22*(1 + (-1 + lr22)*r22)
823 + r1*(r2*(1 + (-1 + lr22)*r22)
824 + r1*(1 + (-1 + lr22)*r22
825 + r1*(r1*(1 + lr22 - r22) + r2*(1 + lr22 - r22)))))/sqr(-1 + r22);
826}
827
828// f6(r1,r2) in the limit r1 -> r2
829static double f6_r1_r2(double r1, double r2) noexcept
830{
831 const double d = r1 - r2;
832 const double d2 = sqr(d);
833 const double d3 = d2*d;
834 const double d4 = d3*d;
835 const double r22 = sqr(r2);
836 const double y = r22 - 1;
837 const double y2 = sqr(y);
838 const double y3 = y2*y;
839 const double y4 = y3*y;
840 const double y5 = y4*y;
841 const double y6 = y5*y;
842 const double y7 = y6*y;
843 const double lr22 = std::log(r22);
844
845 return
846 6./7. * (
847 r22*(-3 + r22*(2 - 5*lr22 + (1 + lr22)*r22))/y3
848 + d*r2*(3 + r22*(7 + 10*lr22 + r22*(-11 + 2*lr22 + r22)))/y4
849 + d2*(-3 + r22*(-62 - 30*lr22 + r22*(36 - 60*lr22 + r22*(30 - 6*lr22 - r22))))/(3.*y5)
850 + d3*r2*(107 + 30*lr22 + r22*(206 + 240*lr22 + r22*(-252 + 198*lr22 + r22*(-62 + 12*lr22 + r22))))/(6.*y6)
851 + d4*(-167 - 30*lr22 + r22*(-2215 - 1050*lr22 + r22*(-510 - 3150*lr22 + r22*(2570 - 1470*lr22 + r22*(325 - 60*lr22 - 3*r22)))))/(30.*y7)
852 );
853}
854
855double f6(double r1, double r2) noexcept
856{
857 const double eps_zero = 1e-4;
858
859 if (is_zero(r1, eps_zero) && is_zero(r2, eps_zero)) {
860 return f6_0_0(r1, r2);
861 }
862
863 if (is_equal(r1, 1., 0.02) && is_equal(r2, 1., 0.02)) {
864 return f6_1_1(r1, r2);
865 }
866
867 if (is_equal(r1, -1., 0.02) && is_equal(r2, -1., 0.02)) {
868 return f6_1_1(-r1, -r2);
869 }
870
871 if (is_equal(r1, 1., 0.001)) {
872 return f6_1_r2(r1, r2);
873 }
874
875 if (is_equal(r2, 1., 0.001)) {
876 return f6_1_r2(r2, r1);
877 }
878
879 if (is_zero(r1, eps_zero)) {
880 return f6_0_r2(r1, r2);
881 }
882
883 if (is_zero(r2, eps_zero)) {
884 return f6_0_r2(r2, r1);
885 }
886
887 if (is_equal(r1, r2, 1e-4)) {
888 return f6_r1_r2(r2, r1);
889 }
890
891 const double r12 = sqr(r1);
892 const double r22 = sqr(r2);
893
894 const double result
895 = (r12 + r22 + r1*r2 - r12*r22)/((r12 - 1)*(r22 - 1))
896 + (pow5(r1)*std::log(r12))/(sqr(r12 - 1)*(r1 - r2))
897 - (pow5(r2)*std::log(r22))/((r1 - r2)*sqr(r22 - 1));
898
899 return 6./7. * result;
900}
901
903static double f7_0_0(double r1, double r2) noexcept
904{
905 if (is_zero(r1, 1e-6) && is_zero(r2, 1e-6)) {
906 return 6.;
907 }
908
909 if (std::abs(r1) > std::abs(r2)) {
910 std::swap(r1, r2);
911 }
912
913 const double r22 = sqr(r2);
914 const double lr22 = std::log(r22);
915
916 const double res =
917 1 + (1 + lr22)*r22
918 + r1*((1 + lr22)*r2 + r1*(1 + lr22 + (1 + 2*lr22)*r22));
919
920 return 6*res;
921}
922
924static double f7_1_1(double r1, double r2) noexcept
925{
926 const double d1 = r1 - 1;
927 const double d2 = r2 - 1;
928
929 return
930 1 + d2*(-1 + d2*(3./5 + (-3./10 + 9.*d2/70)*d2))
931 + d1*(-1 + d2*(3./5 + d2*(-3./10 + (9./70 - 3.*d2/70)*d2))
932 + d1*(3./5 + d2*(-3./10 + d2*(9./70 + (-3./70 + d2/210)*d2))
933 + d1*(-3./10 + d2*(9./70 + d2*(-3./70 + (1./210 + d2/105)*d2))
934 + d1*(9./70 + d2*(-3./70 + d2*(1./210 + (1./105 - d2/77)*d2))))));
935}
936
938static double f7_0_1(double r1, double r2) noexcept
939{
940 const double d = r2 - 1;
941 const double r12 = sqr(r1);
942
943 return 3 + r1*(-4 - 3*r1 + r2)
944 + d*(-2 + 4*r12
945 + d*(1 - 4*r12
946 + d*(-0.4 + r1*(-0.4 + (18*r1)/5.)
947 + d*(0.1 + (0.5 - (31*r1)/10.)*r1))));
948}
949
951static double f7_1_r2(double r1, double r2) noexcept
952{
953 if (is_zero(r2, 0.0001)) {
954 return f7_0_1(r2, r1);
955 }
956
957 const double d = r1 - 1;
958 const double d2 = sqr(d);
959 const double d3 = d2*d;
960 const double d4 = d3*d;
961 const double y = r2 - 1;
962 const double y2 = sqr(y);
963 const double y3 = y2*y;
964 const double y4 = y3*y;
965 const double y5 = y4*y;
966 const double y6 = y5*y;
967 const double y7 = y6*y;
968 const double z = 1 + r2;
969 const double z2 = sqr(z);
970 const double r22 = sqr(r2);
971 const double lr22 = std::log(r22);
972
973 return
974 (-3 + r2*(6 + r2*(6 + (-6 + 6*lr22 - 3*r2)*r2)))/(y3*z2)
975 + d*(-2 + r2*(5 + r2*(4 + r2*(-4 + 6*lr22 + (-2 - r2)*r2))))/(y4*z2)
976 + d2*(-1 + r2*(3 + r2*(3 + r2*(6*lr22 + r2*(-3 + (-3 + r2)*r2)))))/(y5*z2)
977 + d3*(-2 + r2*(6 + r2*(18 + r2*(15 + 30*lr22 + r2*(-30 + r2*(-18 + (14 - 3*r2)*r2))))))/(5.*y6*z2)
978 + d4*(-1 + r22*(48 + r2*(42 + 60*lr22 + r2*(-90 + r2*(-24 + r2*(40 + r2*(-18 + 3*r2)))))))/(10.*y7*z2);
979}
980
982static double f7_0_r2(double r1, double r2) noexcept
983{
984 const double r12 = sqr(r1);
985 const double r22 = sqr(r2);
986 const double lr22 = std::log(r22);
987 const double r12lr12 = xlogx(r12);
988
989 return
990 6*(
991 + r22*(1 + (-1 + lr22)*r22)
992 + r1*(r2*(-r12lr12 + r22*(1 + lr22 + 2*r12lr12 + (-1 - r12lr12)*r22))
993 + r1*(-r12lr12 + r22*(1 + lr22 + 2*r12lr12 + (-1 - r12lr12)*r22)
994 + r1*(r1*(lr22 + r22*(1 - r22)) + r2*(lr22 + r22*(1 - r22)))))
995 )/(r22*sqr(-1 + r22));
996}
997
999static double f7_r1_r2(double r1, double r2) noexcept
1000{
1001 const double d = r1 - r2;
1002 const double d2 = sqr(d);
1003 const double d3 = d2*d;
1004 const double d4 = d3*d;
1005 const double r22 = sqr(r2);
1006 const double y = r22 - 1;
1007 const double y2 = sqr(y);
1008 const double y3 = y2*y;
1009 const double y4 = y3*y;
1010 const double y5 = y4*y;
1011 const double y6 = y5*y;
1012 const double y7 = y6*y;
1013 const double lr22 = std::log(r22);
1014
1015 const double res =
1016 (-1 + r22*(-2 - 3*lr22 + (3 - lr22)*r22))/y3
1017 + d*r2*(8 + 3*lr22 + r22*(-4 + 8*lr22 + (-4 + lr22)*r22))/y4
1018 + d2*(-14 - 3*lr22 + r22*(-54 - 45*lr22 + r22*(54 - 45*lr22 + (14 - 3*lr22)*r22)))/(3.*y5)
1019 + d3*(3 + r22*(166 + 60*lr22 + r22*(108 + 270*lr22 + r22*(-246 + 144*lr22 + (-31 + 6*lr22)*r22))))/(6.*r2*y6)
1020 + d4*(3 + r22*(-325 - 60*lr22 + r22*(-2570 - 1470*lr22 + r22*(510 - 3150*lr22 + r22*(2215 - 1050*lr22 + (167 - 30*lr22)*r22)))))/(30.*r22*y7);
1021
1022 return 6*res;
1023}
1024
1025double f7(double r1, double r2) noexcept
1026{
1027 const double eps_zero = 1e-4;
1028 const double eps_one = 2e-2;
1029
1030 if (is_zero(r1, eps_zero) && is_zero(r2, eps_zero)) {
1031 return f7_0_0(r1, r2);
1032 }
1033
1034 if (is_equal(r1, 1., eps_one) && is_equal(r2, 1., eps_one)) {
1035 return f7_1_1(r1, r2);
1036 }
1037
1038 if (is_equal(r1, -1., eps_one) && is_equal(r2, -1., eps_one)) {
1039 return f7_1_1(-r1, -r2);
1040 }
1041
1042 if (is_equal(r1, 1., eps_one)) {
1043 return f7_1_r2(r1, r2);
1044 }
1045
1046 if (is_equal(r2, 1., eps_one)) {
1047 return f7_1_r2(r2, r1);
1048 }
1049
1050 if (is_zero(r1, eps_zero)) {
1051 return f7_0_r2(r1, r2);
1052 }
1053
1054 if (is_zero(r2, eps_zero)) {
1055 return f7_0_r2(r2, r1);
1056 }
1057
1058 if (is_equal(r1, r2, 0.0001)) {
1059 return f7_r1_r2(r2, r1);
1060 }
1061
1062 const double r12 = sqr(r1);
1063 const double r22 = sqr(r2);
1064
1065 const double result
1066 = (1 + r1*r2)/((r12 - 1)*(r22 - 1))
1067 + (cube(r1)*std::log(r12))/(sqr(r12 - 1)*(r1 - r2))
1068 - (cube(r2)*std::log(r22))/((r1 - r2)*sqr(r22 - 1));
1069
1070 return 6. * result;
1071}
1072
1074static double f8_0_0(double r1, double r2) noexcept
1075{
1076 if (is_zero(r1, 1e-10) && is_zero(r2, 1e-10)) {
1077 return 0.;
1078 }
1079
1080 if (std::abs(r1) > std::abs(r2)) {
1081 std::swap(r1, r2);
1082 }
1083
1084 const double r22 = sqr(r2);
1085 const double lr22 = logx(r22);
1086 const double r2lr22 = r2*lr22;
1087 const double r22lr22 = r2*r2lr22;
1088
1089 if (is_zero(r1, 1e-8) && is_zero(r2, 1e-8)) {
1090 return
1091 (3*r2)/2.
1092 + r1*(1.5 + (3*r22)/2. + (3*r22lr22)/2.
1093 + r1*((3*r2)/2. + (3*r2lr22)/2.));
1094 }
1095
1096 return
1097 r2*(1.5 + (3*r22)/2. + (3*r22lr22)/2.)
1098 + r1*(1.5 + (3*r22)/2. + (3*r22lr22)/2.
1099 + r1*(r2*(1.5 + (3*r22)/2. + 3*r22lr22)
1100 + r1*(1.5 + (3*lr22)/2. + (3*r22)/2. + 3*r22lr22) + (3*r2lr22)/2.));
1101}
1102
1104static double f8_1_1(double r1, double r2) noexcept
1105{
1106 const double d1 = r1 - 1;
1107 const double d2 = r2 - 1;
1108 const double d22 = sqr(d2);
1109
1110 return
1111 1 + d22*(-1./10 + (3./40 - 3.*d2/70)*d2)
1112 + d1*(d2*(-1./10 + d2*(3./40 + (-3./70 + 3.*d2/140)*d2))
1113 + d1*(-1./10 + d2*(3./40 + d2*(-3./70 + (3./140 - d2/105)*d2))
1114 + d1*(3./40 + d2*(-3./70 + d2*(3./140 + (-1./105 + d2/280)*d2))
1115 + d1*(-3./70 + d2*(3./140 + d2*(-1./105 + (1./280 - d2/1155)*d2))))));
1116}
1117
1119static double f8_0_1(double r1, double r2) noexcept
1120{
1121 const double r12 = sqr(r1);
1122 const double d2 = r2 - 1;
1123
1124 return 0.75 + r1*(0.75 + r1*(-0.75 + r1*(-1.75 + r2)))
1125 + d2*(0.25 + (-0.5 + r1/4.)*r1
1126 + d2*(-0.25 + r1*(0.25 - r12)
1127 + d2*(0.15 + r1*(-0.1 + (-0.1 + (9*r1)/10.)*r1))));
1128}
1129
1131static double f8_1_r2(double r1, double r2) noexcept
1132{
1133 if (is_zero(r2, 1e-4)) {
1134 return f8_0_1(r2, r1);
1135 }
1136
1137 const double d1 = r1 - 1;
1138 const double d12 = sqr(d1);
1139 const double d13 = d12*d1;
1140 const double d14 = d13*d1;
1141 const double y = 1 + r2;
1142 const double y2 = sqr(y);
1143 const double d2 = r2 - 1;
1144 const double d22 = sqr(d2);
1145 const double d23 = d22*d2;
1146 const double d24 = d23*d2;
1147 const double d25 = d24*d2;
1148 const double d26 = d25*d2;
1149 const double d27 = d26*d2;
1150 const double r22 = sqr(r2);
1151 const double lr22 = std::log(r22);
1152
1153 return
1154 (-3 + r22*(12 + (-9 + 6*lr22)*r22))/(4.*d23*y2)
1155 + d1*(1 + r2*(-4 + r2*(4 + r2*(8 + (-5 + 6*lr22 - 4*r2)*r2))))/(4.*d24*y2)
1156 + d12*(1 + r2*(-4 + r2*(4 + r2*(8 + (-5 + 6*lr22 - 4*r2)*r2))))/(4.*d25*y2)
1157 + d13*(3 + r2*(-14 + r2*(18 + r2*(30 + r2*(-15 + 30*lr22 + r2*(-18 + r2*(-6 + 2*r2)))))))/(20.*d26*y2)
1158 + d14*(3 + r2*(-16 + r2*(24 + r2*(48 + r2*(60*lr22 + r2*(-48 + r2*(-24 + (16 - 3*r2)*r2)))))))/(40.*d27*y2);
1159}
1160
1162static double f8_0_r2(double r1, double r2) noexcept
1163{
1164 const double r12 = sqr(r1);
1165 const double r22 = sqr(r2);
1166 const double lr22 = std::log(r22);
1167 const double r12lr12 = xlogx(r12);
1168
1169 return
1170 (r22*(3 + (-3 + 3*lr22)*r22)
1171 + r1*(r2*(3 + (-3 + 3*lr22)*r22)
1172 + r1*(-3*r12lr12 + r22*(3 + 3*lr22 + 6*r12lr12 + (-3 - 3*r12lr12)*r22)
1173 + r1*(r2*(3 + 3*lr22 - 3*r22) + r1*(3*lr22 + r22*(3 - 3*r22))))))/(2*r2*sqr(-1 + r22));
1174}
1175
1177static double f8_r1_r2(double r1, double r2) noexcept
1178{
1179 const double d = r1 - r2;
1180 const double d2 = sqr(d);
1181 const double d3 = d2*d;
1182 const double d4 = d3*d;
1183 const double r22 = sqr(r2);
1184 const double y = r22 - 1;
1185 const double y2 = sqr(y);
1186 const double y3 = y2*y;
1187 const double y4 = y3*y;
1188 const double y5 = y4*y;
1189 const double y6 = y5*y;
1190 const double y7 = y6*y;
1191 const double lr22 = std::log(r22);
1192
1193 return
1194 (r2*(-3 + r22*(-6*lr22 + 3*r22)))/y3
1195 + d*(3 + r22*(27 + 18*lr22 + r22*(-27 + 18*lr22 - 3*r22)))/(2.*y4)
1196 + d2*r2*(-19 - 6*lr22 + r22*(-9 - 30*lr22 + r22*(27 - 12*lr22 + r22)))/y5
1197 + d3*(31 + 6*lr22 + r22*(246 + 144*lr22 + r22*(-108 + 270*lr22 + r22*(-166 + 60*lr22 - 3*r22))))/(4.*y6)
1198 + d4*(-3 + r22*(-285 - 90*lr22 + r22*(-570 - 630*lr22 + r22*(570 - 630*lr22 + r22*(285 - 90*lr22 + 3*r22)))))/(5.*r2*y7);
1199}
1200
1201double f8(double r1, double r2) noexcept
1202{
1203 const double eps_zero = 5e-5;
1204 const double eps_one = 1e-2;
1205
1206 if (is_zero(r1, eps_zero) && is_zero(r2, eps_zero)) {
1207 return f8_0_0(r1, r2);
1208 }
1209
1210 if (is_equal(r1, 1., eps_one) && is_equal(r2, 1., eps_one)) {
1211 return f8_1_1(r1, r2);
1212 }
1213
1214 if (is_equal(r1, -1., eps_one) && is_equal(r2, -1., eps_one)) {
1215 return -1.;
1216 }
1217
1218 if (is_equal(r1, 1., eps_one)) {
1219 return f8_1_r2(r1, r2);
1220 }
1221
1222 if (is_equal(r2, 1., eps_one)) {
1223 return f8_1_r2(r2, r1);
1224 }
1225
1226 if (is_zero(r1, eps_zero)) {
1227 return f8_0_r2(r1, r2);
1228 }
1229
1230 if (is_zero(r2, eps_zero)) {
1231 return f8_0_r2(r2, r1);
1232 }
1233
1234 if (is_equal(r1, r2, 0.0001)) {
1235 return f8_r1_r2(r2, r1);
1236 }
1237
1238 const double r12 = sqr(r1);
1239 const double r22 = sqr(r2);
1240
1241 const double result
1242 = (r1 + r2)/((r12 - 1)*(r22 - 1))
1243 + (quad(r1)*std::log(r12))/(sqr(r12 - 1)*(r1 - r2))
1244 - (quad(r2)*std::log(r22))/((r1 - r2)*sqr(r22 - 1));
1245
1246 return 1.5 * result;
1247}
1248
1249double fth1(double y) noexcept
1250{
1251 const double eps = 10.*std::numeric_limits<double>::epsilon();
1252
1253 if (is_zero(y, eps)) {
1254 return 0.;
1255 }
1256
1257 if (is_equal(std::abs(y), 1.0, eps)) {
1258 return -1.;
1259 }
1260
1261 if (!is_zero(y, eps) && !is_equal(std::abs(y), 1.0, eps)) {
1262 const double y2 = sqr(y);
1263
1264 return y2*std::log(y2) / (1. - y2);
1265 }
1266
1267 return 0.;
1268}
1269
1270double fth2(double y) noexcept
1271{
1272 const double eps = 10.*std::numeric_limits<double>::epsilon();
1273
1274 if (is_zero(y, eps)) {
1275 return 0.;
1276 }
1277
1278 if (is_equal(std::abs(y), 1.0, eps)) {
1279 return 0.5;
1280 }
1281
1282 if (!is_zero(y, eps) && !is_equal(std::abs(y), 1.0, eps)) {
1283 const double y2 = sqr(y);
1284
1285 return (1. + y2*std::log(y2) / (1. - y2)) / (1 - y2);
1286 }
1287
1288 return 0.;
1289}
1290
1291double fth3(double y) noexcept
1292{
1293 const double eps = 10.*std::numeric_limits<double>::epsilon();
1294 const double z2 = 1.644934066848226;
1295
1296 if (is_zero(y, eps)) {
1297 return z2;
1298 }
1299
1300 if (is_equal(std::abs(y), 1.0, eps)) {
1301 return -9./4.;
1302 }
1303
1304 if (!is_zero(y, eps) && !is_equal(std::abs(y), 1.0, eps)) {
1305 const double y2 = sqr(y);
1306 const double y4 = sqr(y2);
1307 const double ly = std::log(y2);
1308
1309 return (-1. + 2*y2 + 2*y4)
1310 *(-z2 - y2*ly + ly*std::log(1. - y2) + Li2(y2))
1311 / sqr(1 - y2);
1312 }
1313
1314 return 0.;
1315}
1316
1318double D1F1(double x) noexcept
1319{
1320 if (is_equal(x, 1., 0.0001)) {
1321 return (5 - 8*x + 3*sqr(x))/6.;
1322 }
1323
1324 return (2*(-1 + sqr(x)) - std::log(sqr(x))*(1 + sqr(x)))/sqr(-1 + sqr(x));
1325}
1326
1328double D1F2(double x) noexcept
1329{
1330 if (is_equal(x, 1., 0.001)) {
1331 return (133 - 326*x - 138*cube(x) + 25*quad(x) + 306*sqr(x))/35.;
1332 }
1333
1334 return (-12*x*(3 - 3*quad(x) + std::log(sqr(x))*(1 + quad(x) + 4*sqr(x)))) /
1335 quad(-1 + sqr(x));
1336}
1337
1339double D1F3(double x) noexcept
1340{
1341 if (is_equal(x, 1., 0.0001)) {
1342 return (1541 - 2048*x - 256*cube(x) + 15*quad(x) + 1098*sqr(x))/630.;
1343 }
1344
1345 return (-2*(7 - 13*quad(x) + 6*sqr(x) + std::log(sqr(x))*(1 + 4*quad(x)
1346 + 15*sqr(x))))/(3.*cube(-1 + sqr(x)));
1347}
1348
1350double D1F4(double x) noexcept
1351{
1352 if (is_equal(x, 1., 0.0001)) {
1353 return -0.3333333333333333 - (2*cube(-1 + x))/3. + (11*quad(-1 + x))/14.
1354 + (2*sqr(-1 + x))/5.;
1355 }
1356
1357 return (-2*(-3 + quad(x) + 2*sqr(x)) + std::log(sqr(x))*(2 + 6*sqr(x))) /
1358 cube(-1 + sqr(x));
1359}
1360
1362double D1F5(double x) noexcept
1363{
1364 if (is_equal(x, 1., 0.001)) {
1365 return (3*(70 - 176*x - 80*cube(x) + 15*quad(x) + 171*sqr(x)))/70.;
1366 }
1367
1368 return (-3*(-1 + pow6(x) + 9*quad(x) - 9*sqr(x) - 6*std::log(sqr(x))*(quad(x)
1369 + sqr(x))))/quad(-1 + sqr(x));
1370}
1371
1373double D1F6(double x) noexcept
1374{
1375 if (is_equal(x, 1., 0.0001)) {
1376 return (204 - 11*x + 87*cube(x) - 20*quad(x) - 120*sqr(x))/210.;
1377 }
1378
1379 return (x*(3 + 2*std::log(sqr(x)) + quad(x) - 4*sqr(x)))/cube(-1 + sqr(x));
1380}
1381
1383double D1F7(double x) noexcept
1384{
1385 if (is_equal(x, 1., 0.001)) {
1386 return (-3*(-14 - 80*x - 51*cube(x) + 10*quad(x) + 100*sqr(x)))/35.;
1387 }
1388
1389 return (6*x*(2 + pow6(x) - 6*quad(x) + 3*sqr(x)
1390 + 6*std::log(sqr(x))*sqr(x)))/quad(-1 + sqr(x));
1391}
1392
1394double D1f(double x) noexcept
1395{
1396 if (is_equal(x, 1., 0.001)) {
1397 return (3*(70 - 176*x - 80*cube(x) + 15*quad(x) + 171*sqr(x)))/70.;
1398 }
1399
1400 return (-3*(-1 + pow6(x) + 9*quad(x) - 9*sqr(x) - 6*std::log(sqr(x))*(quad(x)
1401 + sqr(x))))/quad(-1 + sqr(x));
1402}
1403
1405double D1g(double x) noexcept
1406{
1407 if (is_equal(x, 1., 0.001)) {
1408 return (-3*(-14 - 80*x - 51*cube(x) + 10*quad(x) + 100*sqr(x)))/35.;
1409 }
1410
1411 return (6*x*(2 + pow6(x) - 6*quad(x) + 3*sqr(x)
1412 + 6*std::log(sqr(x))*sqr(x)))/quad(-1 + sqr(x));
1413}
1414
1416double D1f1(double x) noexcept
1417{
1418 if (is_equal(x, 1., 0.01)) {
1419 return (-2*(-71 - 315*x - 225*cube(x) + 45*quad(x) + 426*sqr(x)))/245.;
1420 }
1421
1422 return (12*x*(3 + pow6(x) - 11*quad(x) + 7*sqr(x)
1423 + 2*std::log(sqr(x))*sqr(x)*(5 + sqr(x))))/(7.*quad(-1 + sqr(x)));
1424}
1425
1427double D1f2(double x) noexcept
1428{
1429 if (is_equal(x, 1., 0.01)) {
1430 return (-2*(-239 - 1275*x - 837*cube(x) + 165*quad(x) + 1626*sqr(x)))/945.;
1431 }
1432
1433 return (4*x*(11 + 5*pow6(x) - 35*quad(x) + 19*sqr(x)
1434 + 2*std::log(sqr(x))*sqr(x)*(17 + sqr(x))))/(9.*quad(-1 + sqr(x)));
1435}
1436
1438double D1f3(double x) noexcept
1439{
1440 if (is_equal(x, 1., 0.001)) {
1441 return (-2*(386 - 1143*x - 495*cube(x) + 90*quad(x) + 1092*sqr(x)))/315.;
1442 }
1443
1444 return (4*x*(19 + pow6(x) - 19*quad(x) - sqr(x)
1445 + std::log(sqr(x))*(6 + 4*quad(x) + 26*sqr(x))))/(3.*quad(-1 + sqr(x)));
1446}
1447
1449double D1f4(double x) noexcept
1450{
1451 if (is_equal(x, 1., 0.001)) {
1452 return (-2*(1184 - 3099*x - 1323*cube(x) + 240*quad(x) + 2928*sqr(x)))/735.;
1453 }
1454
1455 return (4*x*(55 + pow6(x) - 55*quad(x) - sqr(x)
1456 + 2*std::log(sqr(x))*(9 + 8*quad(x) + 37*sqr(x))))/(7.*quad(-1 + sqr(x)));
1457}
1458
1460double D10f5(double x, double y) noexcept
1461{
1462 if (is_equal(x, 1., 0.001) && is_equal(y, 1., 0.001))
1463 return (-117 + 306*y - 91*sqr(y) - 3*sqr(x)*(55 - 36*y + 9*sqr(y))
1464 + x*(450 - 344*y + 90*sqr(y)))/560.;
1465
1466 if (is_equal(x, 1., 0.001))
1467 return (30*cube(y)*std::log(sqr(y))*(1 + sqr(y))*(6 + 2*x*(-4 + y) - 4*y +
1468 3*sqr(x) + sqr(y)) - (-1 + sqr(y))*(-12 + 71*y + 306*cube(y) +
1469 43*pow5(y) - 164*quad(y) + 3*sqr(x)*(-4 + 17*y + 42*cube(y) + pow5(y)
1470 + 12*quad(y) - 8*sqr(y)) - 64*sqr(y) + 2*x*(17 - 76*y - 176*cube(y) +
1471 12*pow5(y) - 11*quad(y) + 54*sqr(y))))/(40.*pow6(-1 + y)*sqr(1 + y));
1472
1473 if (is_equal(y, 1., 0.001))
1474 return (-6*std::log(sqr(x))*sqr(x)*(y*pow5(x) + 3*cube(x)*(-5 + sqr(y)) + 3*(3 -
1475 3*y + sqr(y)) + quad(x)*(6 - 3*y + 2*sqr(y)) + x*(-3 - 5*y +
1476 3*sqr(y)) + sqr(x)*(23 - 24*y + 9*sqr(y))) + (-1 + sqr(x))*(3 - 4*y +
1477 12*pow6(x) + sqr(y) + x*(1 - 4*y + 3*sqr(y)) + pow5(x)*(-35 + 20*y +
1478 3*sqr(y)) + 2*sqr(x)*(69 - 68*y + 23*sqr(y)) + cube(x)*(-74 - 40*y +
1479 30*sqr(y)) + quad(x)*(75 - 76*y + 37*sqr(y))))/(8.*cube(1 +
1480 x)*pow6(-1 + x));
1481
1482 if (is_equal(x, y, 0.001))
1483 return (6*y*std::log(sqr(y))*(y + 9*cube(y) + 205*pow5(y) + 247*pow7(y) +
1484 18*pow9(y) - 2*x*(-1 + 203*pow6(y) + 12*pow8(y) + 245*quad(y) +
1485 21*sqr(y)) + 3*y*sqr(x)*(15 + 3*pow6(y) + 57*quad(y) + 85*sqr(y))) +
1486 (-1 + sqr(y))*(3*sqr(x)*(-3 - 92*pow6(y) + pow8(y) - 590*quad(y) -
1487 276*sqr(y)) + (-7 - 548*pow6(y) + 13*pow8(y) - 2022*quad(y) -
1488 316*sqr(y))*sqr(y) + 2*x*y*(-25 + 364*pow6(y) - 5*pow8(y) +
1489 1950*quad(y) + 596*sqr(y))))/(8.*y*pow6(-1 + sqr(y)));
1490
1491 return (3*((-1 + sqr(x))*(-2*(cube(y) + cube(y)*quad(x) + 2*y*sqr(x)*(-2 +
1492 sqr(y)) - 3*cube(x)*(-1 + sqr(y)) - pow5(x)*(-1 + sqr(y)))*(-1 +
1493 sqr(y)) + cube(y)*std::log(sqr(y))*(1 + sqr(y))*sqr(-1 + sqr(x))) -
1494 std::log(sqr(x))*sqr(x)*(2*x - 3*y + 6*cube(x) + y*quad(x) -
1495 6*y*sqr(x))*sqr(-1 + sqr(y))))/(4.*cube(-1 + sqr(x))*sqr(x -
1496 y)*sqr(-1 + sqr(y)));
1497}
1498
1500double D01f5(double x, double y) noexcept
1501{
1502 if (is_equal(x, 1., 0.001) && is_equal(y, 1., 0.001))
1503 return (sqr(x)*(-91 + 90*y - 27*sqr(y)) + 2*x*(153 - 172*y + 54*sqr(y))
1504 - 3*(39 - 150*y + 55*sqr(y)))/560.;
1505
1506 if (is_equal(x, 1., 0.001))
1507 return (-6*std::log(sqr(y))*sqr(y)*(9 - 3*y - 15*cube(y) + 6*quad(y) + x*(-9 -
1508 5*y + pow5(y) - 3*quad(y) - 24*sqr(y)) + 23*sqr(y) + sqr(x)*(3 + 3*y
1509 + 3*cube(y) + 2*quad(y) + 9*sqr(y))) + (-1 + sqr(y))*(3 + y -
1510 74*cube(y) - 35*pow5(y) + 12*pow6(y) + 75*quad(y) + 4*x*(-1 - y -
1511 10*cube(y) + 5*pow5(y) - 19*quad(y) - 34*sqr(y)) + 138*sqr(y) +
1512 sqr(x)*(1 + 3*y + 30*cube(y) + 3*pow5(y) + 37*quad(y) +
1513 46*sqr(y))))/(8.*cube(1 + y)*pow6(-1 + y));
1514
1515 if (is_equal(y, 1., 0.001))
1516 return (30*cube(x)*std::log(sqr(x))*(1 + sqr(x))*(6 + 2*x*(-2 + y) - 8*y +
1517 sqr(x) + 3*sqr(y)) - (-1 + sqr(x))*(pow5(x)*(43 + 24*y + 3*sqr(y)) -
1518 4*sqr(x)*(16 - 27*y + 6*sqr(y)) - 2*(6 - 17*y + 6*sqr(y)) +
1519 2*quad(x)*(-82 - 11*y + 18*sqr(y)) + x*(71 - 152*y + 51*sqr(y)) +
1520 2*cube(x)*(153 - 176*y + 63*sqr(y))))/(40.*pow6(-1 + x)*sqr(1 + x));
1521
1522 if (is_equal(x, y, 0.001))
1523 return ((-1 + sqr(y))*(sqr(x)*(-3 - 92*pow6(y) + pow8(y) - 590*quad(y) -
1524 276*sqr(y)) - 4*x*y*(7 - 68*pow6(y) + pow8(y) - 340*quad(y) -
1525 80*sqr(y)) + sqr(y)*(-35 - 276*pow6(y) + 9*pow8(y) - 662*quad(y) +
1526 4*sqr(y))) + 6*y*std::log(sqr(y))*(y*(2 + 101*pow6(y) + 9*pow8(y) +
1527 45*quad(y) + 3*sqr(y)) - x*(-1 + 146*pow6(y) + 9*pow8(y) +
1528 160*quad(y) + 6*sqr(y)) + y*sqr(x)*(15 + 3*pow6(y) + 57*quad(y) +
1529 85*sqr(y))))/(8.*y*pow6(-1 + sqr(y)));
1530
1531 return (3*(cube(x)*cube(-1 + sqr(y))*std::log(sqr(x))*(1 + sqr(x)) - (-1 +
1532 sqr(x))*(std::log(sqr(y))*sqr(y)*(-2*(y + 3*cube(y)) + 2*(y +
1533 3*cube(y))*sqr(x) + cube(x)*(-3 + quad(y) - 6*sqr(y)) + x*(3 -
1534 quad(y) + 6*sqr(y))) + 2*(-1 + sqr(y))*(-4*x*sqr(y) + cube(y)*(3 +
1535 sqr(y)) - cube(y)*sqr(x)*(3 + sqr(y)) + cube(x)*sqr(1 +
1536 sqr(y))))))/(4.*cube(-1 + sqr(y))*sqr(x - y)*sqr(-1 + sqr(x)));
1537}
1538
1540double D10f6(double x, double y) noexcept
1541{
1542 if (is_equal(x, 1., 0.001) && is_equal(y, 1., 0.001))
1543 return (259 + 99*y - 43*sqr(y) - 3*sqr(x)*(22 - 21*y + 6*sqr(y))
1544 + 2*x*(54 - 88*y + 27*sqr(y)))/490.;
1545
1546 if (is_equal(x, 1., 0.001))
1547 return (30*std::log(sqr(y))*pow5(y)*(6 + 2*x*(-4 + y) - 4*y + 3*sqr(x) + sqr(y))
1548 + (-1 + sqr(y))*(-14 + 32*y - 223*cube(y) - 19*pow5(y) + 82*quad(y) +
1549 52*sqr(y) + sqr(x)*(6 - 33*y - 63*cube(y) + 6*pow5(y) - 78*quad(y) +
1550 72*sqr(y)) - 2*x*(6 - 38*y - 108*cube(y) + 26*pow5(y) - 73*quad(y) +
1551 97*sqr(y))))/(35.*pow6(-1 + y)*sqr(1 + y));
1552
1553 if (is_equal(y, 1., 0.001))
1554 return (-6*std::log(sqr(x))*quad(x)*(y*cube(x) + 5*(3 - 3*y + sqr(y)) + 3*x*(-3
1555 - y + sqr(y)) + sqr(x)*(4 - 3*y + 2*sqr(y))) + (-1 + sqr(x))*(-1 -
1556 3*y + 12*pow6(x) + x*(-9 + 17*y - 5*sqr(y)) + sqr(y) + pow5(x)*(-36 +
1557 17*y + 4*sqr(y)) + sqr(x)*(47 - 30*y + 7*sqr(y)) + cube(x)*(-9 - 46*y
1558 + 19*sqr(y)) + quad(x)*(56 - 75*y + 34*sqr(y))))/(7.*cube(1 +
1559 x)*pow6(-1 + x));
1560
1561 if (is_equal(x, y, 0.001))
1562 return (6*y*std::log(sqr(y))*(3*sqr(x)*(5 + 2*pow6(y) + 33*quad(y) + 40*sqr(y))
1563 + sqr(y)*(5 + 12*pow6(y) + 141*quad(y) + 82*sqr(y)) - 2*x*y*(5 +
1564 8*pow6(y) + 117*quad(y) + 110*sqr(y))) + (-1 +
1565 sqr(y))*(3*y*sqr(x)*(-107 + pow6(y) - 61*quad(y) - 313*sqr(y)) +
1566 y*(-6 - 375*pow6(y) + 13*pow8(y) - 975*quad(y) - 97*sqr(y)) + x*(-12
1567 + 486*pow6(y) - 10*pow8(y) + 2022*quad(y) + 394*sqr(y))))/(7.*pow6(-1
1568 + sqr(y)));
1569
1570 return (6*((-1 + sqr(x))*(-((-1 + sqr(y))*(cube(y) + y*sqr(x)*(-3 + sqr(y))
1571 - 2*cube(x)*(-1 + sqr(y)) - 2*pow5(x)*(-1 + sqr(y)) + y*quad(x)*(-1 +
1572 2*sqr(y)))) + std::log(sqr(y))*pow5(y)*sqr(-1 + sqr(x))) -
1573 std::log(sqr(x))*quad(x)*(4*x - 5*y + y*sqr(x))*sqr(-1 +
1574 sqr(y))))/(7.*cube(-1 + sqr(x))*sqr(x - y)*sqr(-1 + sqr(y)));
1575}
1576
1578double D01f6(double x, double y) noexcept
1579{
1580 if (is_equal(x, 1., 0.001) && is_equal(y, 1., 0.001))
1581 return (259 + 108*y + sqr(x)*(-43 + 54*y - 18*sqr(y)) - 66*sqr(y)
1582 + x*(99 - 176*y + 63*sqr(y)))/490.;
1583
1584 if (is_equal(x, 1., 0.001))
1585 return (-6*std::log(sqr(y))*quad(y)*(15 - 9*y + x*(-15 - 3*y + cube(y) -
1586 3*sqr(y)) + 4*sqr(y) + sqr(x)*(5 + 3*y + 2*sqr(y))) + (-1 +
1587 sqr(y))*(-1 - 9*y - 9*cube(y) - 36*pow5(y) + 12*pow6(y) + 56*quad(y)
1588 + x*(-3 + 17*y - 46*cube(y) + 17*pow5(y) - 75*quad(y) - 30*sqr(y)) +
1589 47*sqr(y) + sqr(x)*(1 - 5*y + 19*cube(y) + 4*pow5(y) + 34*quad(y) +
1590 7*sqr(y))))/(7.*cube(1 + y)*pow6(-1 + y));
1591
1592 if (is_equal(y, 1., 0.001))
1593 return (30*std::log(sqr(x))*pow5(x)*(6 + 2*x*(-2 + y) - 8*y + sqr(x) + 3*sqr(y))
1594 + (-1 + sqr(x))*(quad(x)*(82 + 146*y - 78*sqr(y)) + cube(x)*(-223 +
1595 216*y - 63*sqr(y)) + x*(32 + 76*y - 33*sqr(y)) + 2*(-7 - 6*y +
1596 3*sqr(y)) + pow5(x)*(-19 - 52*y + 6*sqr(y)) + 2*sqr(x)*(26 - 97*y +
1597 36*sqr(y))))/(35.*pow6(-1 + x)*sqr(1 + x));
1598
1599 if (is_equal(x, y, 0.001))
1600 return (6*std::log(sqr(y))*(cube(y)*(5 + 6*pow6(y) + 57*quad(y) + 12*sqr(y)) +
1601 y*sqr(x)*(5 + 2*pow6(y) + 33*quad(y) + 40*sqr(y)) - 2*x*quad(y)*(35 +
1602 3*quad(y) + 42*sqr(y))) + (-1 + sqr(y))*(y*sqr(x)*(-107 + pow6(y) -
1603 61*quad(y) - 313*sqr(y)) + y*(-12 - 193*pow6(y) + 9*pow8(y) -
1604 277*quad(y) - 7*sqr(y)) + x*(-6 + 182*pow6(y) - 4*pow8(y) +
1605 698*quad(y) + 90*sqr(y))))/(7.*pow6(-1 + sqr(y)));
1606
1607 return (6*(cube(-1 + sqr(y))*std::log(sqr(x))*pow5(x) - (-1 +
1608 sqr(x))*(std::log(sqr(y))*quad(y)*(-1 + sqr(x))*(4*y + x*(-5 + sqr(y))) +
1609 (-1 + sqr(y))*(2*(cube(y) + pow5(y)) - 2*(cube(y) + pow5(y))*sqr(x) -
1610 x*sqr(y)*(3 + sqr(y)) + cube(x)*(1 + 2*quad(y) +
1611 sqr(y))))))/(7.*cube(-1 + sqr(y))*sqr(x - y)*sqr(-1 + sqr(x)));
1612}
1613
1615double D10f7(double x, double y) noexcept
1616{
1617 if (is_equal(x, 1., 0.001) && is_equal(y, 1., 0.001))
1618 return (-376 + 207*y - 48*sqr(y) - 9*sqr(x)*(11 - 5*y + sqr(y))
1619 + 6*x*(57 - 28*y + 6*sqr(y)))/70.;
1620
1621 if (is_equal(x, 1., 0.001))
1622 return (30*cube(y)*std::log(sqr(y))*(6 + 2*x*(-4 + y) - 4*y + 3*sqr(x) + sqr(y))
1623 - (-1 + sqr(y))*(-26 + 103*y + 83*cube(y) + 24*pow5(y) - 82*quad(y) -
1624 12*sqr(y) + 3*sqr(x)*(-2 + 6*y + 21*cube(y) + 3*pow5(y) - 14*quad(y)
1625 + 16*sqr(y)) - 2*x*(-11 + 38*y + 68*cube(y) + 14*pow5(y) - 62*quad(y)
1626 + 43*sqr(y))))/(5.*pow6(-1 + y)*sqr(1 + y));
1627
1628 if (is_equal(y, 1., 0.001))
1629 return -(((-1 + sqr(x))*(-4 + y + sqr(x)*(-91 + 106*y - 39*sqr(y)) +
1630 cube(x)*(65 - 6*y - 11*sqr(y)) + x*(-10 + 21*y - 8*sqr(y)) +
1631 quad(x)*(-19 + y - 3*sqr(y)) + pow5(x)*(-1 - 3*y + sqr(y))) +
1632 6*std::log(sqr(x))*sqr(x)*(3*(-2 + y)*cube(x) + 2*quad(x) + 3*(3 - 3*y +
1633 sqr(y)) + x*(-3 - 5*y + 3*sqr(y)) + sqr(x)*(8 - 9*y +
1634 4*sqr(y))))/(cube(1 + x)*pow6(-1 + x)));
1635
1636 if (is_equal(x, y, 0.001))
1637 return (6*y*std::log(sqr(y))*(y + 4*cube(y) + 123*pow5(y) + 106*pow7(y) +
1638 6*pow9(y) - 2*x*(-1 + 86*pow6(y) + 4*pow8(y) + 135*quad(y) +
1639 16*sqr(y)) + 3*y*sqr(x)*(10 + pow6(y) + 24*quad(y) + 45*sqr(y))) -
1640 (-1 + sqr(y))*(1047*pow6(y) + 173*pow8(y) + 219*quad(y) + sqr(y) -
1641 2*x*y*(-19 + 121*pow6(y) + 939*quad(y) + 399*sqr(y)) + sqr(x)*(9 +
1642 93*pow6(y) + 831*quad(y) + 507*sqr(y))))/(y*pow6(-1 + sqr(y)));
1643
1644 return (6*((-1 + sqr(x))*(-((-1 + sqr(y))*(cube(y) + y*quad(x) -
1645 4*cube(x)*(-1 + sqr(y)) + y*sqr(x)*(-5 + 3*sqr(y)))) +
1646 cube(y)*std::log(sqr(y))*sqr(-1 + sqr(x))) - std::log(sqr(x))*sqr(x)*(2*x - 3*y
1647 + 2*cube(x) - y*sqr(x))*sqr(-1 + sqr(y))))/(cube(-1 + sqr(x))*sqr(x -
1648 y)*sqr(-1 + sqr(y)));
1649}
1650
1652double D01f7(double x, double y) noexcept
1653{
1654 if (is_equal(x, 1., 0.001) && is_equal(y, 1., 0.001))
1655 return (-376 + 342*y + sqr(x)*(-48 + 36*y - 9*sqr(y)) - 99*sqr(y)
1656 + 3*x*(69 - 56*y + 15*sqr(y)))/70.;
1657
1658 if (is_equal(x, 1., 0.001))
1659 return -((6*std::log(sqr(y))*sqr(y)*(9 - 3*y - 6*cube(y) + 2*quad(y) + x*(-9 -
1660 5*y + 3*cube(y) - 9*sqr(y)) + 8*sqr(y) + sqr(x)*(3 + 3*y + 4*sqr(y)))
1661 + (-1 + sqr(y))*(-4 - 10*y + 65*cube(y) - pow5(y) - 19*quad(y) +
1662 y*sqr(x)*(-8 - 39*y - 3*cube(y) + quad(y) - 11*sqr(y)) - 91*sqr(y) +
1663 x*(1 + 21*y - 6*cube(y) - 3*pow5(y) + quad(y) + 106*sqr(y))))/(cube(1
1664 + y)*pow6(-1 + y)));
1665
1666 if (is_equal(y, 1., 0.001))
1667 return (30*cube(x)*std::log(sqr(x))*(6 + 2*x*(-2 + y) - 8*y + sqr(x) + 3*sqr(y))
1668 - (-1 + sqr(x))*(-26 + 22*y - 6*sqr(y) + pow5(x)*(24 - 28*y +
1669 9*sqr(y)) + x*(103 - 76*y + 18*sqr(y)) - 2*quad(x)*(41 - 62*y +
1670 21*sqr(y)) + 2*sqr(x)*(-6 - 43*y + 24*sqr(y)) + cube(x)*(83 - 136*y +
1671 63*sqr(y))))/(5.*pow6(-1 + x)*sqr(1 + x));
1672
1673 if (is_equal(x, y, 0.001))
1674 return (6*y*std::log(sqr(y))*(y*(2 + 44*pow6(y) + 3*pow8(y) + 33*quad(y) -
1675 2*sqr(y)) - x*(-1 + 62*pow6(y) + 3*pow8(y) + 90*quad(y) + 6*sqr(y)) +
1676 y*sqr(x)*(10 + pow6(y) + 24*quad(y) + 45*sqr(y))) - (-1 +
1677 sqr(y))*((23 + 83*pow6(y) + 385*quad(y) - 11*sqr(y))*sqr(y) -
1678 2*x*y*(-11 + 45*pow6(y) + 331*quad(y) + 115*sqr(y)) + sqr(x)*(3 +
1679 31*pow6(y) + 277*quad(y) + 169*sqr(y))))/(y*pow6(-1 + sqr(y)));
1680
1681 return (6*(cube(x)*cube(-1 + sqr(y))*std::log(sqr(x)) + (-1 +
1682 sqr(x))*(std::log(sqr(y))*sqr(y)*(2*(y + cube(y)) - 2*(y + cube(y))*sqr(x)
1683 - x*(3 + sqr(y)) + cube(x)*(3 + sqr(y))) - (-1 + sqr(y))*(4*cube(y) -
1684 4*cube(y)*sqr(x) + x*(-5 + sqr(y))*sqr(y) + cube(x)*(1 +
1685 3*sqr(y))))))/(cube(-1 + sqr(y))*sqr(x - y)*sqr(-1 + sqr(x)));
1686}
1687
1689double D10f8(double x, double y) noexcept
1690{
1691 if (is_equal(x, 1., 0.001) && is_equal(y, 1., 0.001))
1692 return (288 - 232*y + x*(-356 + 234*y - 60*sqr(y)) + 63*sqr(y)
1693 + 9*sqr(x)*(13 - 8*y + 2*sqr(y)))/280.;
1694
1695 if (is_equal(x, 1., 0.001))
1696 return ((-24 + 122*y + 12*cube(y) - 14*pow5(y) + 37*quad(y) - 2*x*(-14 +
1697 67*y - 43*cube(y) + 6*pow5(y) + 2*quad(y) - 108*sqr(y)) +
1698 3*sqr(x)*(-3 + 14*y - 16*cube(y) + 2*pow5(y) - 6*quad(y) - 21*sqr(y))
1699 - 223*sqr(y))*(-1 + sqr(y)) + 30*std::log(sqr(y))*quad(y)*(6 + 2*x*(-4 +
1700 y) - 4*y + 3*sqr(x) + sqr(y)))/(20.*pow6(-1 + y)*sqr(1 + y));
1701
1702 if (is_equal(y, 1., 0.001))
1703 return (-6*cube(x)*std::log(sqr(x))*((-3 + 2*y)*cube(x) + quad(x) + 4*(3 - 3*y +
1704 sqr(y)) + 3*sqr(x)*(2 - 2*y + sqr(y)) + x*(-6 - 4*y + 3*sqr(y))) +
1705 (-1 + sqr(x))*(-6 + 4*y + (17 + 4*y)*pow5(x) - sqr(y) + x*(26 - 14*y
1706 + 3*sqr(y)) + quad(x)*(-51 + 10*y + 8*sqr(y)) + sqr(x)*(3 - 26*y +
1707 11*sqr(y)) + cube(x)*(71 - 98*y + 39*sqr(y))))/(4.*cube(1 +
1708 x)*pow6(-1 + x));
1709
1710 if (is_equal(x, y, 0.001))
1711 return (6*std::log(sqr(y))*(153*pow6(y) + 52*pow8(y) + 34*quad(y) + sqr(y) +
1712 3*sqr(x)*(1 + 10*pow6(y) + 45*quad(y) + 24*sqr(y)) - 2*x*y*(-1 +
1713 38*pow6(y) + 147*quad(y) + 56*sqr(y))) - (-1 + sqr(y))*(6 +
1714 771*pow6(y) + 23*pow8(y) + 651*quad(y) - 11*sqr(y) - 2*x*y*(17 +
1715 13*pow6(y) + 615*quad(y) + 795*sqr(y)) + sqr(x)*(93 + 9*pow6(y) +
1716 507*quad(y) + 831*sqr(y))))/(4.*pow6(-1 + sqr(y)));
1717
1718 return (-3*(-((-1 + sqr(x))*(-((-1 + sqr(y))*(sqr(x)*(1 - 3*sqr(y)) +
1719 quad(x)*(3 - 2*sqr(y)) + 2*x*y*(-1 + sqr(y)) + 2*y*cube(x)*(-1 +
1720 sqr(y)) + sqr(y))) + std::log(sqr(y))*quad(y)*sqr(-1 + sqr(x)))) +
1721 cube(x)*(3*x - 4*y + cube(x))*std::log(sqr(x))*sqr(-1 +
1722 sqr(y))))/(2.*cube(-1 + sqr(x))*sqr(x - y)*sqr(-1 + sqr(y)));
1723}
1724
1726double D01f8(double x, double y) noexcept
1727{
1728 if (is_equal(x, 1., 0.001) && is_equal(y, 1., 0.001))
1729 return (288 - 356*y + x*(-232 + 234*y - 72*sqr(y)) + 117*sqr(y)
1730 + 3*sqr(x)*(21 - 20*y + 6*sqr(y)))/280.;
1731
1732 if (is_equal(x, 1., 0.001))
1733 return (-6*cube(y)*std::log(sqr(y))*(12 - 6*y - 3*cube(y) + quad(y) + 2*x*(-6 -
1734 2*y + cube(y) - 3*sqr(y)) + 6*sqr(y) + sqr(x)*(4 + 3*y + 3*sqr(y))) +
1735 (-1 + sqr(y))*(-6 + 26*y + 71*cube(y) + 17*pow5(y) - 51*quad(y) +
1736 2*x*(2 - 7*y - 49*cube(y) + 2*pow5(y) + 5*quad(y) - 13*sqr(y)) +
1737 3*sqr(y) + sqr(x)*(-1 + 3*y + 39*cube(y) + 8*quad(y) +
1738 11*sqr(y))))/(4.*cube(1 + y)*pow6(-1 + y));
1739
1740 if (is_equal(y, 1., 0.001))
1741 return (30*std::log(sqr(x))*quad(x)*(6 + 2*x*(-2 + y) - 8*y + sqr(x) + 3*sqr(y))
1742 + (-1 + sqr(x))*(-24 + 28*y + sqr(x)*(-223 + 216*y - 63*sqr(y)) +
1743 cube(x)*(12 + 86*y - 48*sqr(y)) + quad(x)*(37 - 4*y - 18*sqr(y)) -
1744 9*sqr(y) + 2*pow5(x)*(-7 - 6*y + 3*sqr(y)) + 2*x*(61 - 67*y +
1745 21*sqr(y))))/(20.*pow6(-1 + x)*sqr(1 + x));
1746
1747 if (is_equal(x, y, 0.001))
1748 return (6*std::log(sqr(y))*(sqr(y)*(3 + 24*pow6(y) + 51*quad(y) + 2*sqr(y)) -
1749 2*x*y*(-1 + 14*pow6(y) + 51*quad(y) + 16*sqr(y)) + sqr(x)*(1 +
1750 10*pow6(y) + 45*quad(y) + 24*sqr(y))) - (-1 + sqr(y))*(6 +
1751 325*pow6(y) + 13*pow8(y) + 133*quad(y) + 3*sqr(y) - 2*x*y*(-7 +
1752 5*pow6(y) + 223*quad(y) + 259*sqr(y)) + sqr(x)*(31 + 3*pow6(y) +
1753 169*quad(y) + 277*sqr(y))))/(4.*pow6(-1 + sqr(y)));
1754
1755 return (-3*(-(cube(-1 + sqr(y))*std::log(sqr(x))*quad(x)) + (-1 + sqr(x))*((-1 +
1756 sqr(y))*(-2*x*(y + cube(y)) + 2*cube(x)*(y + cube(y)) + 3*quad(y) +
1757 sqr(x)*(1 - 2*quad(y) - 3*sqr(y)) + sqr(y)) +
1758 cube(y)*std::log(sqr(y))*(4*x - 4*cube(x) - y*(3 + sqr(y)) + y*sqr(x)*(3 +
1759 sqr(y))))))/(2.*cube(-1 + sqr(y))*sqr(x - y)*sqr(-1 + sqr(x)));
1760}
1761
1763double D2F1(double x) noexcept
1764{
1765 if (is_equal(x, 1., 0.001)) {
1766 return -1.3333333333333333 + x + 2*cube(-1 + x) - (31*quad(-1 + x))/14.
1767 - (8*sqr(-1 + x))/5.;
1768 }
1769
1770 return (2 - 6*quad(x) + 4*sqr(x) + 2*std::log(sqr(x))*sqr(x)*(3 +
1771 sqr(x)))/(x*cube(-1 + sqr(x)));
1772}
1773
1775double D2F2(double x) noexcept
1776{
1777 if (is_equal(x, 1., 0.01)) {
1778 return (-381 + 832*x + 320*cube(x) - 55*quad(x) - 744*sqr(x))/35.;
1779 }
1780
1781 return (12*(5 - 11*pow6(x) - 21*quad(x) + 27*sqr(x) + std::log(sqr(x))*(1 +
1782 3*pow6(x) + 25*quad(x) + 19*sqr(x))))/pow5(-1 + sqr(x));
1783}
1784
1786double D2F3(double x) noexcept
1787{
1788 if (is_equal(x, 1., 0.001)) {
1789 return (2*(-392 + 69*x - 465*cube(x) + 120*quad(x) + 528*sqr(x)))/315.;
1790 }
1791
1792 return (4*(1 - 17*pow6(x) - 25*quad(x) + 41*sqr(x) +
1793 2*std::log(sqr(x))*sqr(x)*(9 + 2*quad(x) + 19*sqr(x))))/(3.*x*quad(-1 +
1794 sqr(x)));
1795}
1796
1798double D2F4(double x) noexcept
1799{
1800 if (is_equal(x, 1., 0.001)) {
1801 return (-2*(174 - 529*x - 335*cube(x) + 70*quad(x) + 620*sqr(x)))/35.;
1802 }
1803
1804 return (4*(-1 + pow6(x) + 9*quad(x) - 9*sqr(x) - 6*std::log(sqr(x))*(quad(x) +
1805 sqr(x))))/(x*quad(-1 + sqr(x)));
1806}
1807
1809double D2F5(double x) noexcept
1810{
1811 if (is_equal(x, 1., 0.01)) {
1812 return (-334 + 793*x + 370*cube(x) - 70*quad(x) - 780*sqr(x))/35.;
1813 }
1814
1815 return (6*x*(-19 + pow6(x) + 27*quad(x) - 9*sqr(x) - 6*std::log(sqr(x))*(1 +
1816 2*quad(x) + 5*sqr(x))))/pow5(-1 + sqr(x));
1817}
1818
1820double D2F6(double x) noexcept
1821{
1822 if (is_equal(x, 1., 0.001)) {
1823 return (109 - 720*x - 560*cube(x) + 120*quad(x) + 981*sqr(x))/210.;
1824 }
1825
1826 return (-7 - pow6(x) + 7*quad(x) + sqr(x) - 2*std::log(sqr(x))*(1 +
1827 5*sqr(x)))/quad(-1 + sqr(x));
1828}
1829
1831double D2F7(double x) noexcept
1832{
1833 if (is_equal(x, 1., 0.001)) {
1834 return 10 - (208*x)/7. - 16*cube(x) + (22*quad(x))/7. + (1119*sqr(x))/35.;
1835 }
1836
1837 return (-6*(2 + pow8(x) - 11*pow6(x) - 27*quad(x) + 35*sqr(x) +
1838 6*std::log(sqr(x))*sqr(x)*(3 + 5*sqr(x))))/pow5(-1 + sqr(x));
1839}
1840
1841namespace {
1842
1844double I0y(double y) noexcept {
1846 const double d = y - 1;
1847 return 1 + d*(-0.5 + d/3);
1848 }
1849
1850 return std::log(y)/(y - 1);
1851}
1852
1854double I1y(double x, double y) noexcept {
1855 const double dy = y - 1;
1856 const double dy2 = sqr(dy);
1857 const double dx = (x - 1)/dy2;
1858 const double y2 = sqr(y);
1859 const double yly = y*std::log(y);
1860
1861 return (1 - y + yly)/dy2
1862 + dx*(0.5 - y2/2 + yly)/dy
1863 + sqr(dx)*(1./3 + y/2 + yly + y2*(y/6 - 1));
1864}
1865
1867double Ixx(double x, double y) noexcept {
1868 const double eps_eq = 0.001;
1869
1870 if (is_close(y, 1, eps_eq)) {
1871 const double dx = x - 1;
1872 const double dy = y - 1;
1873 const double dy2 = sqr(dy);
1874
1875 return 0.5 + dx*(-1./6 + dy/12 - dy2/20)
1876 + sqr(dx)*(1./12 - dy/20 + dy2/30)
1877 - dy/6 + dy2/12;
1878 }
1879
1880 const double y2 = sqr(y);
1881 const double dy = y - 1;
1882 const double dy2 = sqr(dy);
1883 const double dxy = (x - y)/dy2;
1884 const double ly = std::log(y);
1885
1886 return (dy - ly)/dy2
1887 + dxy*(0.5 - y2/2 + y*ly)/(dy*y)
1888 + sqr(dxy)*(1./6 - y + y2*(0.5 + y/3 - ly))/y2;
1889}
1890
1892double Ixy(double x, double y) noexcept {
1893 const double eps_eq = 0.001;
1894
1896 return 0;
1897 }
1898
1900 return I0y(y);
1901 }
1902
1903 if (is_close(x/y, 1, eps_eq)) {
1904 return Ixx(x, y);
1905 }
1906
1907 if (is_close(x, 1, eps_eq)) {
1908 return I1y(x, y);
1909 }
1910
1911 if (is_close(y, 1, eps_eq)) {
1912 return I1y(y, x);
1913 }
1914
1915 const double lx = std::log(x);
1916 const double ly = std::log(y);
1917
1918 return (x*(y - 1)*lx - y*(x - 1)*ly)/((x - 1)*(x - y)*(y - 1));
1919}
1920
1922double Ixyz(double x, double y, double z) noexcept {
1923 sort(x, y, z);
1924
1926 return 0;
1927 }
1928
1929 return Ixy(x/z, y/z)/z;
1930}
1931
1932} // anonymous namespace
1933
1934double Iabc(double a, double b, double c) noexcept {
1935 return Ixyz(sqr(a), sqr(b), sqr(c));
1936}
1937
1939double delta_xyz(double x, double y, double z) noexcept
1940{
1941 return sqr(x)+sqr(y)+sqr(z)-2*(x*y+x*z+y*z);
1942}
1943
1944namespace {
1946 double lambda_2(double u, double v) noexcept
1947 {
1948 return sqr(1 - u - v) - 4*u*v;
1949 }
1950
1953 double phi_pos(double u, double v) noexcept
1954 {
1955 const double eps = 1.0e-7;
1956
1957 if (is_equal(u, 1.0, eps) && is_equal(v, 1.0, eps)) {
1958 return 2.343907238689459;
1959 }
1960
1961 const double pi23 = 3.2898681336964529; // Pi^2/3
1962 const auto lambda = std::sqrt(lambda_2(u,v));
1963
1964 if (is_equal(u, v, eps)) {
1965 return (- sqr(std::log(u))
1966 + 2*sqr(std::log(0.5*(1 - lambda)))
1967 - 4*Li2(0.5*(1 - lambda))
1968 + pi23)/lambda;
1969 }
1970
1971 return (- std::log(u)*std::log(v)
1972 + 2*std::log(0.5*(1 - lambda + u - v))*std::log(0.5*(1 - lambda - u + v))
1973 - 2*Li2(0.5*(1 - lambda + u - v))
1974 - 2*Li2(0.5*(1 - lambda - u + v))
1975 + pi23)/lambda;
1976 }
1977
1979 double cl2acos(double x) noexcept
1980 {
1981 return Cl2(2*std::acos(x));
1982 }
1983
1985 double phi_neg_1v(double v) noexcept
1986 {
1987 return 2*(cl2acos(1 - 0.5*v) + 2*cl2acos(0.5*std::sqrt(v)));
1988 }
1989
1992 double phi_neg(double u, double v) noexcept
1993 {
1994 const double eps = 1.0e-7;
1995
1996 if (is_equal(u, 1.0, eps) && is_equal(v, 1.0, eps)) {
1997 // -I/9 (Pi^2 - 36 PolyLog[2, (1 - I Sqrt[3])/2])/Sqrt[3]
1998 return 2.343907238689459;
1999 }
2000
2001 const auto lambda = std::sqrt(-lambda_2(u,v));
2002
2003 if (is_equal(u, v, eps)) {
2004 return 4*Cl2(2*std::asin(std::sqrt(0.25/u)))/lambda;
2005 }
2006
2007 if (is_equal(u, 1.0, eps)) {
2008 return phi_neg_1v(v)/lambda;
2009 }
2010
2011 if (is_equal(v, 1.0, eps)) {
2012 return phi_neg_1v(u)/lambda;
2013 }
2014
2015 const auto sqrtu = std::sqrt(u);
2016 const auto sqrtv = std::sqrt(v);
2017
2018 return 2*(+ cl2acos(0.5*(1 + u - v)/sqrtu)
2019 + cl2acos(0.5*(1 - u + v)/sqrtv)
2020 + cl2acos(0.5*(-1 + u + v)/(sqrtu*sqrtv)))/lambda;
2021 }
2022
2029 double phi_uv(double u, double v) noexcept
2030 {
2031 const auto lambda = lambda_2(u,v);
2032
2033 if (is_zero(lambda, 1e-11)) {
2034 // phi_uv is always multiplied by lambda. So, in order to
2035 // avoid nans if lambda == 0, we simply return 0
2036 return 0.0;
2037 }
2038
2039 if (lambda > 0.) {
2040 if (u <= 1 && v <= 1) {
2041 return phi_pos(u,v);
2042 }
2043 const auto oou = 1/u;
2044 const auto vou = v/u;
2045 if (u >= 1 && vou <= 1) {
2046 return phi_pos(oou,vou)*oou;
2047 }
2048 // v >= 1 && u/v <= 1
2049 const auto oov = 1/v;
2050 return phi_pos(oov,1/vou)*oov;
2051 }
2052
2053 return phi_neg(u,v);
2054 }
2055} // anonymous namespace
2056
2069double phi_xyz(double x, double y, double z) noexcept
2070{
2071 const auto u = x/z, v = y/z;
2072 return phi_uv(u,v);
2073}
2074
2084double B0(double m1, double m2, double scale) noexcept
2085{
2086 return Loop_library::get().B0(0, m1*m1, m2*m2, scale*scale).real();
2087}
2088
2097double DB0(double m1, double m2) noexcept
2098{
2099 const double eps = 10.*std::numeric_limits<double>::epsilon();
2100 const double m12 = sqr(m1);
2101 const double m14 = sqr(m12);
2102 const double m22 = sqr(m2);
2103 const double m24 = sqr(m22);
2104
2105 if (is_zero(m12, eps) || is_zero(m22, eps)) {
2106 return 0.;
2107 }
2108
2109 if (is_equal_rel(m12, m22, 1e-3)) {
2110 return 1./(6. * m22);
2111 }
2112
2113 return (m14 - m24 + 2*m12*m22*std::log(m22/m12))/
2114 (2*cube(m12 - m22));
2115}
2116
2128double C0(double m1, double m2, double m3) noexcept
2129{
2130 return softsusy::c0(m1, m2, m3);
2131}
2132
2133double D0(double m1, double m2, double m3, double m4) noexcept
2134{
2135 return softsusy::d0(m1,m2,m3,m4);
2136}
2137
2148double D2t(double m1, double m2, double m3, double m4) noexcept
2149{
2150 return C0(m2, m3, m4) + m1*m1 * D0(m1, m2, m3, m4);
2151}
2152
2164double D4t(double m1, double m2, double m3, double m4, double scale) noexcept
2165{
2166 return B0(m3, m4, scale) + (m1*m1 + m2*m2) * C0(m2, m3, m4)
2167 + quad(m1) * D0(m1, m2, m3, m4);
2168}
2169
2179double W(double m1, double m2, double scale) noexcept
2180{
2181 const double eps = 10.*std::numeric_limits<double>::epsilon();
2182 const double m12 = sqr(m1);
2183 const double m14 = sqr(m12);
2184 const double m22 = sqr(m2);
2185 const double m24 = sqr(m22);
2186 const double m26 = m24 * m22;
2187 const double Q2 = sqr(scale);
2188
2189 if (is_zero(m12, eps) || is_zero(m22, eps) || is_zero(Q2, eps)) {
2190 return 0.;
2191 }
2192
2193 if (is_equal_rel(m12, m22, 1e-3)) {
2194 return 2./3. - 2. * std::log(Q2/m22);
2195 }
2196
2197 return (- 2*std::log(Q2/m12)
2198 - std::log(m22/m12)*(2*m26 - 6*m12*m24)/cube(m12 - m22)
2199 - (m14 - 6*m22*m12 + m24)/sqr(m12 - m22));
2200}
2201
2202} // namespace threshold_loop_functions
2203} // namespace flexiblesusy
static looplibrary::Loop_library_interface & get()
#define xlogx
Definition: externals.h:284
double Ixy(double x, double y) noexcept
I(x,y), x < y, x and y are squared arguments.
double Ixx(double x, double y) noexcept
I(x,y), squared arguments, x == y, x != 0, y != 0.
double Ixyz(double x, double y, double z) noexcept
I(x,y,z), x, y and z are squared arguments.
double I1y(double x, double y) noexcept
I(x,y), squared arguments, x == 1, y != 0.
static double f6_1_1(double r1, double r2) noexcept
f6(r1,r2) in the limit r1 -> 1 and r2 -> 1
static double F8_1_x2(double x1, double x2) noexcept
F8(x1,x2) in the limit x1 -> 1, x2 != 1.
double D10f8(double x, double y) noexcept
First derivative of f8 w.r.t. 1st argument.
double D1F4(double x) noexcept
First derivative of F4.
static double f5_0_r2(double r1, double r2) noexcept
f5(r1,r2) in the limit r1 -> 0
static double f7_1_1(double r1, double r2) noexcept
f7(r1,r2) in the limit r1 -> 1 and r2 -> 1
double f6(double r1, double r2) noexcept
static double f8_0_r2(double r1, double r2) noexcept
f8(r1,r2) in the limit r1 -> 0
double D1F6(double x) noexcept
First derivative of F6.
double W(double m1, double m2, double scale) noexcept
(arguments are interpreted as unsquared)
static double f6_1_r2(double r1, double r2) noexcept
f6(r1,r2) in the limit r1 -> 1
double C0(double m1, double m2, double m3) noexcept
(arguments are interpreted as unsquared)
double D2F6(double x) noexcept
Second derivative of F6.
double D2F4(double x) noexcept
Second derivative of F4.
double D2F5(double x) noexcept
Second derivative of F5.
static double f7_1_r2(double r1, double r2) noexcept
f7(r1,r2) in the limit r1 -> 1
static double f6_0_1(double r1, double r2) noexcept
f6(r1,r2) in the limit r1 -> 0 and r2 -> 1
double D1f2(double x) noexcept
First derivative of f2.
double D1F5(double x) noexcept
First derivative of F5.
static double f8_0_0(double r1, double r2) noexcept
f8(r1,r2) in the limit r1 -> 0 and r2 -> 0
double D2t(double m1, double m2, double m3, double m4) noexcept
(arguments are interpreted as unsquared)
double D01f5(double x, double y) noexcept
First derivative of f5 w.r.t. 2nd argument.
double D1F7(double x) noexcept
First derivative of F7.
static double F9_0_x2(double, double x2) noexcept
F9(x1,x2) in the limit x1 -> 0, x2 != 1, x2 != 0.
double DB0(double m1, double m2) noexcept
(arguments are interpreted as unsquared)
static double f7_0_1(double r1, double r2) noexcept
f7(r1,r2) in the limit r1 -> 0 and r2 -> 1
static double f8_1_1(double r1, double r2) noexcept
f8(r1,r2) in the limit r1 -> 1 and r2 -> 1
double f7(double r1, double r2) noexcept
double D10f5(double x, double y) noexcept
First derivative of f5 w.r.t. 1st argument.
static double f5_1_1(double r1, double r2) noexcept
f5(r1,r2) in the limit r1 -> 1 and r2 -> 1
static double F9_1_x2(double x1, double x2) noexcept
F9(x1,x2) in the limit x1 -> 1.
double D4t(double m1, double m2, double m3, double m4, double scale) noexcept
(arguments are interpreted as unsquared)
double D01f8(double x, double y) noexcept
First derivative of f8 w.r.t. 2nd argument.
double phi_xyz(double x, double y, double z) noexcept
(arguments are interpreted as squared masses)
double D10f6(double x, double y) noexcept
First derivative of f6 w.r.t. 1st argument.
static double f8_0_1(double r1, double r2) noexcept
f8(r1,r2) in the limit r1 -> 0 and r2 -> 1
static double F9_1_1(double x1, double x2) noexcept
F9(x1,x2) in the limit x1 -> 1 and x2 -> 1.
double D1F3(double x) noexcept
First derivative of F3.
static double f5_r1_r2(double r1, double r2) noexcept
f5(r1,r2) in the limit r1 -> r2
double D1g(double x) noexcept
First derivative of g.
double D2F2(double x) noexcept
Second derivative of F2.
double delta_xyz(double x, double y, double z) noexcept
Delta function from hep-ph/0907.47682v1.
double D01f7(double x, double y) noexcept
First derivative of f7 w.r.t. 2nd argument.
double D2F1(double x) noexcept
Second derivative of F1.
double D0(double m1, double m2, double m3, double m4) noexcept
(arguments are interpreted as unsquared)
double D1f1(double x) noexcept
First derivative of f1.
static double f7_r1_r2(double r1, double r2) noexcept
f7(r1,r2) in the limit r1 -> r2
double D2F3(double x) noexcept
Second derivative of F3.
double f5(double r1, double r2) noexcept
double D1f4(double x) noexcept
First derivative of f4.
double B0(double m1, double m2, double scale) noexcept
(arguments are interpreted as unsquared)
double D1F2(double x) noexcept
First derivative of F2.
double Iabc(double a, double b, double c) noexcept
(arguments are interpreted as unsquared)
static double F9_x1_x2(double x1, double x2) noexcept
F9(x1,x2) in the limit x1 -> x2, x2 != 0.
static double f8_1_r2(double r1, double r2) noexcept
f8(r1,r2) in the limit r1 -> 1
double D1F1(double x) noexcept
First derivative of F1.
double D01f6(double x, double y) noexcept
First derivative of f6 w.r.t. 2nd argument.
static double f7_0_0(double r1, double r2) noexcept
f7(r1,r2) in the limit r1 -> 0, r2 -> 0
static double F8_0_x2(double x1, double x2) noexcept
F8(x1,x2) in the limit x1 -> 0, x2 != 0.
static double f6_0_0(double r1, double r2) noexcept
f6(r1,r2) in the limit r1 -> 0 and r2 -> 0
double D2F7(double x) noexcept
Second derivative of F7.
double F8(double x1, double x2) noexcept
double f8(double r1, double r2) noexcept
static double f5_1_r2(double r1, double r2) noexcept
f5(r1,r2) in the limit r1 -> 1, r2 != 1
double D10f7(double x, double y) noexcept
First derivative of f7 w.r.t. 1st argument.
static double F8_x1_x2(double x1, double x2) noexcept
static double f8_r1_r2(double r1, double r2) noexcept
f8(r1,r2) in the limit r1 -> r2
static double f6_r1_r2(double r1, double r2) noexcept
double F9(double x1, double x2) noexcept
static double f6_0_r2(double r1, double r2) noexcept
f6(r1,r2) in the limit r1 -> 0
double D1f3(double x) noexcept
First derivative of f3.
static double f7_0_r2(double r1, double r2) noexcept
f7(r1,r2) in the limit r1 -> 0
static double f5_0_0(double r1, double r2) noexcept
f5(r1,r2) in the limit r1 -> 0, r2 -> 0
static double F8_1_1(double x1, double x2) noexcept
F8(x1,x2) in the limit x1 -> 1 and x2 -> 1.
double D1f(double x) noexcept
First derivative of f.
T sqr(T x)
Definition: mathdefs.hpp:62
const Real epsilon
Definition: mathdefs.hpp:18
bool is_equal(T a, T b, T prec=std::numeric_limits< T >::epsilon()) noexcept
compares two numbers for (absolute) equality
Definition: numerics2.hpp:75
std::enable_if_t< std::is_unsigned< T >::value, bool > is_zero(T a, T prec=std::numeric_limits< T >::epsilon()) noexcept
compares a number for being close to zero
Definition: numerics2.hpp:46
double Li2(double x) noexcept
Real dilogarithm .
Definition: Li2.cpp:68
double Cl2(double x) noexcept
Clausen function .
Definition: Cl2.cpp:31
constexpr double r2
Definition: mathdefs.hpp:17
Complex< T > log(const Complex< T > &z) noexcept
Definition: complex.hpp:54
bool is_equal_rel(const Eigen::PlainObjectBase< Derived > &a, const Eigen::PlainObjectBase< Derived > &b, double eps)
Definition: eigen_utils.hpp:89
T cube(T x)
Definition: mathdefs.hpp:63
void sort(Eigen::Array< double, N, 1 > &v)
sorts an Eigen array
double c0(double m1, double m2, double m3) noexcept
Definition: numerics.cpp:373
double d27(double m1, double m2, double m3, double m4) noexcept
Definition: numerics.cpp:362
double d0(double m1, double m2, double m3, double m4) noexcept
Definition: numerics.cpp:322
void swap(nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType, CustomBaseClass > &j1, nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType, CustomBaseClass > &j2) noexcept(//NOLINT(readability-inconsistent-declaration-parameter-name, cert-dcl58-cpp) is_nothrow_move_constructible< nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType, CustomBaseClass > >::value &&//NOLINT(misc-redundant-expression, cppcoreguidelines-noexcept-swap, performance-noexcept-swap) is_nothrow_move_assignable< nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType, CustomBaseClass > >::value)
exchanges the values of two JSON objects
Definition: json.hpp:24537
loop functions