BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
minoreval.cpp
Go to the documentation of this file.
1/*
2 * minoreval.cpp - integral coefficient functions
3 *
4 * this file is part of PJFry library
5 * Copyright 2011 Valery Yundin
6 */
7
8#include "cache.h"
9#include "minor.h"
10
11/* ========================================================
12 * ========================================================
13 *
14 * PENTAGON coefficients - 5 point
15 *
16 * ========================================================
17 * ========================================================
18 */
19
20/* --------------------------------------------------------
21 5-point coefficients rank-0
22 * --------------------------------------------------------
23 */
25 ncomplex ivalue = 0;
26 ncomplex sum1 = 0;
27 const double d00 = M1( 0, 0 );
28 for ( int s = 1; s <= 5; s++ ) { sum1 += M1( 0, s ) * I4s( ep, s ); }
29 ivalue = sum1 / d00;
30 return ivalue;
31}
32
33/* --------------------------------------------------------
34 5-point coefficients rank-1
35 * --------------------------------------------------------
36 */
37ncomplex Minor5::evalE( int ep, int i ) {
38 ncomplex ivalue = 0;
39 ncomplex sum1 = 0;
40 const double d00 = M1( 0, 0 );
41 for ( int s = 1; s <= 5; s++ ) { sum1 += M2( 0, i, 0, s ) * I4s( ep, s ); }
42 ivalue = -sum1 / d00;
43 return ivalue;
44}
45
46/* --------------------------------------------------------
47 5-point coefficients rank-2
48 * --------------------------------------------------------
49 */
50ncomplex Minor5::evalE( int ep, int i, int j ) {
51 ncomplex ivalue = 0;
52 const double d00 = M1( 0, 0 );
53 if ( i == 0 && j == 0 )
54 {
55 ncomplex sum1 = 0;
56 for ( int s = 1; s <= 5; s++ ) { sum1 += M1( 0, s ) * I4Ds( ep, s ); }
57 ivalue = -sum1 / ( 2 * d00 );
58 }
59 else
60 {
61 assert( i != 0 && j != 0 ); // E01, E02, etc do not exist
62 ncomplex sum1 = 0;
63 for ( int s = 1; s <= 5; s++ )
64 {
65 sum1 += M2( 0, i, s, j ) * I4Ds( ep, s );
66 sum1 += M2( 0, s, 0, j ) * I4Dsi( ep, s, i );
67 }
68 // if (i!=j) { // is symmetrization needed?
69 // ncomplex sumX=0;
70 // for (int s=1; s<=5; s++) {
71 // sumX+=M2(0, j, s, i)*I4Ds(ep, s);
72 // sumX+=M2(0, s, 0, i)*I4Dsi(ep, s, j);
73 // }
74 // sum1=0.5*(sum1+sumX);
75 // }
76 ivalue = sum1 / d00;
77 }
78 return ivalue;
79}
80
81/* --------------------------------------------------------
82 5-point coefficients rank-3
83 * --------------------------------------------------------
84 */
85ncomplex Minor5::evalE( int ep, int i, int j, int k ) {
86 ncomplex ivalue = 0;
87 const double d00 = M1( 0, 0 );
88 if ( i == 0 && j == 0 )
89 {
90 assert( i == 0 && j == 0 && k != 0 ); // E000 does not exist, E100 is a wrong syntax
91
92 /* // Fleischer's formula 6.13
93 ncomplex sum1=0;
94 for (int s=1; s<=5; s++) {
95 sum1+=0.5*M2(0, s, 0, k)*I4Ds(ep, s);
96 sum1+=-M1(s, k)*I4D2s(ep, s); // (4-1)/3=1 // NB d-1=3 and d=4
97 }
98 ivalue=sum1/d00;
99 */
100 // This variant looks simpler (does not depend on I4D2s)
101 ncomplex sum1 = 0;
102 for ( int s = 1; s <= 5; s++ )
103 {
104 sum1 += 0.5 * M2( 0, s, 0, k ) * I4Ds( ep, s );
105 sum1 += M1( s, 0 ) * I4D2si( ep, s, k );
106 }
107 ivalue = sum1 / ( 3 * d00 );
108 }
109 else
110 {
111 assert( i != 0 && j != 0 && k != 0 ); // E110, E012, etc do not exist
112 ncomplex sum1 = 0;
113 ncomplex sumX = 0;
114 ncomplex sumY = 0;
115 if ( i == j )
116 {
117 for ( int s = 1; s <= 5; s++ )
118 {
119 sum1 += 2 * M2( 0, j, s, k ) * I4D2si( ep, s, i );
120 sum1 += M2( 0, s, 0, k ) * I4D2sij( ep, s, i, j );
121 }
122 if ( i != k )
123 {
124 for ( int s = 1; s <= 5; s++ )
125 {
126 sumX += M2( 0, j, s, i ) * I4D2si( ep, s, k );
127 sumX += M2( 0, k, s, i ) * I4D2si( ep, s, j );
128 sumX += M2( 0, s, 0, i ) * I4D2sij( ep, s, k, j );
129 }
130 sum1 = ( sum1 + 2. * sumX ) / 3.;
131 }
132 }
133 else
134 { // i!=j
135 for ( int s = 1; s <= 5; s++ )
136 {
137 sum1 += M2( 0, j, s, k ) * I4D2si( ep, s, i );
138 sum1 += M2( 0, i, s, k ) * I4D2si( ep, s, j );
139 sum1 += M2( 0, s, 0, k ) * I4D2sij( ep, s, i, j );
140 }
141 if ( i != k )
142 {
143 for ( int s = 1; s <= 5; s++ )
144 {
145 sumX += M2( 0, j, s, i ) * I4D2si( ep, s, k );
146 sumX += M2( 0, k, s, i ) * I4D2si( ep, s, j );
147 sumX += M2( 0, s, 0, i ) * I4D2sij( ep, s, k, j );
148 }
149 }
150 else { sumX = sum1; }
151 if ( j != k )
152 {
153 for ( int s = 1; s <= 5; s++ )
154 {
155 sumY += M2( 0, k, s, j ) * I4D2si( ep, s, i );
156 sumY += M2( 0, i, s, j ) * I4D2si( ep, s, k );
157 sumY += M2( 0, s, 0, j ) * I4D2sij( ep, s, i, k );
158 }
159 }
160 else { sumY = sum1; }
161 sum1 = ( sum1 + sumX + sumY ) / 3.;
162 }
163 ivalue = -sum1 / d00;
164 }
165 return ivalue;
166}
167
168/* --------------------------------------------------------
169 5-point coefficients rank-4
170 * --------------------------------------------------------
171 */
172ncomplex Minor5::evalE( int ep, int i, int j, int k, int l ) {
173 ncomplex ivalue = 0;
174 const double d00 = M1( 0, 0 );
175
176 if ( i == 0 && j == 0 )
177 {
178 if ( k == 0 && l == 0 )
179 {
180 ncomplex sum1 = 0;
181 for ( int s = 1; s <= 5; s++ )
182 {
183#ifndef USE_GOLEM_MODE
184 // Cancel pole and finite part with E00ij - LoopTools-like convention
185 sum1 += M1( s, 0 ) * ( I4D2s( ep, s ) + ( ep == 0 ? ( -1. / 6. + 1. / 4. )
186 : ( ep == 1 ? -1. / 6. : 0. ) ) );
187#else
188 // Golem95 convention
189 sum1 += M1( s, 0 ) * ( I4D2s( ep, s ) + ( ep == 0 ? -1. / 9. : 0. ) );
190#endif
191 }
192 ivalue = 0.25 * sum1 / d00;
193 }
194 else
195 {
196 assert( i == 0 && j == 0 && k != 0 && l != 0 ); // E0001 does not exist, E1200 is a wrong
197 // syntax
198 ncomplex sum1 = 0;
199
200 for ( int s = 1; s <= 5; s++ )
201 {
202#ifndef USE_GOLEM_MODE
203 // Cancel pole and finite part with E0000 - LoopTools-like convention
204 sum1 += 0.5 * ( M2( 0, k, s, l ) + M2( 0, l, s, k ) ) *
205 ( I4D2s( ep, s ) +
206 ( ep == 0 ? ( -1. / 6. + 1. / 4. ) : ( ep == 1 ? -1. / 6. : 0. ) ) );
207#else
208 // Golem95 convention
209 sum1 += 0.5 * ( M2( 0, k, s, l ) + M2( 0, l, s, k ) ) *
210 ( I4D2s( ep, s ) + ( ep == 0 ? -1. / 9. : 0. ) );
211#endif
212 sum1 += 0.5 * ( M2( 0, s, 0, l ) * I4D2si( ep, s, k ) +
213 M2( 0, s, 0, k ) * I4D2si( ep, s, l ) );
214 sum1 += 0.5 * M1( s, 0 ) * ( I4D3sij( ep, s, k, l ) + I4D3sij( ep, s, l, k ) );
215 }
216 ivalue = -0.25 * sum1 / d00;
217 }
218 }
219 else
220 {
221 assert( i != 0 && j != 0 && k != 0 && l != 0 ); // E110, E012, etc do not exist
222 ncomplex sum1234 = 0;
223 for ( int s = 1; s <= 5; s++ )
224 {
225 ncomplex sum1 = M2( 0, k, s, l ) * I4D3sij( ep, s, i, j ) +
226 M2( 0, i, s, l ) * I4D3sij( ep, s, k, j ) +
227 M2( 0, j, s, l ) * I4D3sij( ep, s, i, k ) +
228 M2( 0, s, 0, l ) * I4D3sijk( ep, s, i, j, k );
229 ncomplex sum2 = sum1;
230 if ( l != k )
231 {
232 sum2 = M2( 0, l, s, k ) * I4D3sij( ep, s, i, j ) +
233 M2( 0, i, s, k ) * I4D3sij( ep, s, l, j ) +
234 M2( 0, j, s, k ) * I4D3sij( ep, s, i, l ) +
235 M2( 0, s, 0, k ) * I4D3sijk( ep, s, i, j, l );
236 }
237 ncomplex sum3 = sum1;
238 if ( j == k ) { sum3 = sum2; }
239 else if ( l != j )
240 {
241 sum3 = M2( 0, k, s, j ) * I4D3sij( ep, s, i, l ) +
242 M2( 0, i, s, j ) * I4D3sij( ep, s, k, l ) +
243 M2( 0, l, s, j ) * I4D3sij( ep, s, i, k ) +
244 M2( 0, s, 0, j ) * I4D3sijk( ep, s, i, l, k );
245 }
246 ncomplex sum4 = sum1;
247 if ( i == j ) { sum4 = sum3; }
248 else if ( l != i )
249 {
250 sum4 = M2( 0, k, s, i ) * I4D3sij( ep, s, l, j ) +
251 M2( 0, l, s, i ) * I4D3sij( ep, s, k, j ) +
252 M2( 0, j, s, i ) * I4D3sij( ep, s, l, k ) +
253 M2( 0, s, 0, i ) * I4D3sijk( ep, s, l, j, k );
254 }
255 sum1234 += sum1 + sum2 + sum3 + sum4;
256 }
257 ivalue = sum1234 / ( 4 * d00 );
258 }
259 return ivalue;
260}
261
262/* --------------------------------------------------------
263 5-point coefficients rank-5
264 * --------------------------------------------------------
265 */
266ncomplex Minor5::evalE( int ep, int i, int j, int k, int l, int m ) {
267 ncomplex ivalue = 0;
268 const double d00 = M1( 0, 0 );
269
270 if ( i == 0 && j == 0 )
271 {
272 if ( k == 0 && l == 0 )
273 {
274 assert( m != 0 ); // E00000 does not exist
275 ncomplex sum1 = 0;
276 for ( int s = 1; s <= 5; s++ )
277 {
278 sum1 += +M2( 0, s, 0, m ) * I4D2s( ep, s ) +
279 M1( s, 0 ) * ( 4. * I4D3si( ep, s, m ) -
280 2. * ( ep < 2 ? I4D3si( ep + 1, s, m ) : 0. ) );
281 }
282 ivalue = -sum1 / ( 20. * d00 );
283 }
284 else
285 {
286 assert( i == 0 && j == 0 && k != 0 && l != 0 && m != 0 ); // E00012 does not exist,
287 // E00100 is a wrong syntax
288 ncomplex sum1 = 0;
289 ncomplex sumX = 0;
290 ncomplex sumY = 0;
291 if ( k == l )
292 {
293 for ( int s = 1; s <= 5; s++ )
294 {
295 sum1 += +2 * M2( 0, k, s, m ) * I4D3si( ep, s, l ) +
296 M2( 0, s, 0, m ) * I4D3sij( ep, s, k, l );
297 }
298 if ( ep == 0 ) sum1 += 1. / 24. * ( M1( k, m ) - M2( 0, k, l, m ) );
299 if ( k != m )
300 {
301 for ( int s = 1; s <= 5; s++ )
302 {
303 sumX += +M2( 0, m, s, k ) * I4D3si( ep, s, l ) +
304 M2( 0, l, s, k ) * I4D3si( ep, s, m ) +
305 M2( 0, s, 0, k ) * I4D3sij( ep, s, m, l );
306 }
307 if ( ep == 0 ) sumX += 1. / 48. * ( M1( m, k ) + M1( l, k ) - M2( 0, l, m, k ) );
308 sum1 = ( sum1 + 2. * sumX ) / 3.;
309 }
310 }
311 else
312 { // k!=l
313 for ( int s = 1; s <= 5; s++ )
314 {
315 sum1 += +M2( 0, k, s, m ) * I4D3si( ep, s, l ) +
316 M2( 0, l, s, m ) * I4D3si( ep, s, k ) +
317 M2( 0, s, 0, m ) * I4D3sij( ep, s, k, l );
318 }
319 if ( ep == 0 )
320 sum1 += 1. / 48. * ( M1( k, m ) + M1( l, m ) - M2( 0, k, l, m ) - M2( 0, l, k, m ) );
321 if ( k != m )
322 {
323 for ( int s = 1; s <= 5; s++ )
324 {
325 sumX += +M2( 0, m, s, k ) * I4D3si( ep, s, l ) +
326 M2( 0, l, s, k ) * I4D3si( ep, s, m ) +
327 M2( 0, s, 0, k ) * I4D3sij( ep, s, m, l );
328 }
329 if ( ep == 0 )
330 sumX +=
331 1. / 48. * ( M1( m, k ) + M1( l, k ) - M2( 0, m, l, k ) - M2( 0, l, m, k ) );
332 }
333 else { sumX = sum1; }
334 if ( l != m )
335 {
336 for ( int s = 1; s <= 5; s++ )
337 {
338 sumY += +M2( 0, k, s, l ) * I4D3si( ep, s, m ) +
339 M2( 0, m, s, l ) * I4D3si( ep, s, k ) +
340 M2( 0, s, 0, l ) * I4D3sij( ep, s, k, m );
341 }
342 if ( ep == 0 )
343 sumY +=
344 1. / 48. * ( M1( k, l ) + M1( m, l ) - M2( 0, k, m, l ) - M2( 0, m, k, l ) );
345 }
346 else { sumY = sum1; }
347 sum1 = ( sum1 + sumX + sumY ) / 3.;
348 }
349 sumX = 0;
350 for ( int s = 1; s <= 5; s++ ) { sumX += M1( s, 0 ) * I4D4sijk( ep, s, k, l, m ); }
351 sum1 = 3. * sum1 + 2. * sumX;
352 ivalue = sum1 / ( 10. * d00 );
353 }
354 }
355 else
356 {
357 assert( i != 0 && j != 0 && k != 0 && l != 0 && m != 0 );
358 ncomplex sum12345 = 0;
359 for ( int s = 1; s <= 5; s++ )
360 {
361 ncomplex sum1 = +M2( 0, l, s, m ) * I4D4sijk( ep, s, i, j, k ) +
362 M2( 0, i, s, m ) * I4D4sijk( ep, s, l, j, k ) +
363 M2( 0, j, s, m ) * I4D4sijk( ep, s, i, l, k ) +
364 M2( 0, k, s, m ) * I4D4sijk( ep, s, i, j, l ) +
365 M2( 0, s, 0, m ) * I4D4sijkl( ep, s, i, j, k, l );
366 ncomplex sum2 = sum1;
367 if ( m != l )
368 {
369 sum2 = +M2( 0, m, s, l ) * I4D4sijk( ep, s, i, j, k ) +
370 M2( 0, i, s, l ) * I4D4sijk( ep, s, m, j, k ) +
371 M2( 0, j, s, l ) * I4D4sijk( ep, s, i, m, k ) +
372 M2( 0, k, s, l ) * I4D4sijk( ep, s, i, j, m ) +
373 M2( 0, s, 0, l ) * I4D4sijkl( ep, s, i, j, k, m );
374 }
375 ncomplex sum3 = sum1;
376 if ( k == l ) { sum3 = sum2; }
377 else if ( m != k )
378 {
379 sum3 = +M2( 0, l, s, k ) * I4D4sijk( ep, s, i, j, m ) +
380 M2( 0, i, s, k ) * I4D4sijk( ep, s, l, j, m ) +
381 M2( 0, j, s, k ) * I4D4sijk( ep, s, i, l, m ) +
382 M2( 0, m, s, k ) * I4D4sijk( ep, s, i, j, l ) +
383 M2( 0, s, 0, k ) * I4D4sijkl( ep, s, i, j, m, l );
384 }
385 ncomplex sum4 = sum1;
386 if ( j == k ) { sum4 = sum3; }
387 else if ( m != j )
388 {
389 sum4 = +M2( 0, l, s, j ) * I4D4sijk( ep, s, i, m, k ) +
390 M2( 0, i, s, j ) * I4D4sijk( ep, s, l, m, k ) +
391 M2( 0, m, s, j ) * I4D4sijk( ep, s, i, l, k ) +
392 M2( 0, k, s, j ) * I4D4sijk( ep, s, i, m, l ) +
393 M2( 0, s, 0, j ) * I4D4sijkl( ep, s, i, m, k, l );
394 }
395 ncomplex sum5 = sum1;
396 if ( i == j ) { sum5 = sum4; }
397 else if ( m != i )
398 {
399 sum5 = +M2( 0, l, s, i ) * I4D4sijk( ep, s, m, j, k ) +
400 M2( 0, m, s, i ) * I4D4sijk( ep, s, l, j, k ) +
401 M2( 0, j, s, i ) * I4D4sijk( ep, s, m, l, k ) +
402 M2( 0, k, s, i ) * I4D4sijk( ep, s, m, j, l ) +
403 M2( 0, s, 0, i ) * I4D4sijkl( ep, s, m, j, k, l );
404 }
405 sum12345 += sum1 + sum2 + sum3 + sum4 + sum5;
406 }
407 ivalue = -sum12345 / ( 5 * d00 );
408 }
409 return ivalue;
410}
411
412/* ========================================================
413 * ========================================================
414 *
415 * BOX coefficients - 4 point
416 *
417 * ========================================================
418 * ========================================================
419 */
420#ifdef USE_GOLEM_MODE_6
421int psix;
422# define ix( i ) i < pm5->psix ? i : i - 1
423#else
424# define ix( i ) i
425#endif
426/* --------------------------------------------------------
427 4-point scalar for GolemMode
428 * --------------------------------------------------------
429 */
430#ifdef USE_GOLEM_MODE
431ncomplex Minor4::A( int ep ) {
432 ncomplex ivalue = pm5->I4s( ep, ps );
433 return ivalue;
434}
435#endif /* USE_GOLEM_MODE */
436
437/* --------------------------------------------------------
438 4-point coefficients rank-1
439 * --------------------------------------------------------
440 */
441// Global chord indexing, golem-like
442#ifdef USE_GOLEM_MODE
443ncomplex Minor4::A( int ep, int i ) {
444 ncomplex ivalue = -pm5->I4Dsi( ep, ps, ix( i + offs ) );
445 return ivalue;
446}
447#endif /* USE_GOLEM_MODE */
448
449// Local chord indexing
450ncomplex Minor4::evalD( int ep, int i ) {
451 ncomplex ivalue = 0;
452 if ( i >= ps || ps == 5 ) i = i + 1;
453 ivalue = -pm5->I4Dsi( ep, ps, i );
454 return ivalue;
455}
456
457/* --------------------------------------------------------
458 4-point coefficients rank-2
459 * --------------------------------------------------------
460 */
461// Global chord indexing, golem-like
462#ifdef USE_GOLEM_MODE
463ncomplex Minor4::A( int ep, int i, int j ) {
464 ncomplex ivalue = pm5->I4D2sij( ep, ps, ix( i + offs ), ix( j + offs ) );
465 return ivalue;
466}
467
468ncomplex Minor4::B( int ep ) {
469 ncomplex ivalue = -0.5 * pm5->I4Ds( ep, ps );
470 return ivalue;
471}
472#endif /* USE_GOLEM_MODE */
473
474// Local chord indexing
475ncomplex Minor4::evalD( int ep, int i, int j ) {
476 ncomplex ivalue = 0;
477
478 if ( i == 0 && j == 0 ) { ivalue = -0.5 * pm5->I4Ds( ep, ps ); }
479 else
480 {
481 assert( i != 0 && j != 0 ); // D01, D02, etc do not exist
482 if ( i >= ps || ps == 5 ) i = i + 1;
483 if ( j >= ps || ps == 5 ) j = j + 1;
484
485 ivalue = pm5->I4D2sij( ep, ps, i, j );
486 }
487 return ivalue;
488}
489
490/* --------------------------------------------------------
491 4-point coefficients rank-3
492 * --------------------------------------------------------
493 */
494// Global chord indexing, golem-like
495#ifdef USE_GOLEM_MODE
496ncomplex Minor4::A( int ep, int i, int j, int k ) {
497 ncomplex ivalue = -pm5->I4D3sijk( ep, ps, ix( i + offs ), ix( j + offs ), ix( k + offs ) );
498 return ivalue;
499}
500
501ncomplex Minor4::B( int ep, int k ) {
502 ncomplex ivalue = 0.5 * pm5->I4D2si( ep, ps, ix( k + offs ) );
503 return ivalue;
504}
505#endif /* USE_GOLEM_MODE */
506
507// Local chord indexing
508ncomplex Minor4::evalD( int ep, int i, int j, int k ) {
509 ncomplex ivalue = 0;
510
511 if ( i == 0 && j == 0 )
512 {
513 assert( k != 0 ); // D000 does not exist, D100 is a wrong syntax
514 if ( k >= ps || ps == 5 ) k = k + 1;
515
516 ivalue = 0.5 * pm5->I4D2si( ep, ps, k );
517 }
518 else
519 {
520 assert( i != 0 && j != 0 && k != 0 ); // D110, D012, etc do not exist
521 if ( i >= ps || ps == 5 ) i = i + 1;
522 if ( j >= ps || ps == 5 ) j = j + 1;
523 if ( k >= ps || ps == 5 ) k = k + 1;
524 ivalue = -pm5->I4D3sijk( ep, ps, i, j, k );
525 }
526 return ivalue;
527}
528
529/* --------------------------------------------------------
530 4-point coefficients rank-4
531 * --------------------------------------------------------
532 */
533// Global chord indexing, golem-like
534#ifdef USE_GOLEM_MODE
535ncomplex Minor4::A( int ep, int i, int j, int k, int l ) {
536 ncomplex ivalue =
537 pm5->I4D4sijkl( ep, ps, ix( i + offs ), ix( j + offs ), ix( k + offs ), ix( l + offs ) );
538 return ivalue;
539}
540
541ncomplex Minor4::B( int ep, int k, int l ) {
542 ncomplex ivalue = -0.5 * pm5->I4D3sij( ep, ps, ix( k + offs ), ix( l + offs ) );
543 return ivalue;
544}
545
546ncomplex Minor4::C( int ep ) {
547 ncomplex ivalue = 0.25 * pm5->I4D2s( ep, ps );
548 return ivalue;
549}
550#endif /* USE_GOLEM_MODE */
551
552// Local chord indexing
553ncomplex Minor4::evalD( int ep, int i, int j, int k, int l ) {
554 ncomplex ivalue = 0;
555 if ( i == 0 && j == 0 )
556 {
557 if ( k == 0 && l == 0 ) { ivalue = 0.25 * pm5->I4D2s( ep, ps ); }
558 else
559 {
560 assert( i == 0 && j == 0 && k != 0 && l != 0 ); // D0001 does not exist, D1200 is a wrong
561 // syntax
562 if ( k >= ps || ps == 5 ) k = k + 1;
563 if ( l >= ps || ps == 5 ) l = l + 1;
564
565 ivalue = -0.5 * pm5->I4D3sij( ep, ps, k, l );
566 }
567 }
568 else
569 {
570 assert( i != 0 && j != 0 && k != 0 && l != 0 ); // D110, D012, etc do not exist
571 if ( i >= ps || ps == 5 ) i = i + 1;
572 if ( j >= ps || ps == 5 ) j = j + 1;
573 if ( k >= ps || ps == 5 ) k = k + 1;
574 if ( l >= ps || ps == 5 ) l = l + 1;
575 ivalue = pm5->I4D4sijkl( ep, ps, i, j, k, l );
576 }
577 return ivalue;
578}
579
580/* ========================================================
581 * ========================================================
582 *
583 * TRIANGLE coefficients - 3 point
584 *
585 * ========================================================
586 * ========================================================
587 */
588/* --------------------------------------------------------
589 3-point scalar for GolemMode
590 * --------------------------------------------------------
591 */
592#ifdef USE_GOLEM_MODE
593ncomplex Minor3::A( int ep ) {
594 ncomplex ivalue = pm5->I3st( ep, ps, pt );
595 return ivalue;
596}
597#endif /* USE_GOLEM_MODE */
598
599/* --------------------------------------------------------
600 3-point coefficients rank-1
601 * --------------------------------------------------------
602 */
603// Global chord indexing, golem-like
604#ifdef USE_GOLEM_MODE
605ncomplex Minor3::A( int ep, int i ) {
606 ncomplex ivalue = -pm5->I3Dsti( ep, ps, pt, ix( i + offs ) );
607 return ivalue;
608}
609#endif /* USE_GOLEM_MODE */
610
611// Local chord indexing
612ncomplex Minor3::evalC( int ep, int i ) {
613 ncomplex ivalue = 0;
614 if ( i >= ps ) i = i + 1;
615 if ( i >= pt || pt == 5 )
616 {
617 i = i + 1;
618 if ( i == ps ) i = i + 1;
619 }
620 ivalue = -pm5->I3Dsti( ep, ps, pt, i );
621 return ivalue;
622}
623
624/* --------------------------------------------------------
625 3-point coefficients rank-2
626 * --------------------------------------------------------
627 */
628// Global chord indexing, golem-like
629#ifdef USE_GOLEM_MODE
630ncomplex Minor3::A( int ep, int i, int j ) {
631 ncomplex ivalue = pm5->I3D2stij( ep, ps, pt, ix( i + offs ), ix( j + offs ) );
632 return ivalue;
633}
634
635ncomplex Minor3::B( int ep ) {
636 ncomplex ivalue = -0.5 * pm5->I3Dst( ep, ps, pt );
637 return ivalue;
638}
639#endif /* USE_GOLEM_MODE */
640
641// Local chord indexing
642ncomplex Minor3::evalC( int ep, int i, int j ) {
643 ncomplex ivalue = 0;
644
645 if ( i == 0 && j == 0 ) { ivalue = -0.5 * pm5->I3Dst( ep, ps, pt ); }
646 else
647 {
648 assert( i != 0 && j != 0 ); // C01, C02, etc do not exist
649 int tmp;
650 tswap( i, j, tmp );
651
652 if ( i >= ps ) i = i + 1;
653 if ( i >= pt || pt == 5 )
654 {
655 i = i + 1;
656 if ( i == ps ) i = i + 1;
657 }
658 if ( j >= ps ) j = j + 1;
659 if ( j >= pt || pt == 5 )
660 {
661 j = j + 1;
662 if ( j == ps ) j = j + 1;
663 }
664
665 ivalue = pm5->I3D2stij( ep, ps, pt, i, j );
666 }
667 return ivalue;
668}
669
670/* --------------------------------------------------------
671 3-point coefficients rank-3
672 * --------------------------------------------------------
673 */
674// Global chord indexing, golem-like
675#ifdef USE_GOLEM_MODE
676ncomplex Minor3::A( int ep, int i, int j, int k ) {
677 ncomplex ivalue =
678 -pm5->I3D3stijk( ep, ps, pt, ix( i + offs ), ix( j + offs ), ix( k + offs ) );
679 return ivalue;
680}
681
682ncomplex Minor3::B( int ep, int k ) {
683 ncomplex ivalue = 0.5 * pm5->I3D2sti( ep, ps, pt, ix( k + offs ) );
684 return ivalue;
685}
686#endif /* USE_GOLEM_MODE */
687
688// Local chord indexing
689ncomplex Minor3::evalC( int ep, int i, int j, int k ) {
690 ncomplex ivalue = 0;
691
692 if ( i == 0 && j == 0 )
693 {
694 assert( i == 0 && j == 0 && k != 0 ); // C000 does not exist, C100 is a wrong syntax
695 if ( k >= ps ) k = k + 1;
696 if ( k >= pt || pt == 5 )
697 {
698 k = k + 1;
699 if ( k == ps ) k = k + 1;
700 }
701
702 ivalue = 0.5 * pm5->I3D2sti( ep, ps, pt, k );
703 }
704 else
705 {
706 assert( i != 0 && j != 0 && k != 0 ); // D110, D012, etc do not exist
707 if ( i >= ps ) i = i + 1;
708 if ( i >= pt || pt == 5 )
709 {
710 i = i + 1;
711 if ( i == ps ) i = i + 1;
712 }
713 if ( j >= ps ) j = j + 1;
714 if ( j >= pt || pt == 5 )
715 {
716 j = j + 1;
717 if ( j == ps ) j = j + 1;
718 }
719 if ( k >= ps ) k = k + 1;
720 if ( k >= pt || pt == 5 )
721 {
722 k = k + 1;
723 if ( k == ps ) k = k + 1;
724 }
725 ivalue = -pm5->I3D3stijk( ep, ps, pt, i, j, k );
726 }
727 return ivalue;
728}
729
730/* ========================================================
731 * ========================================================
732 *
733 * BUBBLE coefficients - 2 point
734 *
735 * ========================================================
736 * ========================================================
737 */
738/* --------------------------------------------------------
739 2-point scalar for GolemMode
740 * --------------------------------------------------------
741 */
742#ifdef USE_GOLEM_MODE
743ncomplex Minor2::A( int ep ) {
744 ncomplex ivalue = pm5->I2stu( ep, ps, pt, pu );
745 return ivalue;
746}
747#endif /* USE_GOLEM_MODE */
748
749/* --------------------------------------------------------
750 2-point coefficients rank-1
751 * --------------------------------------------------------
752 */
753#ifdef USE_GOLEM_MODE
754ncomplex Minor2::A( int ep, int i ) {
755 ncomplex ivalue = -pm5->I2Dstui( ep, ps, pt, pu, ix( i + offs ) );
756 return ivalue;
757}
758#endif /* USE_GOLEM_MODE */
759
760// Local chord indexing
761ncomplex Minor2::evalB( int ep, int i ) {
762 ncomplex ivalue = 0;
763
764 if ( i >= ps ) i = i + 1;
765 if ( i >= pt )
766 {
767 i = i + 1;
768 if ( i == ps ) i = i + 1;
769 }
770 if ( i >= pu || pu == 5 )
771 {
772 i = i + 1;
773 if ( i == ps ) i = i + 1;
774 if ( i == pt ) i = i + 1;
775 }
776 ivalue = -pm5->I2Dstui( ep, ps, pt, pu, i );
777 return ivalue;
778}
779
780/* --------------------------------------------------------
781 2-point coefficients rank-2
782 * --------------------------------------------------------
783 */
784#ifdef USE_GOLEM_MODE
785ncomplex Minor2::A( int ep, int i, int j ) {
786 ncomplex ivalue = pm5->I2D2stuij( ep, ps, pt, pu, ix( i + offs ), ix( j + offs ) );
787 return ivalue;
788}
789
790ncomplex Minor2::B( int ep ) {
791 ncomplex ivalue = -0.5 * pm5->I2Dstu( ep, ps, pt, pu );
792 return ivalue;
793}
794#endif /* USE_GOLEM_MODE */
795
796// Local chord indexing
797ncomplex Minor2::evalB( int ep, int i, int j ) {
798 ncomplex ivalue = 0;
799
800 if ( i == 0 && j == 0 ) { ivalue = -0.5 * pm5->I2Dstu( ep, ps, pt, pu ); }
801 else
802 {
803 assert( i != 0 && j != 0 ); // B01, B02, etc do not exist
804 if ( i >= ps ) i = i + 1;
805 if ( i >= pt )
806 {
807 i = i + 1;
808 if ( i == ps ) i = i + 1;
809 }
810 if ( i >= pu || pu == 5 )
811 {
812 i = i + 1;
813 if ( i == ps ) i = i + 1;
814 if ( i == pt ) i = i + 1;
815 }
816 ivalue = pm5->I2D2stuij( ep, ps, pt, pu, i, i );
817 }
818 return ivalue;
819}
std::complex< double > ncomplex
XmlRpcServer s
ncomplex evalB(int ep)
ncomplex evalC(int ep)
ncomplex evalD(int ep)
ncomplex I2stu(int ep, int s, int t, int u)
Definition minor.cpp:919
double M2(int i, int j, int l, int m) PURE
Definition minor.cpp:480
ncomplex I4D3sijk(int ep, int s, int i, int j, int k)
Definition minor.cpp:2266
ncomplex I3st(int ep, int s, int t)
Definition minor.cpp:872
ncomplex I4D2si(int ep, int s, int i)
Definition minor.cpp:1308
ncomplex I3D3stijk(int ep, int s, int t, int i, int j, int k)
Definition minor.cpp:3384
ncomplex I4D3sij(int ep, int s, int i, int j)
Definition minor.cpp:2022
ncomplex evalE(int ep)
Definition minoreval.cpp:24
ncomplex I3D2stij(int ep, int s, int t, int i, int j)
Definition minor.cpp:2167
ncomplex I4D4sijk(int ep, int s, int i, int j, int k)
Definition minor.cpp:3202
ncomplex I4s(int ep, int s)
Definition minor.cpp:834
double M1(int i, int l) PURE
Definition minor.cpp:474
ncomplex I4D3si(int ep, int s, int i)
Definition minor.cpp:1974
ncomplex I4D2sij(int ep, int s, int i, int j)
Definition minor.cpp:1489
ncomplex I2D2stuij(int ep, int s, int t, int u, int i, int j)
Definition minor.cpp:3265
ncomplex I4Ds(int ep, int s)
Definition minor.cpp:974
ncomplex I4D4sijkl(int ep, int s, int i, int j, int k, int l)
Definition minor.cpp:3521
ncomplex I4Dsi(int ep, int s, int i)
Definition minor.cpp:1056
ncomplex I4D2s(int ep, int s)
Definition minor.cpp:1220
#define tswap(x, y, t)
Definition minor.h:35
#define ix(i)
double int * ep
Definition qcdloop1.h:82