Geometry for MFT (Brigitte)
[u/mrichter/AliRoot.git] / TEPEMGEN / dtrint.f
1       FUNCTION DTRINT(F,NSD,NPT,EPS,X1,Y1,X2,Y2,X3,Y3)
2 C     INTEGRATION OVER A TRIANGLE USING A 7-, 25- OR 64-POINT FORMULA,
3 C     WITH OR WITHOUT SUBDIVISION OF THE TRIANGLE.
4 C     CERNLIB program D105.
5
6       IMPLICIT DOUBLE PRECISION (A-H,O-Z)
7       CHARACTER NAME*(*)
8       CHARACTER*80 ERRTXT
9       PARAMETER (NAME = 'DTRINT')
10       PARAMETER (Z1 = 1, HALF = Z1/2, KMX = 35)
11
12       DIMENSION R(KMX),XP1(KMX),XP2(KMX),XP3(KMX),YP1(KMX),YP2(KMX)
13       DIMENSION YP3(KMX)
14       DIMENSION U(8,3),V(32,3),W(32,3),UU(5,2),WW(5,2)
15       DIMENSION G1(32),G2(32)
16       DIMENSION JZ(3),JZ0(3),JZ1(3),IZ(3,3)
17
18       DATA JZ /2,5,8/, JZ0 /2,10,32/, JZ1 /3,5,0/
19       DATA ((IZ(I,M),I=1,3),M=1,3) /1,0,1, 5,5,1, 8,24,8/
20
21       DATA (U(J,1),J=1,2)
22      1/0.89871 34926 76543 661D0, 0.52985 79358 94884 910D0/
23
24       DATA (UU(J,1),J=1,3)
25      1/0.20257 30146 46912 678D0, 0.94028 41282 10230 180D0,
26      2 0.66666 66666 66666 667D0/
27
28       DATA (V(J,1),J=1,2)
29      1/0.69614 04780 29630 984D0,-0.41042 61923 15345 269D0/
30
31       DATA (W(J,1),J=1,2)
32      1/0.12593 91805 44827 153D0, 0.13239 41527 88506 181D0/
33
34       DATA (WW(J,1),J=1,3)
35      1/0.12593 91805 44827 153D0, 0.13239 41527 88506 181D0,
36      2 0.22500 00000 00000 000D0/
37
38       DATA (U(J,2),J=1,5)
39      1/0.09853 50857 98826 426D0, 0.30453 57266 46363 905D0,
40      2 0.56202 51897 52613 856D0, 0.80198 65821 26391 827D0,
41      3 0.96019 01429 48531 258D0/
42
43       DATA (UU(J,2),J=1,5)
44      1/0.09853 50857 98826 426D0, 0.30453 57266 46363 905D0,
45      2 0.56202 51897 52613 856D0, 0.80198 65821 26391 827D0,
46      3 0.96019 01429 48531 258D0/
47
48       DATA (V(J,2),J=1,10)
49      1/0.08929 05088 68733 569D0, 0.27596 41378 55221 135D0,
50      2 0.50929 58998 63672 021D0, 0.72674 40774 36169 444D0,
51      3 0.87010 49558 08923 811D0, 0.05305 81196 71298 357D0,
52      4 0.16398 31426 29800 463D0, 0.30263 33161 88105 613D0,
53      5 0.43184 51615 91612 961D0, 0.51703 29238 43772 854D0/
54
55       DATA (W(J,2),J=1,10)
56      1/0.00373 11043 33755 67687D0, 0.01751 09983 64327 66347D0,
57      2 0.03468 30128 62731 40026D0, 0.03960 81662 64094 70756D0,
58      3 0.02293 01607 03185 09559D0, 0.00753 74033 90655 24076D0,
59      4 0.03537 49042 20966 93175D0, 0.07006 50090 06743 44063D0,
60      5 0.08001 45747 72320 84819D0, 0.04632 24438 58996 77269D0/
61
62       DATA (WW(J,2),J=1,5)
63      1/0.00895 88135 94562 71712D0, 0.04204 59349 74644 15024D0,
64      2 0.08327 79304 30389 93562D0, 0.09510 37941 15908 01948D0,
65      3 0.05505 79713 28939 62198D0/
66
67       DATA (U(J,3),J=1,8)
68      1/0.04463 39552 89969 851D0, 0.14436 62570 42145 571D0,
69      2 0.28682 47571 44430 519D0, 0.45481 33151 96573 351D0,
70      3 0.62806 78354 16727 698D0, 0.78569 15206 04369 242D0,
71      4 0.90867 63921 00206 044D0, 0.98222 00848 52636 548D0/
72
73       DATA (V(J,3),J=1,32)
74      1/0.04286 15345 20322 596D0, 0.13863 34522 58088 400D0,
75      2 0.27543 49048 78165 863D0, 0.43675 26131 83286 138D0,
76      3 0.60312 71715 43047 645D0, 0.75449 15975 72500 770D0,
77      4 0.87259 27221 72605 828D0, 0.94321 59843 32136 212D0,
78      5 0.03555 83759 33897 592D0, 0.11501 17574 55156 297D0,
79      6 0.22850 36689 09272 431D0, 0.36233 45216 98467 603D0,
80      7 0.50036 05900 18245 933D0, 0.62593 40960 53638 777D0,
81      8 0.72391 20204 03394 633D0, 0.78250 18150 44463 514D0,
82      9 0.02345 65900 87635 536D0, 0.07586 91469 73958 963D0,
83      A 0.15073 57058 45778 370D0, 0.23901 91375 97290 126D0,
84      B 0.33007 00031 37485 188D0, 0.41290 63582 74039 218D0,
85      C 0.47753 88941 74496 369D0, 0.51618 84882 60827 229D0,
86      D 0.00818 74136 31782 437D0, 0.02648 17727 48961 059D0,
87      E 0.05261 35967 85690 189D0, 0.08342 85178 75344 723D0,
88      F 0.11520 93988 52684 066D0, 0.14412 30431 93925 944D0,
89      G 0.16668 27291 29138 200D0, 0.18017 31901 16990 201D0/
90
91       DATA (W(J,3),J=1,32)
92      1/0.00033 35674 06495 41982D0, 0.00180 62109 19037 15084D0,
93      2 0.00459 97558 03491 41419D0, 0.00801 72595 31391 49525D0,
94      3 0.01073 50189 73158 61631D0, 0.01138 87974 04616 51588D0,
95      4 0.00922 38453 90918 29977D0, 0.00450 98127 16079 21752D0,
96      5 0.00073 27880 81649 19485D0, 0.00396 79231 50289 07586D0,
97      6 0.01010 48428 76312 33624D0, 0.01761 24888 63394 88637D0,
98      7 0.02358 29214 92410 93797D0, 0.02501 91560 68339 84265D0,
99      8 0.02026 31427 34638 24614D0, 0.00990 72539 59652 71520D0,
100      9 0.00103 37234 54873 38862D0, 0.00559 74371 44935 08001D0,
101      A 0.01425 46165 12792 75399D0, 0.02484 54407 11607 46855D0,
102      B 0.03326 77614 32852 32482D0, 0.03529 38169 93822 26192D0,
103      C 0.02858 46432 80634 70277D0, 0.01397 58834 07425 66299D0,
104      D 0.00119 51124 99230 79556D0, 0.00647 13314 41724 90169D0,
105      E 0.01648 01043 12102 39366D0, 0.02872 44103 85925 30995D0,
106      F 0.03846 16575 37508 13161D0, 0.04080 40290 04108 74571D0,
107      G 0.03304 73922 30182 37768D0, 0.01615 78542 78398 33562D0/
108
109       IF(NPT .EQ. 7) THEN
110        M=1
111       ELSE IF(NPT .EQ. 25) THEN
112        M=2
113       ELSE IF(NPT .EQ. 64) THEN
114        M=3
115       ELSE
116        H=0
117        WRITE(ERRTXT,101) NPT
118        CALL MTLPRT(NAME,'D105.1',ERRTXT)
119        GO TO 99
120       END IF
121       K=0
122       C1=X1
123       D1=Y1
124       C2=X2
125       D2=Y2
126       C3=X3
127       D3=Y3
128       A11=HALF*(C2+C3)-C1
129       A12=HALF*(C3-C2)
130       A21=HALF*(D2+D3)-D1
131       A22=HALF*(D3-D2)
132       DO 1 J = 1,JZ(M)
133       G1(J)=A11*U(J,M)+C1
134       G2(J)=A21*U(J,M)+D1
135       DO 1 I = IZ(1,M),IZ(2,M),IZ(3,M)
136       G1(J+I)=G1(J)
137     1 G2(J+I)=G2(J)
138       S=0
139       DO 2 J = 1,JZ0(M)
140       H1=A12*V(J,M)
141       H2=A22*V(J,M)
142     2 S=S+W(J,M)*(F(G1(J)+H1,G2(J)+H2)+F(G1(J)-H1,G2(J)-H2))
143       DO 3 J = 1,JZ1(M)
144     3 S=S+WW(J,M)*F(A11*UU(J,M)+C1,A21*UU(J,M)+D1)
145       S=HALF*ABS(C1*(D2-D3)+C2*(D3-D1)+C3*(D1-D2))*S
146       H=S
147       IF(NSD .EQ. 0) GO TO 99
148       H=0
149
150    10 K=K+1
151       SUM0=S
152       U1=C1
153       V1=D1
154       U2=C2
155       V2=D2
156       U3=C3
157       V3=D3
158    11 C1=HALF*(U2+U3)
159       D1=HALF*(V2+V3)
160       C2=U1
161       D2=V1
162       C3=U2
163       D3=V2
164       XP1(K)=C1
165       YP1(K)=D1
166       XP2(K)=C2
167       YP2(K)=D2
168       XP3(K)=U3
169       YP3(K)=V3
170       A11=HALF*(C2+U3)-C1
171       A12=HALF*(U3-C2)
172       A21=HALF*(D2+V3)-D1
173       A22=HALF*(V3-D2)
174       DO 4 J = 1,JZ(M)
175       G1(J)=A11*U(J,M)+C1
176       G2(J)=A21*U(J,M)+D1
177       DO 4 I = IZ(1,M),IZ(2,M),IZ(3,M)
178       G1(J+I)=G1(J)
179     4 G2(J+I)=G2(J)
180       S=0
181       DO 5 J = 1,JZ0(M)
182       H1=A12*V(J,M)
183       H2=A22*V(J,M)
184     5 S=S+W(J,M)*(F(G1(J)+H1,G2(J)+H2)+F(G1(J)-H1,G2(J)-H2))
185       DO 6 J = 1,JZ1(M)
186     6 S=S+WW(J,M)*F(A11*UU(J,M)+C1,A21*UU(J,M)+D1)
187       S=HALF*ABS(C1*(D2-V3)+C2*(V3-D1)+U3*(D1-D2))*S
188       R(K)=S
189       A11=HALF*(C2+C3)-C1
190       A12=HALF*(C3-C2)
191       A21=HALF*(D2+D3)-D1
192       A22=HALF*(D3-D2)
193       DO 7 J = 1,JZ(M)
194       G1(J)=A11*U(J,M)+C1
195       G2(J)=A21*U(J,M)+D1
196       DO 7 I = IZ(1,M),IZ(2,M),IZ(3,M)
197       G1(J+I)=G1(J)
198     7 G2(J+I)=G2(J)
199       S=0
200       DO 8 J = 1,JZ0(M)
201       H1=A12*V(J,M)
202       H2=A22*V(J,M)
203     8 S=S+W(J,M)*(F(G1(J)+H1,G2(J)+H2)+F(G1(J)-H1,G2(J)-H2))
204       DO 9 J = 1,JZ1(M)
205     9 S=S+WW(J,M)*F(A11*UU(J,M)+C1,A21*UU(J,M)+D1)
206       S=HALF*ABS(C1*(D2-D3)+C2*(D3-D1)+C3*(D1-D2))*S
207       SUM=S+R(K)
208       IF(ABS(SUM0-SUM) .GT. EPS*(1+ABS(SUM))) THEN
209        IF(K .LT. KMX) GO TO 10
210        H=0
211        CALL MTLPRT(NAME,'D105.2','TOO HIGH ACCURACY REQUIRED')
212        GO TO 99
213       ELSE
214        H=H+SUM
215        K=K-1
216        IF(K .LE. 0)  GO TO 99
217        U1=XP1(K)
218        V1=YP1(K)
219        U2=XP2(K)
220        V2=YP2(K)
221        U3=XP3(K)
222        V3=YP3(K)
223        SUM0=R(K)
224        GO TO 11
225       END IF
226    99 DTRINT=H
227       RETURN
228   101 FORMAT('INCORRECT NUMBER OF POINTS =',I5)
229       END