Skip to content

Commit 55e32f3

Browse files
committed
Add color.h test
Don't run this test with tform and less than 4 threads, it goes extremely slowly. See discussion in form-dev#524 .
1 parent 0289435 commit 55e32f3

File tree

3 files changed

+1822
-1
lines changed

3 files changed

+1822
-1
lines changed

check/Makefile.am

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,5 @@ EXTRA_DIST = \
3535
features.frm \
3636
fixes.frm \
3737
forcer/forcer.frm \
38-
formunit/fu.frm
38+
formunit/fu.frm \
39+
include/color.h

check/color.frm

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
#ifndef `TEST'
2+
#message Use -D TEST=XXX
3+
#terminate
4+
#else
5+
#include `NAME_' # `TEST'
6+
#endif
7+
.end
8+
9+
*--#[ tloop :
10+
#-
11+
12+
* This is a modified version of tloop.frm from the color.h example files.
13+
14+
Off Statistics;
15+
16+
* Larger than 5 becomes extremely slow under valgrind.
17+
#define SIZE "5"
18+
*#define ALTERNATEMETHOD "1"
19+
*
20+
* Test program for the color traces in the paper and a few more.
21+
* The paper: "Color traces for arbitrary groups"
22+
* by T. van Ritbergen, A.N. Schellekens and J.A.M. Vermaseren.
23+
*
24+
* The object is to express color traces in terms of group invariants
25+
* in such a way that the group has not been specified yet. The few
26+
* remaining invariants can be substituted afterwards. The expressions
27+
* in terms of invariants are better for publications. One sees more
28+
* about the structure of the problem this way.
29+
*
30+
* All declarations are made in the file cfactors.h
31+
* One needs version 3 or later of FORM to run these programs.
32+
* The programs will handle all color structures with up to 14 vertices.
33+
* One vertex is one generator in any representation.
34+
* Currently the program handles only one type of non-adjoint representaion.
35+
* If there are two different representations of such type one has to
36+
* try to run the problem in stages.
37+
*
38+
* Examples are:
39+
* One quark-loop with SIZE gluons in a maximally non-planar configuration
40+
* (TYPE = qloop)
41+
* Same but qluon loop (everything in the adjoint representation)
42+
* (TYPE = gloop)
43+
* Two quark loops with SIZE connecting gluons like a circular ladder.
44+
* (TYPE = qqloop)
45+
* Same with one quark loop and one gluon loop.
46+
* (TYPE = qgloop)
47+
* Same with two gluon loops.
48+
* (TYPE = ggloop)
49+
* The Coxeter graph (diagram with 14 vertices in the adjoint representation
50+
* in which there are no loops with fewer than 6 lines) (TYPE = g14)
51+
*
52+
* One should not choose SIZE larger than 7 or most likely the simplification
53+
* routine cannot simplify the final result completely (in some rare cases
54+
* it can though for SIZE = 8).
55+
* For execution times, see the paper.
56+
* It does get very slow for quarks and SIZE > 7.
57+
*
58+
* Program by J.Vermaseren, 24-may-1997
59+
*
60+
#include include/color.h
61+
AutoDeclare Index i,j,k;
62+
CFunction acc;
63+
Symbol x;
64+
.global
65+
G Q{2*`SIZE'} = <T(i1,i2,j1)>*...*<T(i`SIZE',i{`SIZE'+1},j`SIZE')>
66+
*<T(i{`SIZE'+1},i{`SIZE'+2},j1)>*...*<T(i{`SIZE'*2},i{2*`SIZE'+1},j`SIZE')>
67+
*replace_(i{`SIZE'*2+1},i1);
68+
69+
G G{2*`SIZE'} = <f(i1,i2,j1)>*...*<f(i`SIZE',i{`SIZE'+1},j`SIZE')>
70+
*<f(i{`SIZE'+1},i{`SIZE'+2},j1)>*...*<f(i{`SIZE'*2},i{2*`SIZE'+1},j`SIZE')>
71+
*replace_(i{`SIZE'*2+1},i1);
72+
73+
G QQ`SIZE' = <T(i1,i2,j1)>*...*<T(i`SIZE',i{`SIZE'+1},j`SIZE')>
74+
*<T(k1,k2,j1)>*...*<T(k`SIZE',k{`SIZE'+1},j`SIZE')>
75+
*replace_(i{`SIZE'+1},i1,k{`SIZE'+1},k1);
76+
77+
G QG`SIZE' = <T(i1,i2,j1)>*...*<T(i`SIZE',i{`SIZE'+1},j`SIZE')>
78+
*<f(k1,k2,j1)>*...*<f(k`SIZE',k{`SIZE'+1},j`SIZE')>
79+
*replace_(i{`SIZE'+1},i1,k{`SIZE'+1},k1);
80+
81+
G GG`SIZE' = <f(i1,i2,j1)>*...*<f(i`SIZE',i{`SIZE'+1},j`SIZE')>
82+
*<f(k1,k2,j1)>*...*<f(k`SIZE',k{`SIZE'+1},j`SIZE')>
83+
*replace_(i{`SIZE'+1},i1,k{`SIZE'+1},k1);
84+
85+
* These take too long under valgrind.
86+
*G girth14 =
87+
* f(i1,i2,i3)*f(i1,i4,i5)*f(i2,i6,i7)*f(i3,i8,i9)
88+
* *f(i4,i10,i11)*f(i5,i12,i13)*f(i6,i14,i15)*f(i7,i16,i17)
89+
* *f(i8,i18,i19)*f(i9,i20,i21)
90+
* *f(i10,i21,i15)*f(i13,i19,i14)*f(i17,i11,i18)*f(i12,i16,i20);
91+
*
92+
*G girth24 =
93+
* f(i36,i1,i2)*f(i36,i3,i4)*f(i1,i5,i6)*f(i2,i7,i8)
94+
* *f(i3,i9,i10)*f(i4,i11,i12)*f(i5,i13,i14)*f(i6,i15,i16)
95+
* *f(i7,i17,i18)*f(i8,i19,i20)*f(i9,i21,i22)*f(i10,i23,i24)
96+
* *f(i11,i25,i26)*f(i12,i27,i28)*f(i13,i23,i29)*f(i14,i27,i30)
97+
* *f(i15,i25,i31)*f(i16,i21,i32)*f(i17,i26,i29)*f(i18,i32,i33)
98+
* *f(i19,i31,i34)*f(i20,i22,i30)*f(i24,i34,i35)*f(i28,i33,i35);
99+
*
100+
*G fiveq = T(i1,i2,j1)*T(i2,i3,j2)*T(i3,i1,j3)*
101+
* T(i4,i5,j2)*T(i5,i6,j4)*T(i6,i4,j5)*
102+
* T(i7,i8,j4)*T(i8,i9,j6)*T(i9,i7,j7)*
103+
* T(i10,i11,j6)*T(i11,i12,j1)*T(i12,i10,j8)*
104+
* T(i13,i14,j3)*T(i14,i15,j5)*T(i15,i16,j7)*T(i16,i13,j8);
105+
106+
Sum i1,...,i{`SIZE'*2},j1,...,j`SIZE',k1,...,k`SIZE';
107+
.sort
108+
109+
#call color
110+
#call SORT(tloop-1)
111+
#call adjoint
112+
#call SORT(tloop-2)
113+
.sort
114+
#call simpli
115+
id acc(x?) = x;
116+
*Print +s;
117+
.sort
118+
119+
* Check results
120+
Local Q10 = - Q10
121+
+ NA*I2R*cR^4
122+
- 5*NA*I2R*cA*cR^3
123+
+ 35/4*NA*I2R*cA^2*cR^2
124+
- 155/24*NA*I2R*cA^3*cR
125+
+ 125/72*NA*I2R*cA^4
126+
+ 5*d44(cOlpR1,cOlpA1)*cR
127+
- 6*d44(cOlpR1,cOlpA1)*cA
128+
+ 1/3*d44(cOlpA1,cOlpA2)*I2R
129+
;
130+
131+
Local G10 = - G10
132+
- 1/36*NA*cA^5
133+
+ 2/3*d44(cOlpA1,cOlpA2)*cA
134+
;
135+
136+
Local QQ5 = - QQ5
137+
- 5/144*NA*I2R^2*cA^3
138+
+ 11/48*d33(cOlpR1,cOlpR2)*cA^2
139+
- 5/6*d44(cOlpR1,cOlpR2)*cA
140+
+ 1/6*d44(cOlpR1,cOlpA1)*I2R
141+
+ d55(cOlpR1,cOlpR2)
142+
;
143+
144+
Local QG5 = - QG5
145+
- 5/144*i_*NA*I2R*cA^4
146+
- 3/4*d44(cOlpR1,cOlpA1)*i_*cA
147+
+ 1/12*d44(cOlpA1,cOlpA2)*i_*I2R
148+
;
149+
150+
Local GG5 = - GG5
151+
+ 5/144*NA*cA^5
152+
+ 2/3*d44(cOlpA1,cOlpA2)*cA
153+
;
154+
.sort
155+
156+
#do ex = {`activeexprnames_'}
157+
#if `ZERO_`ex'' == 0
158+
#message Error in `ex'
159+
#terminate
160+
#endif
161+
#enddo
162+
163+
.end
164+
#pend_if valgrind? && ncpu < 4
165+
assert succeeded?
166+
*--#] tloop :

0 commit comments

Comments
 (0)