COSMOS v7.655  COSMOSv7655
(AirShowerMC)
k16pGaussLeg.f
Go to the documentation of this file.
1 ! test k16pGaussLeg.
2 ! implicit none
3 ! real*8 a, b, ans, func
4 ! integer n
5 ! external func
6 ! a = 0.
7 ! b = asin(1.d0) * 7.d0
8 ! do n = 2, 16
9 ! call k16pGaussLeg(func, a, b, n, ans)
10 ! write(*, *) ans
11 ! enddo
12 ! end
13 ! real*8 function func(x)
14 ! implicit none
15 ! real*8 x
16 ! func = sin(x)
17 ! end
18 !***************************************************
19  subroutine k16pgaussleg(func, a, b, n, ans)
20 !***************************************************
21 ! Gauss-Legendre <= 16 points integration
22 ! quadrature. Adapted from Mori's code in
23 ! Maruzen book.
24 !
25 ! func: real*8. input. integrand function name.
26 ! a: real*8. input. lower bound of integration
27 ! b: real*8. input. upper bound of integration
28 ! n: integer. input number of points
29 ! to be used 2 <= n <= 16
30 ! ans: real*8. output. result of integration
31 ! -------------------------------------------------
32  implicit none
33  integer n
34  real*8 func, a, b, ans
35  external func
36 
37  real*8 c1, c2
38  integer nh,i
39  real*8 coef(0:16,16), weight(0:16,16)
40 
41  data (coef(i, 1),i=0, 0) /
42  * 0.0000000000000000d+00 /
43  data (weight(i, 1),i=0, 0) /
44  * 0.2000000000000000d+01 /
45  data (coef(i, 2),i=1, 1) /
46  * 0.5773502691896257d+00 /
47  data (weight(i, 2),i=1, 1) /
48  * 0.9999999999999998d+00 /
49  data (coef(i, 3),i=0, 1) /
50  * 0.0000000000000000d+00,
51  * 0.7745966692414832d+00 /
52  data (weight(i, 3),i=0, 1) /
53  * 0.8888888888888888d+00,
54  * 0.5555555555555558d+00 /
55  data (coef(i, 4),i=1, 2) /
56  * 0.3399810435848563d+00,
57  * 0.8611363115940525d+00 /
58  data (weight(i, 4),i=1, 2) /
59  * 0.6521451548625459d+00,
60  * 0.3478548451374539d+00 /
61  data (coef(i, 5),i=0, 2) /
62  * 0.0000000000000000d+00,
63  * 0.5384693101056831d+00,
64  * 0.9061798459386639d+00 /
65  data (weight(i, 5),i=0, 2) /
66  * 0.5688888888888888d+00,
67  * 0.4786286704993666d+00,
68  * 0.2369268850561892d+00 /
69  data (coef(i, 6),i=1, 3) /
70  * 0.2386191860831969d+00,
71  * 0.6612093864662644d+00,
72  * 0.9324695142031520d+00 /
73  data (weight(i, 6),i=1, 3) /
74  * 0.4679139345726909d+00,
75  * 0.3607615730481386d+00,
76  * 0.1713244923791703d+00 /
77  data (coef(i, 7),i=0, 3) /
78  * 0.0000000000000000d+00,
79  * 0.4058451513773972d+00,
80  * 0.7415311855993944d+00,
81  * 0.9491079123427584d+00 /
82  data (weight(i, 7),i=0, 3) /
83  * 0.4179591836734694d+00,
84  * 0.3818300505051189d+00,
85  * 0.2797053914892767d+00,
86  * 0.1294849661688699d+00 /
87  data (coef(i, 8),i=1, 4) /
88  * 0.1834346424956498d+00,
89  * 0.5255324099163289d+00,
90  * 0.7966664774136267d+00,
91  * 0.9602898564975361d+00 /
92  data (weight(i, 8),i=1, 4) /
93  * 0.3626837833783622d+00,
94  * 0.3137066458778873d+00,
95  * 0.2223810344533746d+00,
96  * 0.1012285362903763d+00 /
97  data (coef(i, 9),i=0, 4) /
98  * 0.0000000000000000d+00,
99  * 0.3242534234038089d+00,
100  * 0.6133714327005903d+00,
101  * 0.8360311073266357d+00,
102  * 0.9681602395076260d+00 /
103  data (weight(i, 9),i=0, 4) /
104  * 0.3302393550012598d+00,
105  * 0.3123470770400028d+00,
106  * 0.2606106964029356d+00,
107  * 0.1806481606948573d+00,
108  * 0.8127438836157435d-01 /
109  data (coef(i,10),i=1, 5) /
110  * 0.1488743389816312d+00,
111  * 0.4333953941292473d+00,
112  * 0.6794095682990244d+00,
113  * 0.8650633666889845d+00,
114  * 0.9739065285171717d+00 /
115  data (weight(i,10),i=1, 5) /
116  * 0.2955242247147527d+00,
117  * 0.2692667193099963d+00,
118  * 0.2190863625159819d+00,
119  * 0.1494513491505806d+00,
120  * 0.6667134430868799d-01 /
121  data (coef(i,11),i=0, 5) /
122  * 0.0000000000000000d+00,
123  * 0.2695431559523450d+00,
124  * 0.5190961292068118d+00,
125  * 0.7301520055740493d+00,
126  * 0.8870625997680953d+00,
127  * 0.9782286581460569d+00 /
128  data (weight(i,11),i=0, 5) /
129  * 0.2729250867779006d+00,
130  * 0.2628045445102467d+00,
131  * 0.2331937645919905d+00,
132  * 0.1862902109277342d+00,
133  * 0.1255803694649046d+00,
134  * 0.5566856711617373d-01 /
135  data (coef(i,12),i=1, 6) /
136  * 0.1252334085114689d+00,
137  * 0.3678314989981802d+00,
138  * 0.5873179542866174d+00,
139  * 0.7699026741943046d+00,
140  * 0.9041172563704747d+00,
141  * 0.9815606342467192d+00 /
142  data (weight(i,12),i=1, 6) /
143  * 0.2491470458134029d+00,
144  * 0.2334925365383548d+00,
145  * 0.2031674267230659d+00,
146  * 0.1600783285433463d+00,
147  * 0.1069393259953185d+00,
148  * 0.4717533638651187d-01 /
149  data (coef(i,13),i=0, 6) /
150  * 0.0000000000000000d+00,
151  * 0.2304583159551348d+00,
152  * 0.4484927510364469d+00,
153  * 0.6423493394403402d+00,
154  * 0.8015780907333098d+00,
155  * 0.9175983992229779d+00,
156  * 0.9841830547185881d+00 /
157  data (weight(i,13),i=0, 6) /
158  * 0.2325515532308739d+00,
159  * 0.2262831802628972d+00,
160  * 0.2078160475368886d+00,
161  * 0.1781459807619456d+00,
162  * 0.1388735102197873d+00,
163  * 0.9212149983772848d-01,
164  * 0.4048400476531587d-01 /
165  data (coef(i,14),i=1, 7) /
166  * 0.1080549487073436d+00,
167  * 0.3191123689278898d+00,
168  * 0.5152486363581540d+00,
169  * 0.6872929048116854d+00,
170  * 0.8272013150697650d+00,
171  * 0.9284348836635735d+00,
172  * 0.9862838086968123d+00 /
173  data (weight(i,14),i=1, 7) /
174  * 0.2152638534631578d+00,
175  * 0.2051984637212956d+00,
176  * 0.1855383974779379d+00,
177  * 0.1572031671581936d+00,
178  * 0.1215185706879031d+00,
179  * 0.8015808715976016d-01,
180  * 0.3511946033175195d-01 /
181  data (coef(i,15),i=0, 7) /
182  * 0.0000000000000000d+00,
183  * 0.2011940939974345d+00,
184  * 0.3941513470775634d+00,
185  * 0.5709721726085388d+00,
186  * 0.7244177313601700d+00,
187  * 0.8482065834104272d+00,
188  * 0.9372733924007058d+00,
189  * 0.9879925180204854d+00 /
190  data (weight(i,15),i=0, 7) /
191  * 0.2025782419255613d+00,
192  * 0.1984314853271116d+00,
193  * 0.1861610000155623d+00,
194  * 0.1662692058169940d+00,
195  * 0.1395706779261542d+00,
196  * 0.1071592204671719d+00,
197  * 0.7036604748810814d-01,
198  * 0.3075324199611710d-01 /
199  data (coef(i,16),i=1, 8) /
200  * 0.9501250983763744d-01,
201  * 0.2816035507792589d+00,
202  * 0.4580167776572274d+00,
203  * 0.6178762444026437d+00,
204  * 0.7554044083550029d+00,
205  * 0.8656312023878317d+00,
206  * 0.9445750230732326d+00,
207  * 0.9894009349916499d+00 /
208  data (weight(i,16),i=1, 8) /
209  * 0.1894506104550686d+00,
210  * 0.1826034150449236d+00,
211  * 0.1691565193950025d+00,
212  * 0.1495959888165767d+00,
213  * 0.1246289712555339d+00,
214  * 0.9515851168249285d-01,
215  * 0.6225352393864789d-01,
216  * 0.2715245941175410d-01 /
217 
218  if( n .ge. 2 .and. n .le. 16) then
219  c1 = (b + a) / 2
220  c2 = (b - a) / 2
221 
222  if (mod(n,2) .eq. 0) then
223  nh = n / 2
224  ans = 0
225  else
226  nh = (n - 1) / 2
227  ans = weight(0,n) * func(c1)
228  endif
229 
230  do i = 1, nh
231  ans = ans +
232  * weight(i,n) * (func(c1 + c2 * coef(i,n))
233  * + func(c1 - c2 * coef(i,n)))
234  enddo
235 
236  ans = c2 * ans
237  else
238  write (6,
239  * '(" k16pGaussLeg: n invalid=",i10)')
240  * n
241  ans = 0.
242  endif
243  end
subroutine k16pgaussleg(func, a, b, n, ans)
Definition: k16pGaussLeg.f:20
dE dx *! Nuc Int sampling table d
Definition: cblkMuInt.h:130