GNU Octave 10.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 
Loading...
Searching...
No Matches
dqagp.f
Go to the documentation of this file.
1 SUBROUTINE dqagp(F,A,B,NPTS2,POINTS,EPSABS,EPSREL,RESULT,ABSERR,
2 * NEVAL,IER,LENIW,LENW,LAST,IWORK,WORK)
3C***BEGIN PROLOGUE DQAGP
4C***DATE WRITTEN 800101 (YYMMDD)
5C***REVISION DATE 830518 (YYMMDD)
6C***CATEGORY NO. H2A2A1
7C***KEYWORDS AUTOMATIC INTEGRATOR, GENERAL-PURPOSE,
8C SINGULARITIES AT USER SPECIFIED POINTS,
9C EXTRAPOLATION, GLOBALLY ADAPTIVE
10C***AUTHOR PIESSENS,ROBERT,APPL. MATH. & PROGR. DIV - K.U.LEUVEN
11C DE DONCKER,ELISE,APPL. MATH. & PROGR. DIV. - K.U.LEUVEN
12C***PURPOSE THE ROUTINE CALCULATES AN APPROXIMATION RESULT TO A GIVEN
13C DEFINITE INTEGRAL I = INTEGRAL OF F OVER (A,B),
14C HOPEFULLY SATISFYING FOLLOWING CLAIM FOR ACCURACY
15C BREAK POINTS OF THE INTEGRATION INTERVAL, WHERE LOCAL
16C DIFFICULTIES OF THE INTEGRAND MAY OCCUR (E.G.
17C SINGULARITIES, DISCONTINUITIES), ARE PROVIDED BY THE USER.
18C***DESCRIPTION
19C
20C COMPUTATION OF A DEFINITE INTEGRAL
21C STANDARD FORTRAN SUBROUTINE
22C DOUBLE PRECISION VERSION
23C
24C PARAMETERS
25C ON ENTRY
26C F - SUBROUTINE F(X,IERR,RESULT) DEFINING THE INTEGRAND
27C FUNCTION F(X). THE ACTUAL NAME FOR F NEEDS TO BE
28C DECLARED E X T E R N A L IN THE DRIVER PROGRAM.
29C
30C A - DOUBLE PRECISION
31C LOWER LIMIT OF INTEGRATION
32C
33C B - DOUBLE PRECISION
34C UPPER LIMIT OF INTEGRATION
35C
36C NPTS2 - INTEGER
37C NUMBER EQUAL TO TWO MORE THAN THE NUMBER OF
38C USER-SUPPLIED BREAK POINTS WITHIN THE INTEGRATION
39C RANGE, NPTS.GE.2.
40C IF NPTS2.LT.2, THE ROUTINE WILL END WITH IER = 6.
41C
42C POINTS - DOUBLE PRECISION
43C VECTOR OF DIMENSION NPTS2, THE FIRST (NPTS2-2)
44C ELEMENTS OF WHICH ARE THE USER PROVIDED BREAK
45C POINTS. IF THESE POINTS DO NOT CONSTITUTE AN
46C ASCENDING SEQUENCE THERE WILL BE AN AUTOMATIC
47C SORTING.
48C
49C EPSABS - DOUBLE PRECISION
50C ABSOLUTE ACCURACY REQUESTED
51C EPSREL - DOUBLE PRECISION
52C RELATIVE ACCURACY REQUESTED
53C IF EPSABS.LE.0
54C AND EPSREL.LT.MAX(50*REL.MACH.ACC.,0.5D-28),
55C THE ROUTINE WILL END WITH IER = 6.
56C
57C ON RETURN
58C RESULT - DOUBLE PRECISION
59C APPROXIMATION TO THE INTEGRAL
60C
61C ABSERR - DOUBLE PRECISION
62C ESTIMATE OF THE MODULUS OF THE ABSOLUTE ERROR,
63C WHICH SHOULD EQUAL OR EXCEED ABS(I-RESULT)
64C
65C NEVAL - INTEGER
66C NUMBER OF INTEGRAND EVALUATIONS
67C
68C IER - INTEGER
69C IER = 0 NORMAL AND RELIABLE TERMINATION OF THE
70C ROUTINE. IT IS ASSUMED THAT THE REQUESTED
71C ACCURACY HAS BEEN ACHIEVED.
72C IER.GT.0 ABNORMAL TERMINATION OF THE ROUTINE.
73C THE ESTIMATES FOR INTEGRAL AND ERROR ARE
74C LESS RELIABLE. IT IS ASSUMED THAT THE
75C REQUESTED ACCURACY HAS NOT BEEN ACHIEVED.
76C ERROR MESSAGES
77C IER = 1 MAXIMUM NUMBER OF SUBDIVISIONS ALLOWED
78C HAS BEEN ACHIEVED. ONE CAN ALLOW MORE
79C SUBDIVISIONS BY INCREASING THE VALUE OF
80C LIMIT (AND TAKING THE ACCORDING DIMENSION
81C ADJUSTMENTS INTO ACCOUNT). HOWEVER, IF
82C THIS YIELDS NO IMPROVEMENT IT IS ADVISED
83C TO ANALYZE THE INTEGRAND IN ORDER TO
84C DETERMINE THE INTEGRATION DIFFICULTIES. IF
85C THE POSITION OF A LOCAL DIFFICULTY CAN BE
86C DETERMINED (I.E. SINGULARITY,
87C DISCONTINUITY WITHIN THE INTERVAL), IT
88C SHOULD BE SUPPLIED TO THE ROUTINE AS AN
89C ELEMENT OF THE VECTOR POINTS. IF NECESSARY
90C AN APPROPRIATE SPECIAL-PURPOSE INTEGRATOR
91C MUST BE USED, WHICH IS DESIGNED FOR
92C HANDLING THE TYPE OF DIFFICULTY INVOLVED.
93C = 2 THE OCCURRENCE OF ROUNDOFF ERROR IS
94C DETECTED, WHICH PREVENTS THE REQUESTED
95C TOLERANCE FROM BEING ACHIEVED.
96C THE ERROR MAY BE UNDER-ESTIMATED.
97C = 3 EXTREMELY BAD INTEGRAND BEHAVIOUR OCCURS
98C AT SOME POINTS OF THE INTEGRATION
99C INTERVAL.
100C = 4 THE ALGORITHM DOES NOT CONVERGE.
101C ROUNDOFF ERROR IS DETECTED IN THE
102C EXTRAPOLATION TABLE.
103C IT IS PRESUMED THAT THE REQUESTED
104C TOLERANCE CANNOT BE ACHIEVED, AND THAT
105C THE RETURNED RESULT IS THE BEST WHICH
106C CAN BE OBTAINED.
107C = 5 THE INTEGRAL IS PROBABLY DIVERGENT, OR
108C SLOWLY CONVERGENT. IT MUST BE NOTED THAT
109C DIVERGENCE CAN OCCUR WITH ANY OTHER VALUE
110C OF IER.GT.0.
111C = 6 THE INPUT IS INVALID BECAUSE
112C NPTS2.LT.2 OR
113C BREAK POINTS ARE SPECIFIED OUTSIDE
114C THE INTEGRATION RANGE OR
115C (EPSABS.LE.0 AND
116C EPSREL.LT.MAX(50*REL.MACH.ACC.,0.5D-28))
117C RESULT, ABSERR, NEVAL, LAST ARE SET TO
118C ZERO. EXEPT WHEN LENIW OR LENW OR NPTS2 IS
119C INVALID, IWORK(1), IWORK(LIMIT+1),
120C WORK(LIMIT*2+1) AND WORK(LIMIT*3+1)
121C ARE SET TO ZERO.
122C WORK(1) IS SET TO A AND WORK(LIMIT+1)
123C TO B (WHERE LIMIT = (LENIW-NPTS2)/2).
124C
125C DIMENSIONING PARAMETERS
126C LENIW - INTEGER
127C DIMENSIONING PARAMETER FOR IWORK
128C LENIW DETERMINES LIMIT = (LENIW-NPTS2)/2,
129C WHICH IS THE MAXIMUM NUMBER OF SUBINTERVALS IN THE
130C PARTITION OF THE GIVEN INTEGRATION INTERVAL (A,B),
131C LENIW.GE.(3*NPTS2-2).
132C IF LENIW.LT.(3*NPTS2-2), THE ROUTINE WILL END WITH
133C IER = 6.
134C
135C LENW - INTEGER
136C DIMENSIONING PARAMETER FOR WORK
137C LENW MUST BE AT LEAST LENIW*2-NPTS2.
138C IF LENW.LT.LENIW*2-NPTS2, THE ROUTINE WILL END
139C WITH IER = 6.
140C
141C LAST - INTEGER
142C ON RETURN, LAST EQUALS THE NUMBER OF SUBINTERVALS
143C PRODUCED IN THE SUBDIVISION PROCESS, WHICH
144C DETERMINES THE NUMBER OF SIGNIFICANT ELEMENTS
145C ACTUALLY IN THE WORK ARRAYS.
146C
147C WORK ARRAYS
148C IWORK - INTEGER
149C VECTOR OF DIMENSION AT LEAST LENIW. ON RETURN,
150C THE FIRST K ELEMENTS OF WHICH CONTAIN
151C POINTERS TO THE ERROR ESTIMATES OVER THE
152C SUBINTERVALS, SUCH THAT WORK(LIMIT*3+IWORK(1)),...,
153C WORK(LIMIT*3+IWORK(K)) FORM A DECREASING
154C SEQUENCE, WITH K = LAST IF LAST.LE.(LIMIT/2+2), AND
155C K = LIMIT+1-LAST OTHERWISE
156C IWORK(LIMIT+1), ...,IWORK(LIMIT+LAST) CONTAIN THE
157C SUBDIVISION LEVELS OF THE SUBINTERVALS, I.E.
158C IF (AA,BB) IS A SUBINTERVAL OF (P1,P2)
159C WHERE P1 AS WELL AS P2 IS A USER-PROVIDED
160C BREAK POINT OR INTEGRATION LIMIT, THEN (AA,BB) HAS
161C LEVEL L IF ABS(BB-AA) = ABS(P2-P1)*2**(-L),
162C IWORK(LIMIT*2+1), ..., IWORK(LIMIT*2+NPTS2) HAVE
163C NO SIGNIFICANCE FOR THE USER,
164C NOTE THAT LIMIT = (LENIW-NPTS2)/2.
165C
166C WORK - DOUBLE PRECISION
167C VECTOR OF DIMENSION AT LEAST LENW
168C ON RETURN
169C WORK(1), ..., WORK(LAST) CONTAIN THE LEFT
170C END POINTS OF THE SUBINTERVALS IN THE
171C PARTITION OF (A,B),
172C WORK(LIMIT+1), ..., WORK(LIMIT+LAST) CONTAIN
173C THE RIGHT END POINTS,
174C WORK(LIMIT*2+1), ..., WORK(LIMIT*2+LAST) CONTAIN
175C THE INTEGRAL APPROXIMATIONS OVER THE SUBINTERVALS,
176C WORK(LIMIT*3+1), ..., WORK(LIMIT*3+LAST)
177C CONTAIN THE CORRESPONDING ERROR ESTIMATES,
178C WORK(LIMIT*4+1), ..., WORK(LIMIT*4+NPTS2)
179C CONTAIN THE INTEGRATION LIMITS AND THE
180C BREAK POINTS SORTED IN AN ASCENDING SEQUENCE.
181C NOTE THAT LIMIT = (LENIW-NPTS2)/2.
182C
183C***REFERENCES (NONE)
184C***ROUTINES CALLED DQAGPE,XERROR
185C***END PROLOGUE DQAGP
186C
187 DOUBLE PRECISION A,ABSERR,B,EPSABS,EPSREL,POINTS,RESULT,WORK
188 INTEGER IER,IWORK,LAST,LENIW,LENW,LIMIT,LVL,L1,L2,L3,L4,NEVAL,
189 * npts2
190C
191 dimension iwork(leniw),points(npts2),work(lenw)
192C
193 EXTERNAL f
194C
195C CHECK VALIDITY OF LIMIT AND LENW.
196C
197C***FIRST EXECUTABLE STATEMENT DQAGP
198 ier = 6
199 neval = 0
200 last = 0
201 result = 0.0d+00
202 abserr = 0.0d+00
203 IF(leniw.LT.(3*npts2-2).OR.lenw.LT.(leniw*2-npts2).OR.npts2.LT.2)
204 * GO TO 10
205C
206C PREPARE CALL FOR DQAGPE.
207C
208 limit = (leniw-npts2)/2
209 l1 = limit+1
210 l2 = limit+l1
211 l3 = limit+l2
212 l4 = limit+l3
213C
214 CALL dqagpe(f,a,b,npts2,points,epsabs,epsrel,limit,result,abserr,
215 * neval,ier,work(1),work(l1),work(l2),work(l3),work(l4),
216 * iwork(1),iwork(l1),iwork(l2),last)
217C
218C CALL ERROR HANDLER IF NECESSARY.
219C
220 lvl = 0
22110 IF(ier.EQ.6) lvl = 1
222 IF(ier.GT.0) CALL xerror('ABNORMAL RETURN FROM DQAGP',26,ier,lvl)
223 RETURN
224 END
subroutine dqagp(f, a, b, npts2, points, epsabs, epsrel, result, abserr, neval, ier, leniw, lenw, last, iwork, work)
Definition dqagp.f:3
subroutine dqagpe(f, a, b, npts2, points, epsabs, epsrel, limit, result, abserr, neval, ier, alist, blist, rlist, elist, pts, iord, level, ndin, last)
Definition dqagpe.f:4
subroutine xerror(messg, nmessg, nerr, level)
Definition xerror.f:2