1
;;; Compiled by f2cl version 2.0 beta 2002-05-06
3
;;; Options: ((:prune-labels nil) (:auto-save t) (:relaxed-array-decls t)
4
;;; (:coerce-assigns :as-needed) (:array-type ':simple-array)
5
;;; (:array-slicing t) (:declare-common nil)
6
;;; (:float-format double-float))
12
(f a b npts2 points epsabs epsrel limit result abserr neval ier alist
13
blist rlist elist pts iord level ndin last$)
14
(declare (type (array f2cl-lib:integer4 (*)) ndin level iord)
15
(type (array double-float (*)) pts elist rlist blist alist points)
16
(type f2cl-lib:integer4 last$ ier neval limit npts2)
17
(type double-float abserr result epsrel epsabs b a))
18
(prog ((res3la (make-array 3 :element-type 'double-float))
19
(rlist2 (make-array 52 :element-type 'double-float)) (extrap nil)
20
(noext nil) (i 0) (id 0) (ierro 0) (ind1 0) (ind2 0) (ip1 0)
21
(iroff1 0) (iroff2 0) (iroff3 0) (j 0) (jlow 0) (jupbnd 0) (k 0)
22
(ksgn 0) (ktmin 0) (levcur 0) (levmax 0) (maxerr 0) (f2cl-lib:nint 0)
23
(nintp1 0) (npts 0) (nres 0) (nrmax 0) (numrl2 0) (abseps 0.0)
24
(area 0.0) (area1 0.0) (area12 0.0) (area2 0.0) (a1 0.0) (a2 0.0)
25
(b1 0.0) (b2 0.0) (correc 0.0) (defabs 0.0) (defab1 0.0) (defab2 0.0)
26
(dres 0.0) (epmach 0.0) (erlarg 0.0) (erlast 0.0) (errbnd 0.0)
27
(errmax 0.0) (error1 0.0) (erro12 0.0) (error2 0.0) (errsum 0.0)
28
(ertest 0.0) (oflow 0.0) (resa 0.0) (resabs 0.0) (reseps 0.0)
29
(f2cl-lib:sign 0.0) (temp 0.0) (uflow 0.0) (abs$ 0.0f0))
30
(declare (type single-float abs$)
31
(type (simple-array double-float (52)) rlist2)
32
(type (simple-array double-float (3)) res3la)
33
(type double-float uflow temp f2cl-lib:sign reseps resabs resa oflow
34
ertest errsum error2 erro12 error1 errmax errbnd erlast erlarg epmach
35
dres defab2 defab1 defabs correc b2 b1 a2 a1 area2 area12 area1 area
37
(type f2cl-lib:integer4 numrl2 nrmax nres npts nintp1 f2cl-lib:nint maxerr
38
levmax levcur ktmin ksgn k jupbnd jlow j iroff3 iroff2 iroff1 ip1 ind2
40
(type f2cl-lib:logical noext extrap))
41
(setf epmach (f2cl-lib:d1mach 4))
47
(f2cl-lib:fset (f2cl-lib:fref alist (1) ((1 *))) a)
48
(f2cl-lib:fset (f2cl-lib:fref blist (1) ((1 *))) b)
49
(f2cl-lib:fset (f2cl-lib:fref rlist (1) ((1 *))) 0.0)
50
(f2cl-lib:fset (f2cl-lib:fref elist (1) ((1 *))) 0.0)
51
(f2cl-lib:fset (f2cl-lib:fref iord (1) ((1 *))) 0)
52
(f2cl-lib:fset (f2cl-lib:fref level (1) ((1 *))) 0)
53
(setf npts (f2cl-lib:int-sub npts2 2))
57
(and (<= epsabs 0.0) (< epsrel (max (* 50.0 epmach) 5.0e-29))))
59
(if (= ier 6) (go label999))
60
(setf f2cl-lib:sign 1.0)
61
(if (> a b) (setf f2cl-lib:sign -1.0))
62
(f2cl-lib:fset (f2cl-lib:fref pts (1) ((1 *))) (min a b))
63
(if (= npts 0) (go label15))
64
(f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1))
67
(f2cl-lib:fset (f2cl-lib:fref pts ((f2cl-lib:int-add i 1)) ((1 *)))
68
(f2cl-lib:fref points (i) ((1 *))))
71
(f2cl-lib:fset (f2cl-lib:fref pts ((f2cl-lib:int-add npts 2)) ((1 *)))
73
(setf f2cl-lib:nint (f2cl-lib:int-add npts 1))
74
(setf a1 (f2cl-lib:fref pts (1) ((1 *))))
75
(if (= npts 0) (go label40))
76
(setf nintp1 (f2cl-lib:int-add f2cl-lib:nint 1))
77
(f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1))
78
((> i f2cl-lib:nint) nil)
80
(setf ip1 (f2cl-lib:int-add i 1))
81
(f2cl-lib:fdo (j ip1 (f2cl-lib:int-add j 1))
85
(<= (f2cl-lib:fref pts (i) ((1 *)))
86
(f2cl-lib:fref pts (j) ((1 *))))
88
(setf temp (f2cl-lib:fref pts (i) ((1 *))))
89
(f2cl-lib:fset (f2cl-lib:fref pts (i) ((1 *)))
90
(f2cl-lib:fref pts (j) ((1 *))))
91
(f2cl-lib:fset (f2cl-lib:fref pts (j) ((1 *))) temp)))))
94
(or (/= (f2cl-lib:fref pts (1) ((1 *))) (min a b))
95
(/= (f2cl-lib:fref pts (nintp1) ((1 *))) (max a b)))
97
(if (= ier 6) (go label999))
100
(f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1))
101
((> i f2cl-lib:nint) nil)
103
(setf b1 (f2cl-lib:fref pts ((f2cl-lib:int-add i 1)) ((1 *))))
105
(var-0 var-1 var-2 var-3 var-4 var-5 var-6)
106
(dqk21 f a1 b1 area1 error1 defabs resa)
107
(declare (ignore var-0 var-1 var-2))
112
(setf abserr (+ abserr error1))
113
(setf result (+ result area1))
114
(f2cl-lib:fset (f2cl-lib:fref ndin (i) ((1 *))) 0)
115
(if (and (= error1 resa) (/= error1 0.0))
116
(f2cl-lib:fset (f2cl-lib:fref ndin (i) ((1 *))) 1))
117
(setf resabs (+ resabs defabs))
118
(f2cl-lib:fset (f2cl-lib:fref level (i) ((1 *))) 0)
119
(f2cl-lib:fset (f2cl-lib:fref elist (i) ((1 *))) error1)
120
(f2cl-lib:fset (f2cl-lib:fref alist (i) ((1 *))) a1)
121
(f2cl-lib:fset (f2cl-lib:fref blist (i) ((1 *))) b1)
122
(f2cl-lib:fset (f2cl-lib:fref rlist (i) ((1 *))) area1)
123
(f2cl-lib:fset (f2cl-lib:fref iord (i) ((1 *))) i)
127
(f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1))
128
((> i f2cl-lib:nint) nil)
130
(if (= (f2cl-lib:fref ndin (i) ((1 *))) 1)
131
(f2cl-lib:fset (f2cl-lib:fref elist (i) ((1 *))) abserr))
132
(setf errsum (+ errsum (f2cl-lib:fref elist (i) ((1 *)))))
134
(setf last$ f2cl-lib:nint)
135
(setf neval (f2cl-lib:int-mul 21 f2cl-lib:nint))
136
(setf dres (coerce (abs result) 'double-float))
137
(setf errbnd (max epsabs (* epsrel dres)))
138
(if (and (<= abserr (* 100.0 epmach resabs)) (> abserr errbnd))
140
(if (= f2cl-lib:nint 1) (go label80))
141
(f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1))
144
(setf jlow (f2cl-lib:int-add i 1))
145
(setf ind1 (f2cl-lib:fref iord (i) ((1 *))))
146
(f2cl-lib:fdo (j jlow (f2cl-lib:int-add j 1))
147
((> j f2cl-lib:nint) nil)
149
(setf ind2 (f2cl-lib:fref iord (j) ((1 *))))
151
(> (f2cl-lib:fref elist (ind1) ((1 *)))
152
(f2cl-lib:fref elist (ind2) ((1 *))))
157
(if (= ind1 (f2cl-lib:fref iord (i) ((1 *)))) (go label70))
158
(f2cl-lib:fset (f2cl-lib:fref iord (k) ((1 *)))
159
(f2cl-lib:fref iord (i) ((1 *))))
160
(f2cl-lib:fset (f2cl-lib:fref iord (i) ((1 *))) ind1)
162
(if (< limit npts2) (setf ier 1))
164
(if (or (/= ier 0) (<= abserr errbnd)) (go label999))
165
(f2cl-lib:fset (f2cl-lib:fref rlist2 (1) ((1 52))) result)
166
(setf maxerr (f2cl-lib:fref iord (1) ((1 *))))
167
(setf errmax (f2cl-lib:fref elist (maxerr) ((1 *))))
173
(setf extrap f2cl-lib:%false%)
174
(setf noext f2cl-lib:%false%)
182
(setf uflow (f2cl-lib:d1mach 1))
183
(setf oflow (f2cl-lib:d1mach 2))
186
(if (>= dres (* (- 1.0 (* 50.0 epmach)) resabs)) (setf ksgn 1))
187
(f2cl-lib:fdo (last$ npts2 (f2cl-lib:int-add last$ 1))
188
((> last$ limit) nil)
191
(f2cl-lib:int-add (f2cl-lib:fref level (maxerr) ((1 *))) 1))
192
(setf a1 (f2cl-lib:fref alist (maxerr) ((1 *))))
195
(+ (f2cl-lib:fref alist (maxerr) ((1 *)))
196
(f2cl-lib:fref blist (maxerr) ((1 *))))))
198
(setf b2 (f2cl-lib:fref blist (maxerr) ((1 *))))
201
(var-0 var-1 var-2 var-3 var-4 var-5 var-6)
202
(dqk21 f a1 b1 area1 error1 resa defab1)
203
(declare (ignore var-0 var-1 var-2))
209
(var-0 var-1 var-2 var-3 var-4 var-5 var-6)
210
(dqk21 f a2 b2 area2 error2 resa defab2)
211
(declare (ignore var-0 var-1 var-2))
216
(setf neval (f2cl-lib:int-add neval 42))
217
(setf area12 (+ area1 area2))
218
(setf erro12 (+ error1 error2))
219
(setf errsum (- (+ errsum erro12) errmax))
220
(setf area (- (+ area area12) (f2cl-lib:fref rlist (maxerr) ((1 *)))))
221
(if (or (= defab1 error1) (= defab2 error2)) (go label95))
224
(> (abs (- (f2cl-lib:fref rlist (maxerr) ((1 *))) area12))
225
(* 1.0e-5 (abs area12)))
226
(< erro12 (* 0.99 errmax)))
228
(if extrap (setf iroff2 (f2cl-lib:int-add iroff2 1)))
229
(if (not extrap) (setf iroff1 (f2cl-lib:int-add iroff1 1)))
231
(if (and (> last$ 10) (> erro12 errmax))
232
(setf iroff3 (f2cl-lib:int-add iroff3 1)))
234
(f2cl-lib:fset (f2cl-lib:fref level (maxerr) ((1 *))) levcur)
235
(f2cl-lib:fset (f2cl-lib:fref level (last$) ((1 *))) levcur)
236
(f2cl-lib:fset (f2cl-lib:fref rlist (maxerr) ((1 *))) area1)
237
(f2cl-lib:fset (f2cl-lib:fref rlist (last$) ((1 *))) area2)
238
(setf errbnd (max epsabs (* epsrel (abs area))))
239
(if (or (>= (f2cl-lib:int-add iroff1 iroff2) 10) (>= iroff3 20))
241
(if (>= iroff2 5) (setf ierro 3))
242
(if (= last$ limit) (setf ier 1))
244
(<= (max (abs a1) (abs b2))
245
(* (+ 1.0 (* 100.0 epmach)) (+ (abs a2) (* 1000.0 uflow))))
247
(if (> error2 error1) (go label100))
248
(f2cl-lib:fset (f2cl-lib:fref alist (last$) ((1 *))) a2)
249
(f2cl-lib:fset (f2cl-lib:fref blist (maxerr) ((1 *))) b1)
250
(f2cl-lib:fset (f2cl-lib:fref blist (last$) ((1 *))) b2)
251
(f2cl-lib:fset (f2cl-lib:fref elist (maxerr) ((1 *))) error1)
252
(f2cl-lib:fset (f2cl-lib:fref elist (last$) ((1 *))) error2)
255
(f2cl-lib:fset (f2cl-lib:fref alist (maxerr) ((1 *))) a2)
256
(f2cl-lib:fset (f2cl-lib:fref alist (last$) ((1 *))) a1)
257
(f2cl-lib:fset (f2cl-lib:fref blist (last$) ((1 *))) b1)
258
(f2cl-lib:fset (f2cl-lib:fref rlist (maxerr) ((1 *))) area2)
259
(f2cl-lib:fset (f2cl-lib:fref rlist (last$) ((1 *))) area1)
260
(f2cl-lib:fset (f2cl-lib:fref elist (maxerr) ((1 *))) error2)
261
(f2cl-lib:fset (f2cl-lib:fref elist (last$) ((1 *))) error1)
264
(var-0 var-1 var-2 var-3 var-4 var-5 var-6)
265
(dqpsrt limit last$ maxerr errmax elist iord nrmax)
266
(declare (ignore var-0 var-1 var-4 var-5))
270
(if (<= errsum errbnd) (go label190))
271
(if (/= ier 0) (go label170))
272
(if noext (go label160))
273
(setf erlarg (- erlarg erlast))
274
(if (<= (f2cl-lib:int-add levcur 1) levmax)
275
(setf erlarg (+ erlarg erro12)))
276
(if extrap (go label120))
278
(<= (f2cl-lib:int-add (f2cl-lib:fref level (maxerr) ((1 *))) 1)
281
(setf extrap f2cl-lib:%true%)
284
(if (or (= ierro 3) (<= erlarg ertest)) (go label140))
287
(if (> last$ (+ 2 (the f2cl-lib:integer4 (truncate limit 2))))
288
(setf jupbnd (f2cl-lib:int-sub (f2cl-lib:int-add limit 3) last$)))
289
(f2cl-lib:fdo (k id (f2cl-lib:int-add k 1))
292
(setf maxerr (f2cl-lib:fref iord (nrmax) ((1 *))))
293
(setf errmax (f2cl-lib:fref elist (maxerr) ((1 *))))
295
(<= (f2cl-lib:int-add (f2cl-lib:fref level (maxerr) ((1 *))) 1)
298
(setf nrmax (f2cl-lib:int-add nrmax 1))
301
(setf numrl2 (f2cl-lib:int-add numrl2 1))
302
(f2cl-lib:fset (f2cl-lib:fref rlist2 (numrl2) ((1 52))) area)
303
(if (<= numrl2 2) (go label155))
305
(var-0 var-1 var-2 var-3 var-4 var-5)
306
(dqelg numrl2 rlist2 reseps abseps res3la nres)
307
(declare (ignore var-1 var-4))
312
(setf ktmin (f2cl-lib:int-add ktmin 1))
313
(if (and (> ktmin 5) (< abserr (* 0.001 errsum))) (setf ier 5))
314
(if (>= abseps abserr) (go label150))
319
(setf ertest (max epsabs (* epsrel (abs reseps))))
320
(if (< abserr ertest) (go label170))
322
(if (= numrl2 1) (setf noext f2cl-lib:%true%))
323
(if (>= ier 5) (go label170))
325
(setf maxerr (f2cl-lib:fref iord (1) ((1 *))))
326
(setf errmax (f2cl-lib:fref elist (maxerr) ((1 *))))
328
(setf extrap f2cl-lib:%false%)
329
(setf levmax (f2cl-lib:int-add levmax 1))
333
(if (= abserr oflow) (go label190))
334
(if (= (f2cl-lib:int-add ier ierro) 0) (go label180))
335
(if (= ierro 3) (setf abserr (+ abserr correc)))
336
(if (= ier 0) (setf ier 3))
337
(if (and (/= result 0.0) (/= area 0.0)) (go label175))
338
(if (> abserr errsum) (go label190))
339
(if (= area 0.0) (go label210))
342
(if (> (/ abserr (abs result)) (/ errsum (abs area))) (go label190))
346
(<= (max (abs result) (abs area)) (* resabs 0.010000000000000002)))
349
(or (> 0.010000000000000002 (/ result area))
350
(> (/ result area) 100.0)
351
(> errsum (abs area)))
356
(f2cl-lib:fdo (k 1 (f2cl-lib:int-add k 1))
359
(setf result (+ result (f2cl-lib:fref rlist (k) ((1 *)))))
363
(if (> ier 2) (setf ier (f2cl-lib:int-sub ier 1)))
364
(setf result (* result f2cl-lib:sign))