Advice on Replacement Calls for Withdrawn/Superseded Routines
The following list gives the names of replacement routines for those routines that have been withdrawn or superseded.
For routines that have been withdrawn or superseded since Mark 13 replacement calls are also given.
The list indicates the minimum change necessary, but many of the replacement routines for those routines have additional flexibility
and users may wish to take advantage of new features. It is strongly recommended that users consult the routine documents.
C02ADF
Withdrawn at Mark 15.
Replaced by
C02AFF.
Old: CALL C02ADF(AR,AC,N,REZ,IMZ,TOL,IFAIL)
New: CALL C02AFF(A,N-1,SCALE,Z,W,IFAIL)
The coefficients are stored in the double precision array A of dimension
(2,N+1)
rather than in the arrays AR and AC, the zeros are returned in the double precision array Z of dimension
(2,N)
rather than in the arrays REZ and IMZ, and W is a double precision work array of dimension
(4×(N+1))
.
C02AEF
Withdrawn at Mark 16.
Replaced by
C02AGF.
Old: CALL C02AEF(A,N,REZ,IMZ,TOL,IFAIL)
New: CALL C02AGF(A,N-1,SCALE,Z,W,IFAIL)
The zeros are returned in the double precision array Z of dimension
(2,N)
rather than in the arrays REZ and IMZ, and W is a double precision work array of dimension
(2×(N+1))
.
C05AAF
Withdrawn at Mark 9.
Replaced by
C05ADF.
C05ABF
Withdrawn at Mark 9.
Replaced by
C05ADF.
C05ACF
Withdrawn at Mark 9.
Replaced by
C05ADF.
C05NAF
Withdrawn at Mark 10.
Replaced by
C05NBF or
C05NCF.
C05PAF
Withdrawn at Mark 8.
Replaced by
C05PBF or
C05PCF.
C06AAF
Withdrawn at Mark 9.
Replaced by
C06ECF or
C06FRF.
C06ABF
Withdrawn at Mark 9.
Replaced by
C06EAF or
C06FPF.
C06ACF
Withdrawn at Mark 12.
Replaced by
C06EKF or
C06FKF.
C06ADF
Withdrawn at Mark 12.
Replaced by
C06FFF.
D01AAF
Withdrawn at Mark 8.
Replaced by
D01AJF.
D01ABF
Withdrawn at Mark 8.
Replaced by
D01AJF.
D01ACF
Withdrawn at Mark 9.
Replaced by
D01BDF.
D01ADF
Withdrawn at Mark 8.
Replaced by
D01BAF or
D01BBF.
D01AEF
Withdrawn at Mark 8.
Replaced by
D01BAF or
D01BBF.
D01AFF
Withdrawn at Mark 8.
Replaced by
D01BAF or
D01BBF.
D01AGF
Withdrawn at Mark 9.
Replaced by
D01AJF.
D01FAF
Withdrawn at Mark 11.
Replaced by
D01GBF.
D02AAF
Withdrawn at Mark 8.
Replaced by
D02PDF and related routines.
D02ABF
Withdrawn at Mark 8.
Replaced by
D02PCF and related routines.
D02ADF
Withdrawn at Mark 9.
Replaced by
D02GAF or
D02HAF.
D02AFF
Withdrawn at Mark 9.
Replaced by
D02TGF.
D02AHF
Withdrawn at Mark 8.
Replaced by
D02CJF or
D02QFF.
D02AJF
Withdrawn at Mark 8.
Replaced by
D02EJF and
D02NBF and related routines.
D02BAF
Withdrawn at Mark 18.
Replaced by
D02PCF and associated D02P routines.
Old: CALL D02BAF(X,XEND,N,Y,TOL,FCN,W,IFAIL)
New: DO 10 L = 1,N
THRES(L) = TOL
10 CONTINUE
CALL D02PVF(N,X,Y,XEND,TOL,THRES,2,'usualtask',.FALSE.,
+ 0.0D0,W,20*N,IFAIL)
CALL D02PCF(FCN,XEND,X,Y,YP,YMAX,W,IFAIL)
THRES, YP and YMAX are double precision arrays of length N and the length of array W needs extending to length
20×N
.
D02BBF
Withdrawn at Mark 18.
Replaced by
D02PCF and associated D02P routines.
Old: CALL D02BBF(X,XEND,N,Y,TOL,IRELAB,FCN,OUTPUT,W,IFAIL)
New: CALL D02PVF(N,X,Y,XEND,TOL,THRES,2,'usualtask',.FALSE.,
+ 0.0D0,W,20*N,IFAIL)
... set XWANT ...
10 CONTINUE
CALL D02PCF(FCN,XWANT,X,Y,YP,YMAX,W,IFAIL)
IF (XWANT.LT.XEND) THEN
... reset XWANT ...
GO TO 10
ENDIF
THRES, YP and YMAX are double precision arrays of length N and the length of array W needs extending to length
20×N
.
D02BDF
Withdrawn at Mark 18.
Replaced by
D02PCF and associated D02P routines.
Old: CALL D02BDF(X,XEND,N,Y,TOL,IRELAB,FCN,STIFF,YNORM,W,
+ IW,M,OUTPUT,IFAIL)
New: CALL D02PVF(N,X,Y,XEND,TOL,THRES,2,'usualtask',.TRUE.,
+ 0.0D0,W,32*N,IFAIL)
... set XWANT ...
10 CONTINUE
CALL D02PCF(FCN,XWANT,X,Y,YP,YMAX,IFAIL)
IF (XWANT.LT.XEND) THEN
... reset XWANT ...
GO TO 10
ENDIF
CALL D02PZF(RMSERR,ERRMAX,TERRMX,W,IFAIL)
THRES, YP, YMAX and RMSERR are double precision arrays of length N and W is now a double precision one-dimensional array of length
32×N
.
D02CAF
Withdrawn at Mark 18.
Replaced by
D02CJF.
Old: CALL D02CAF(X,XEND,N,Y,TOL,FCN,W,IFAIL)
New: CALL D02CJF(X,XEND,N,Y,FCN,TOL,'M',D02CJX,D02CJW,W,IFAIL)
D02CJX is a subroutine provided in the NAG Fortran Library and D02CJW is a double precision function also provided. Both must be declared as EXTERNAL. The array W needs to be 5 elements greater in length.
D02CBF
Withdrawn at Mark 18.
Replaced by
D02CJF.
Old: CALL D02CBF(X,XEND,N,Y,TOL,IRELAB,FCN,OUTPUT,W,IFAIL)
New: CALL D02CJF(X,XEND,N,Y,FCN,TOL,RELABS,OUTPUT,D02CJW,W,IFAIL)
D02CJW is a double precision function provided in the NAG Fortran Library and must be declared as EXTERNAL. The array W needs to be 5 elements greater
in length. The integer parameter IRELAB (which can take values 0, 1 or 2) is catered for by the new CHARACTER*1 argument
RELABS (whose corresponding values are 'M', 'A' and 'R').
D02CGF
Withdrawn at Mark 18.
Replaced by
D02CJF.
Old: CALL D02CGF(X,XEND,N,Y,TOL,HMAX,M,VAL,FCN,W,IFAIL)
New: CALL D02CJF(X,XEND,N,Y,FCN,TOL,'M',D02CJX,G,W,IFAIL)
.
.
.
double precision FUNCTION G(X,Y)
double precision X,Y(*)
G = Y(M)-VAL
END
D02CJX is a subroutine provided in the NAG Fortran Library and should be declared as EXTERNAL. Note the functionality of
HMAX is no longer available directly. Checking the value of
Y(M)
-
VAL
at intervals of length HMAX can be effected by a user-supplied procedure OUTPUT in place of D02CJX in the call described
above. See the routine document for
D02CJF for more details.
D02CHF
Withdrawn at Mark 18.
Replaced by
D02CJF.
Old: CALL D02CHF(X,XEND,N,Y,TOL,IRELAB,HMAX,FCN,G,W,IFAIL)
New: CALL D02CJF(X,XEND,N,Y,FCN,TOL,RELABS,D02CJX,G,W,IFAIL)
D02CJX is a subroutine provided by the NAG Fortran Library and should be declared as EXTERNAL. The functionality of HMAX
can be provided as described under the replacement call for
D02CGF above. The relationship between the parameters IRELAB and RELABS is described under the replacement call for
D02CBF.
D02EAF
Withdrawn at Mark 18.
Replaced by
D02EJF.
Old: CALL D02EAF(X,XEND,N,Y,TOL,FCN,W,IW,IFAIL)
New: CALL D02EJF(X,XEND,N,Y,FCN,TOL,'M',D02EJX,D02EJW,D02EJY,W,IW,
+ IFAIL)
D02EJY and D02EJX are subroutines provided in the NAG Fortran Library and D02EJW is a double precision function also provided. All must be declared as EXTERNAL.
D02EBF
Withdrawn at Mark 18.
Replaced by
D02EJF.
Old: CALL D02EBF(X,XEND,N,Y,TOL,IRELAB,FCN,MPED,PEDERV,OUTPUT,W,IW,
+ IFAIL)
New: CALL D02EJF(X,XEND,N,Y,FCN,PEDERV,TOL,RELABS,OUTPUT,D02EJW,W,IW,
+ IFAIL)
D02EJW is a
double precision function provided in the NAG Fortran Library and must be declared as EXTERNAL. The integer parameter IRELAB (which can take
values 0, 1 or 2) is catered for by the new CHARACTER*1 argument RELABS (whose corresponding values are 'M', 'A' and 'R').
If
MPED
=
0
in the call of
D02EBF then PEDERV must be the routine D02EJY, which is supplied in the Library and should be declared as EXTERNAL.
D02EGF
Withdrawn at Mark 18.
Replaced by
D02EJF.
Old: CALL D02EGF(X,XEND,N,Y,TOL,HMAX,M,VAL,FCN,W,IW,IFAIL)
New: CALL D02EJF(X,XEND,N,Y,FCN,D02EJY,TOL,'M',D02EJX,G,W,IW,IFAIL)
.
.
.
double precision FUNCTION G(X,Y)
double precision X,Y(*)
G = Y(M)-VAL
END
D02EJY and D02EJX are subroutines provided in the NAG Fortran Library and should be declared as EXTERNAL. Note that the functionality
of HMAX is no longer available directly. Checking the value of
Y(M)
-
VAL
at intervals of length HMAX can be effected by a user-supplied procedure OUTPUT in place of D02EJX in the call described
above. See the routine document for
D02EJF for more details.
D02EHF
Withdrawn at Mark 18.
Replaced by
D02EJF.
Old: CALL D02EHF(X,XEND,N,Y,TOL,IRELAB,HMAX,MPED,PEDERV,FCN,G,W,IFAIL)
New: CALL D02EJF(X,XEND,N,Y,FCN,PEDERV,TOL,RELABS,D02EJX,G,W,IW,IFAIL)
D02EJX is a subroutine provided by the NAG Fortran Library and should be declared as EXTERNAL. The functionality of HMAX
can be provided as described under the replacement call for
D02EGF above. The relationship between the parameters IRELAB and RELABS is described under the replacement call for
D02EBF. If
MPED
=
0
in the call of
D02EHF then PEDERV must be the routine D02EJY, which is supplied in the Library and should be declared as EXTERNAL.
D02PAF
Withdrawn at Mark 18.
Replaced by
D02PDF and associated D02P routines.
Existing programs should be modified to call
D02PVF and
D02PDF. The interfaces are significantly different and therefore precise details of a replacement call cannot be given. Please
consult the appropriate routine documents.
D02QAF
Withdrawn at Mark 14.
Replaced by
D02QFF,
D02QWF and
D02QXF.
Existing programs should be modified to call
D02QWF and
D02QFF. The interfaces are significantly different and therefore precise details of a replacement call cannot be given. Please
consult the appropriate routine documents.
D02QBF
Withdrawn at Mark 13.
Replaced by
D02NBF and related routines.
Existing programs should be modified to call
D02NSF,
D02NVF and
D02NBF. The interfaces are significantly different and therefore precise details of a replacement call cannot be given. Please
consult the appropriate routine documents.
D02QDF
Withdrawn at Mark 17.
Replaced by
D02NBF or
D02NCF.
Existing programs should be modified to call
D02NSF,
D02NVF and
D02NBF, or
D02NTF,
D02NVF and
D02NCF. The interfaces are significantly different and therefore precise details of a replacement call cannot be given. Please
consult the appropriate routine documents.
D02QQF
Withdrawn at Mark 17.
not needed except with
D02QDF.
Not needed except with
D02QDF.
D02XAF
Withdrawn at Mark 18.
Replaced by
D02PXF and associated D02P routines.
Not needed except with
D02PAF. The equivalent routine is
D02PXF.
D02XBF
Withdrawn at Mark 18.
Replaced by
D02PXF and associated D02P routines.
Not needed except with
D02PAF.
D02XGF
Withdrawn at Mark 14.
Replaced by
D02QZF.
Not needed except with
D02QAF. The equivalent routine is
D02QZF.
D02XHF
Withdrawn at Mark 14.
Replaced by
D02QZF.
Not needed except with
D02QAF. The equivalent routine is
D02QZF.
D02YAF
Withdrawn at Mark 18.
Replaced by
D02PDF and associated D02P routines.
There is no precise equivalent to this routine. The closest alternative routine is
D02PDF.
D03PAF
Withdrawn at Mark 17.
Replaced by
D03PCF/D03PCA.
Existing programs should be modified to call
D03PCF/D03PCA. The replacement routine is designed to solve a broader class of problems. Therefore it is not possible to give precise
details of a replacement call. Please consult the appropriate routine documents.
D03PBF
Withdrawn at Mark 17.
Replaced by
D03PCF/D03PCA.
Existing programs should be modified to call
D03PCF/D03PCA. The replacement routine is designed to solve a broader class of problems. Therefore it is not possible to give precise
details of a replacement call. Please consult the appropriate routine documents.
D03PGF
Withdrawn at Mark 17.
Replaced by
D03PCF/D03PCA.
Existing programs should be modified to call
D03PCF/D03PCA. The replacement routine is designed to solve a broader class of problems. Therefore it is not possible to give precise
details of a replacement call. Please consult the appropriate routine documents.
E01ACF
Withdrawn at Mark 15.
Replaced by
E01DAF and
E02DEF.
Old: CALL E01ACF(A,B,X,Y,F,VAL,VALL,IFAIL,XX,WORK,AM,D,IG1,M1,N1)
New: CALL E01DAF(N1,M1,X,Y,F,PX,PY,LAMDA,MU,C,WRK,IFAIL)
A1(1) = A
B1(1) = B
M = 1
CALL E02DEF(M,PX,PY,A1,B1,LAMDA,MU,C,FF,WRK,IWRK,IFAIL)
VAL = FF(1)
VALL = VAL
where PX, PY and M are INTEGER variables, LAMDA is a double precision array of dimension
(N1+4)
, MU is a double precision array of dimension
(M1+4)
, C is a double precision array of dimension
(N1×M1)
, WRK is a double precision array of dimension
((N1+6)×(M1+6))
, A1, B1 and FF are double precision arrays of dimension (1), and IWRK is an INTEGER array of dimension (M1).
The above new calls duplicate almost exactly the effect of the old call, except that the new routines produce a single interpolated
value for each point, rather than the two alternative values VAL and VALL produced by the old routine. By attempting this
duplication, however, efficiency is probably being sacrificed. In general it is preferable to evaluate the interpolating
function provided by
E01DAF at a set of M points, supplied in arrays A1 and B1, rather than at a single point. In this case, A1, B1 and FF must be dimensioned
of length M.
Note also that
E01ACF uses natural splines, i.e., splines having zero second derivatives at the ends of the ranges. This is likely to be slightly
unsatisfactory, and
E01DAF does not have this problem. It does mean however that results produced by
E01DAF may not be exactly the same as those produced by
E01ACF.
E01ADF
Withdrawn at Mark 9.
Replaced by
E01BAF.
E01SEF
Withdrawn at Mark 20.
Replaced by
E01SGF.
Old: CALL E01SEF(M,X,Y,F,RNW,RNQ,NW,NQ,FNODES,MINNQ,WRK,IFAIL)
New: CALL E01SGF(M,X,Y,F,NW,NQ,IQ,LIQ,RQ,LRQ,IFAIL)
E01SEF has been superseded by
E01SGF which gives improved accuracy, facilities for obtaining gradient values and a consistent interface with
E01TGF for interpolation of scattered data in three dimensions.
The interpolant generated by the two routines will not be identical, but similar results may be obtained by using the same
values of NW and NQ. Details of the interpolant are passed to the evaluator through the arrays IQ and RQ rather than FNODES
and RNW.
E01SFF
Withdrawn at Mark 20.
Replaced by
E01SHF.
Old: CALL E01SFF(M,X,Y,F,RNW,FNODES,PX,PY,PF,IFAIL)
New: CALL E01SHF(M,X,Y,F,IQ,LIQ,RQ,LRQ,1,PX,PY,PF,QX,QY,IFAIL)
The two calls will not produce identical results due to differences in the generation routines
E01SEF and
E01SGF. Details of the interpolant are passed from
E01SGF through the arrays IQ and RQ rather than FNODES and RNW.
E01SHF also returns gradient values in QX and QY and allows evaluation at arrays of points rather than just single points.
E02DBF
Withdrawn at Mark 16.
Replaced by
E02DEF.
Old: CALL E02DBF(M,PX,PY,X,Y,FF,LAMDA,MV,POINT,NPOINT,C,NC,IFAIL)
New: CALL E02DEF(M,PX,PY,X,Y,LAMDA,MU,C,FF,WRK,IWRK,IFAIL)
where WRK is a double precision array of dimension
(PY-4)
, and IWRK is an INTEGER array of dimension
(PY-4)
.
E04AAF
Withdrawn at Mark 7.
Replaced by
E04ABF/E04ABA.
E04BAF
Withdrawn at Mark 7.
Replaced by
E04BBF/E04BBA.
E04CDF
Withdrawn at Mark 7.
Replaced by
E04UCF/E04UCA.
E04CEF
Withdrawn at Mark 7.
Replaced by
E04JAF.
E04CFF
Withdrawn at Mark 8.
Replaced by
E04UCF/E04UCA.
E04CGF
Withdrawn at Mark 13.
Replaced by
E04JAF.
Old: CALL E04CGF(N,X,F,IW,LIW,W,LW,IFAIL)
New: CALL E04JAF(N,1,W,W(N+1),X,F,IW,LIW,W(2*N+1),LW-2*N,IFAIL)
E04DBF
Withdrawn at Mark 13.
Replaced by
E04DGF/E04DGA.
Old: CALL E04DBF(N,X,F,G,XTOL,FEST,DUM,W,FUNCT,MONIT,MAXCAL,IFAIL)
New: CALL E04DGF(N,OBJFUN,ITER,F,G,X,IWORK,WORK,IUSER,USER,IFAIL)
The subroutine providing function and gradient values to
E04DGF/E04DGA is OBJFUN; it has a different parameter list to FUNCT, but can be constructed simply as
SUBROUTINE OBJFUN(MODE,N,XC,FC,GC,NSTATE,IUSER,USER)
INTEGER MODE, N, NSTATE, IUSER(*)
double precision XC(N), FC, GC(N), USER(*)
C
CALL FUNCT(N,XC,FC,GC)
RETURN
END
The parameters IWORK and WORK are workspace parameters for
E04DGF/E04DGA and must have lengths at least
(N+1)
and
(12×N)
respectively. IUSER and USER must be declared as arrays each of length at least (1).
There is no parameter MONIT to
E04DGF/E04DGA, but monitoring output may be obtained by calling an option setting routine. Similarly, values for FEST and MAXCAL may be
supplied by calling an option setting routine. See the routine document for further information.
E04DCF
Withdrawn at Mark 7.
Replaced by
E04KDF or
E04UCF/E04UCA.
E04DDF
Withdrawn at Mark 8.
Replaced by
E04KDF or
E04UCF/E04UCA.
E04DEF
Withdrawn at Mark 13.
Replaced by
E04KAF.
Old: CALL E04DEF(N,X,F,G,IW,LIW,W,LW,IFAIL)
New: CALL E04KAF(N,1,W,W(N+1),X,F,G,IW,LIW,W(2*N+1),LW-2*N,IFAIL)
E04DFF
Withdrawn at Mark 13.
Replaced by
E04KCF.
Old: CALL E04DFF(N,X,F,G,IW,LIW,W,LW,IFAIL)
New: CALL E04KCF(N,1,W,W(N+1),X,F,G,IW,LIW,W(2*N+1),LW-2*N,IFAIL)
E04EAF
Withdrawn at Mark 8.
Replaced by
E04LBF.
E04EBF
Withdrawn at Mark 13.
Replaced by
E04LAF.
Old: CALL E04EBF(N,X,F,G,IW,LIW,W,LW,IFAIL)
New: CALL E04LYF(N,1,FUNCT,HESS,W,W(N+1),X,F,G,IW,LIW,W(2*N+1),LW-2*N,
+ IUSER,USER,IFAIL)
FUNCT and HESS appear in the parameter list instead of the fixed-name subroutines FUNCT2 and HESS2 of
E04LAF. FUNCT and HESS must both be declared as EXTERNAL in the calling (sub)program. In addition they have an extra two parameters,
IUSER and USER, over and above those of FUNCT2 and HESS2. They may be derived from FUNCT2 and HESS2 as follows:
SUBROUTINE FUNCT(N,XC,FC,GC,IUSER,USER)
INTEGER N, IUSER(*)
double precision XC(N), FC, GC(N), USER(*)
C
CALL FUNCT2(N,XC,FC,GC)
C
RETURN
END
SUBROUTINE HESS(N,XC,HESLC,LH,HESDC,IUSER,USER)
INTEGER N, LH, IUSER(*)
double precision XC(N), HESLC(LH), HESDC(N), USER(*)
C
CALL HESS2(N,XC,HESLC,LH,HESDC)
C
RETURN
END
In general, the extra parameters, IUSER and USER, should be declared in the calling program as
IUSER(1)
and
USER(1)
, but will not need initialising.
E04FAF
Withdrawn at Mark 8.
Replaced by
E04FCF or
E04FDF.
E04FBF
Withdrawn at Mark 7.
Replaced by
E04FCF or
E04FDF.
E04FDF
Withdrawn at Mark 19.
Replaced by
E04FYF.
Old: CALL E04FDF(M,N,X,FSUMSQ,IW,LIW,W,LW,IFAIL)
New: CALL E04FYF(M,N,LSFUN,X,FSUMSQ,W,LW,IUSER,USER,IFAIL)
LSFUN appears in the parameter list instead of the fixed-name subroutine LSFUN1 of
E04FDF. LSFUN must be declared as EXTERNAL in the calling (sub)program. In addition it has an extra two parameters, IUSER and
USER, over and above those of LSFUN1. It may be derived from LSFUN1 as follows:
SUBROUTINE LSFUN(M,N,XC,FVECC,IUSER,USER)
INTEGER M, N, IUSER(*)
double precision XC(N), FVECC(M), USER(*)
C
CALL LSFUN1(M,N,XC,FVECC)
C
RETURN
END
In general the extra parameters, IUSER and USER, should be declared in the calling program as
IUSER(1)
and
USER(1)
, but will not need initialising.
E04GAF
Withdrawn at Mark 8.
Replaced by
E04GBF,
E04GCF,
E04GDF or
E04GEF.
E04GCF
Withdrawn at Mark 19.
Replaced by
E04GYF.
Old: CALL E04GCF(M,N,X,FSUMSQ,IW,LIW,W,LW,IFAIL)
New: CALL E04GYF(M,N,LSFUN,X,FSUMSQ,W,LW,IUSER,USER,IFAIL)
LSFUN appears in the parameter list instead of the fixed-name subroutine LSFUN2 of
E04GCF. LSFUN must be declared as EXTERNAL in the calling (sub)program. In addition it has an extra two parameters, IUSER and
USER, over and above those of LSFUN2. It may be derived from LSFUN2 as follows:
SUBROUTINE LSFUN(M,N,XC,FVECC,FJACC,LJC,IUSER,USER)
INTEGER M, N, LJC, IUSER(*)
double precision XC(N), FVECC(M), FJACC(LJC,N), USER(*)
C
CALL LSFUN2(M,N,XC,FVECC,FJACC,LJC)
C
RETURN
END
In general the extra parameters, IUSER and USER, should be declared in the calling program as
IUSER(1)
and
USER(1)
, but will not need initialising. If however, the array IW was used to pass information through
E04GCF into LSFUN2, or get information from LSFUN2, then the array IUSER should be declared appropriately and used for this purpose.
E04GEF
Withdrawn at Mark 19.
Replaced by
E04GZF.
Old: CALL E04GEF(M,N,X,FSUMSQ,IW,LIW,W,LW,IFAIL)
New: CALL E04GZF(M,N,LSFUN,X,FSUMSQ,W,LW,IUSER,USER,IFAIL)
LSFUN appears in the parameter list instead of the fixed-name subroutine LSFUN2 of
E04GEF. LSFUN must be declared as EXTERNAL in the calling (sub)program. In addition it has an extra two parameters, IUSER and
USER, over and above those of LSFUN2. It may be derived from LSFUN2 as follows:
SUBROUTINE LSFUN(M,N,X,FVECC,FJACC,LJC,IUSER,USER)
INTEGER M, N, LJC, IUSER(*)
double precision XC(N), FVECC(M), FJACC(LJC,N), USER(*)
C
CALL LSFUN2(M,N,XC,FVECC,FJACC,LJC)
C
RETURN
END
In general the extra parameters, IUSER and USER, should be declared in the calling program as
IUSER(1)
and
USER(1)
, but will not need initialising. If however, the array IW was used to pass information through
E04GEF into LSFUN2, or get information from LSFUN2, then the array IUSER should be declared appropriately and used for this purpose.
E04HAF
Withdrawn at Mark 7.
Replaced by
E04UCF/E04UCA.
E04HBF
Withdrawn at Mark 16.
No longer required.
E04HFF
Withdrawn at Mark 19.
Replaced by
E04HYF.
Old: CALL E04HFF(M,N,X,FSUMSQ,IW,LIW,W,LW,IFAIL)
New: CALL E04HYF(M,N,LSFUN,LSHES,X,FSUMSQ,W,LW,IUSER,USER,IFAIL)
LSFUN and LSHES appear in the parameter list instead of the fixed-name subroutines LSFUN2 and LSHES2 of
E04HFF. LSFUN and LSHES must both be declared as EXTERNAL in the calling (sub)program. In addition they have an extra two parameters,
IUSER and USER, over and above those of LSFUN2 and LSHES2. They may be derived from LSFUN2 and LSHES2 as follows:
SUBROUTINE LSFUN(M,N,XC,FVECC,FJACC,LJC,IUSER,USER)
INTEGER M, N, LJC, IUSER(*)
double precision XC(N), FVECC(M), FJACC(LJC,N), USER(*)
C
CALL LSFUN2(M,N,XC,FVECC,FJACC,LJC)
C
RETURN
END
C
SUBROUTINE LSHES(M,N,FVECC,XC,B,LB,IUSER,USER)
INTEGER M, N, LB, IUSER(*)
double precision FVECC(M), XC(N), B(LB), USER(*)
C
CALL LSHES2(M,N,FVECC,XC,B,LB)
C
RETURN
END
In general, the extra parameters, IUSER and USER, should be declared in the calling program as
IUSER(1)
and
USER(1)
, but will not need initialising. If, however, the array IW was used to pass information through
E04HFF into LSFUN2 or LSHES2, or to get information from LSFUN2, then the array IUSER should be declared appropriately and used
for this purpose.
E04JAF
Withdrawn at Mark 19.
Replaced by
E04JYF.
Old: CALL E04JAF(N,IBOUND,BL,BU,X,F,IW,LIW,LW,IFAIL)
New: CALL E04JYF(N,IBOUND,FUNCT,BL,BU,X,F,IW,LIW,W,LW,IUSER,USER,IFAIL)
FUNCT appears in the parameter list instead of the fixed-name subroutine FUNCT1 of
E04JAF. FUNCT must be declared as EXTERNAL in the calling (sub)program. In addition it has an extra two parameters, IUSER and
USER, over and above those of FUNCT1. It may be derived from FUNCT1 as follows:
SUBROUTINE FUNCT(N,XC,FC,IUSER,USER)
INTEGER N, IUSER(*)
double precision XC(N), FC, USER(*)
C
CALL FUNCT1(N,XC,FC)
C
RETURN
END
The extra parameters, IUSER and USER, should be declared in the calling program as
IUSER(1)
and
USER(1)
, but will not need initialising.
E04JBF
Withdrawn at Mark 16.
Replaced by
E04UCF/E04UCA.
No comparative calls are given between
E04JBF and
E04UCF/E04UCA since both routines have considerable flexibility and can be called with many different options.
E04UCF/E04UCA allows some values to be passed to it, not through the parameter list, but as ‘optional parameters’, supplied through calls
to
E04UDF/E04UDA or
E04UEF/E04UEA. Names of optional parameters are given here in
bold type.
E04UCF/E04UCA is a more powerful routine than
E04JBF, in that it allows for general linear and nonlinear constraints, and for some or all of the first derivatives to be supplied;
however when replacing
E04JBF, only the simple bound constraints are relevant, and only function values are assumed to be available.
Therefore
E04UCF/E04UCA must be called with
NCLIN
=
NCNLN
=
0
, with dummy arrays of size (1) supplied as the arguments A, C and CJAC, and with the name of the auxiliary routine E04UDM
(UDME04 in some implementations) as the argument CONFUN. The optional parameter
Derivative Level must be set to 0.
The subroutine providing function values to
E04UCF/E04UCA is OBJFUN. It has a different parameter list to FUNCT, but can be constructed as follows:
SUBROUTINE OBJFUN(MODE,N,X,OBJF,OBJGRD,NSTATE,IUSER,USER)
INTEGER MODE, N, NSTATE, IUSER(*)
double precision X(N), OBJF, OBJGRD(N), USER(*)
INTEGER IFLAG,IW(1)
double precision W(1)
C
IFLAG = 0
CALL FUNCT(IFLAG,N,X,OBJF,OBJGRD,IW,1,W,1)
IF (IFLAG.LT.0) MODE = IFLAG
RETURN
END
(This assumes that the arrays IW and W are not used to communicate between FUNCT and the calling program;
E04UCF/E04UCA supplies the arrays IUSER and USER specifically for this purpose.)
The functions of the parameters BL and BU are similar, but
E04UCF/E04UCA has no parameter corresponding to IBOUND; all elements of BL and BU must be set (as when
IBOUND
=
0
in the call to
E04JBF). The optional parameter
Infinite bound size must be set to 1.0D+6 if there are any infinite bounds. The function of the parameter ISTATE is similar but the specification
is slightly different. The parameters F and G are equivalent to OBJF and OBJGRD of
E04UCF/E04UCA. It should also be noted that
E04UCF/E04UCA does not allow a user-supplied routine MONIT, but intermediate output is provided by the routine, under the control of the
optional parameters
Major print level and
Minor print level.
Most of the ‘tuning’ parameters in
E04JBF have their counterparts as ‘optional parameters’ to
E04UCF/E04UCA, as indicated in the following list, but the correspondence is not exact and the specifications must be read carefully.
| IPRINT |
Minor print level |
| INTYPE |
Cold start/Warm start |
| MAXCAL |
Minor iteration limit (note that this counts iterations rather than function calls)
|
| ETA |
Line search tolerance |
| XTOL |
Optimality tolerance (note that this specifies the accuracy in F rather than the accuracy in X)
|
| STEPMX |
Step limit |
| DELTA |
Difference interval |
E04KAF
Withdrawn at Mark 19.
Replaced by
E04KYF.
Old: CALL E04KAF(N,IBOUND,BL,BU,X,F,G,IW,LIW,W,LW,IFAIL)
New: CALL E04KYF(N,IBOUND,FUNCT,BL,BU,X,F,G,IW,LIW,W,LW,IUSER,USER,IFAIL)
FUNCT appears in the parameter list instead of the fixed-name subroutine FUNCT2 of
E04KAF. FUNCT must be declared as EXTERNAL in the calling (sub)program. In addition it has an extra two parameters, IUSER and
USER, over and above those of FUNCT2. It may be derived from FUNCT2 as follows:
SUBROUTINE FUNCT(N,XC,FC,GC,IUSER,USER)
INTEGER N, IUSER(*)
double precision XC(N), FC, GC(N), USER(*)
C
CALL FUNCT2(N,XC,FC,GC)
C
RETURN
END
The extra parameters, IUSER and USER, should be declared in the calling program as
IUSER(1)
and
USER(1)
, but will not need initialising.
E04KBF
Withdrawn at Mark 16.
Replaced by
E04UCF/E04UCA.
No comparative calls are given between
E04KBF and
E04UCF/E04UCA since both routines have considerable flexibility and can be called with many different options. Most of the advice given
for replacing
E04JBF (see above) applies also to
E04KBF, and only the differences are given here.
The optional parameter Derivative Level must be set to 1.
The subroutine providing both function and gradient values to
E04UCF/E04UCA is OBJFUN. It has a different parameter list to FUNCT, but can be constructed as follows:
SUBROUTINE OBJFUN(MODE,N,X,OBJF,OBJGRD,NSTATE,IUSER,USER)
INTEGER MODE, N, NSTATE, IUSER(*)
double precision X(N), OBJF, OBJGRD(N), USER(*)
INTEGER IW(1)
double precision W(1)
C
CALL FUNCT(MODE,N,X,OBJF,OBJGRD,IW,1,W,1)
RETURN
END
E04KCF
Withdrawn at Mark 19.
Replaced by
E04KZF.
Old: CALL E04KCF(N,IBOUND,BL,BU,X,F,G,IW,LIW,W,LW,IFAIL)
New: CALL E04KZF(N,IBOUND,FUNCT,BL,BU,X,F,G,IW,LIW,W,LW,IUSER,USER,IFAIL)
FUNCT appears in the parameter list instead of the fixed-name subroutine FUNCT2 of
E04KCF. FUNCT must be declared as EXTERNAL in the calling (sub)program. In addition it has an extra two parameters, IUSER and
USER, over and above those of FUNCT2. It may be derived from FUNCT2 as follows:
SUBROUTINE FUNCT(N,XC,FC,GC,IUSER,USER)
INTEGER N, IUSER(*)
double precision XC(N), FC, GC(N), USER(*)
C
CALL FUNCT2(N,XC,FC,GC)
C
RETURN
END
The extra parameters, IUSER and USER, should be declared in the calling program as
IUSER(1)
and
USER(1)
, but will not need initialising.
E04LAF
Withdrawn at Mark 19.
Replaced by
E04LYF.
Old: CALL E04LAF(N,IBOUND,BL,BU,X,F,G,IW,LIW,W,LW,IFAIL)
New: CALL E04LYF(N,IBOUND,FUNCT,HESS,BL,BU,X,F,G,IW,LIW,W,LW,IUSER,USER,
+ IFAIL)
FUNCT and HESS appear in the parameter list instead of the fixed-name subroutines FUNCT2 and HESS2 of
E04LAF. FUNCT and HESS must both be declared as EXTERNAL in the calling (sub)program. In addition they have an extra two parameters,
IUSER and USER, over and above those of FUNCT2 and HESS2. They may be derived from FUNCT2 and HESS2 as follows:
SUBROUTINE FUNCT(N,XC,FC,GC,IUSER,USER)
INTEGER N, IUSER(*)
double precision XC(N), FC, GC(N), USER(*)
C
CALL FUNCT2(N,XC,FC,GC)
C
RETURN
END
SUBROUTINE HESS(N,XC,HESLC,LH,HESDC,IUSER,USER)
INTEGER N, LH, IUSER(*)
double precision XC(N), HESLC(LH), HESDC(N), USER(*)
C
CALL HESS2(N,XC,HESLC,LH,HESDC)
C
RETURN
END
In general, the extra parameters, IUSER and USER, should be declared in the calling program as
IUSER(1)
and
USER(1)
, but will not need initialising.
E04MBF
Withdrawn at Mark 18.
Replaced by
E04MFF/E04MFA.
Old: CALL E04MBF(ITMAX,MSGLVL,N,NCLIN,NCTOTL,NROWA,A,BL,BU,CVEC,
+ LINOBJ,X,ISTATE,OBJLP,CLAMDA,IWORK,LIWORK,WORK,
+ LWORK,IFAIL)
New: CALL E04MFF(N,NCLIN,A,NROWA,BL,BU,CVEC,ISTATE,X,ITER,OBJLP,
+ AX,CLAMDA,IWORK,LIWORK,WORK,LWORK,IFAIL)
The parameter NCTOTL is no longer required. Values for ITMAX, MSGLVL and LINOBJ may be supplied by calling an option setting
routine.
E04MFF/E04MFA contains two additional parameters as follows:
- ITER – INTEGER.
-
AX(*)
– double precision array of dimension at least
max(1,NCLIN)
.
The minimum value of the parameter LIWORK must be increased from
2
×
N
to
2
×
N
+
3
. The minimum value of the parameter LWORK may also need to be changed. See the routine documents for further information.
E04NAF
Withdrawn at Mark 18.
Replaced by
E04NFF/E04NFA.
Old: CALL E04NAF(ITMAX,MSGLVL,N,NCLIN,NCTOTL,NROWA,NROWH,NCOLH,
+ BIGBND,A,BL,BU,CVEC,FEATOL,HESS,QPHESS,COLD,LP,
+ ORTHOG,X,ISTATE,ITER,OBJ,CLAMDA,IWORK,LIWORK,
+ WORK,LWORK,IFAIL)
New: CALL E04NFF(N,NCLIN,A,NROWA,BL,BU,CVEC,HESS,NROWH,QPHESS,
+ ISTATE,X,ITER,OBJ,AX,CLAMDA,IWORK,LIWORK,WORK,
+ LWORK,IFAIL)
The specification of the subroutine QPHESS must also be changed as follows:
Old: SUBROUTINE QPHESS(N,NROWH,NCOLH,JTHCOL,HESS,X,HX)
INTEGER N, NROWH, NCOLH, JTHCOL
double precision HESS(NROWH,NCOLH), X(N), HX(N)
New: SUBROUTINE QPHESS(N,JTHCOL,HESS,NROWH,X,HX)
INTEGER N, JTHCOL, NROWH
double precision HESS(NROWH,*), X(N), HX(N)
The parameters NCTOTL, NCOLH and ORTHOG are no longer required. Values for ITMAX, MSGLVL, BIGBND, FEATOL, COLD and LP may
be supplied by calling an option setting routine.
E04NFF/E04NFA contains one additional parameter as follows:
-
AX(*)
– double precision array of dimension at least
max(1,NCLIN)
.
The minimum value of the parameter LIWORK must be increased from
2
×
N
to
2
×
N
+
3
. The minimum value of the parameter LWORK may also need to be changed. See the routine documents for further information.
E04NKF/E04NKA
Scheduled for withdrawal at Mark 23.
Replaced by
E04NQF.
Old: CALL E04NKF(N,M,NNZ,IOBJ,NCOLH,QPHX,A,HA,KA,BL,BU,START,
+ NAMES,NNAME,CRNAME,NS,XS,ISTATE,,MINIZ, MINZ, NINF,
+ SINF,OBJ,CLAMDA,IZ,LENIZ,Z,LENZ,IFAIL)
New: CALL E04NQF(START,QPHX,M,N,NE,NNAME,LENC,NCOLH,IOBJ,OBJADD,
+ PROB,ACOL,INDA,LOCA,BL,BU,C,NAMES,HELAST,HS,X,PI,RC,NS,
+ NINF,SINF,OBJ,CW,LENCW,IW,LENIW,RW,LENRW,
+ CUSER,IUSER,RUSER,IFAIL)
where:
| START |
has the same meaning in both calls |
| QPHX |
is a user-provided function supplying the matrix product Hx in both calls:
Old: SUBROUTINE QPHX(NSTATE, NCOLH, X, HX)
New: SUBROUTINE QPHX(NCOLH,X,HX,NSTATE,CUSER,IUSER,RUSER) Here parameters with the same name have the same roles. The extra parameters CUSER, USER, USER are user workspace that may
be used instead of COMMON to pass information into QPHX. |
| M |
has the same meaning, the number of linear constraints. |
| N |
has the same meaning, the number of variables. |
| NE |
has the same meaning as NNZ in E04NKF. |
| NNAME |
has the same meaning in both calls. |
| LENC |
is unique to E04NQF. |
| NCOLH |
has the same meaning in both calls. |
| IOBJ |
has the same meaning in both calls. |
| OBJADD |
is unique to E04NQF. |
| PROB |
is unique to E04NQF, but see NAME(1) of E04NKF. |
| ACOL |
is A in the call to E04NKF. |
| INDA |
is HA in the call to E04NKF. |
| LOCA |
is KA in the call to E04NKF. |
| BL |
has the same meaning in both calls. |
| BU |
has the same meaning in both calls. |
| C |
is unique to E04NQF. |
| NAMES |
corresponds to CRNAME of E04NKF - NOT to NAMES of E04NKF. |
| HELAST |
is unique to E04NQF. |
| HS |
is unique to E04NQF. |
| X |
is XS in the call to E04NKF. |
| PI |
is unique to E04NQF. |
| RC |
is CLAMDA in the call to E04NKF. |
| NS |
is unique to E04NQF. |
| NINF |
has the same meaning in both calls. |
| SINF |
has the same meaning in both calls. |
| OBJ |
has the same meaning in both calls. |
| CW |
is unique to E04NQF. |
| LENCW |
is unique to E04NQF. |
| IW |
corresponds (roughly) to IZ in the call to E04NKF. |
| LENIW |
corresponds to LENIZ in the call tp E04NKF. |
| RW |
corresponds (roughly) to Z in the call to E04NKF. |
| LENRW |
corresponds to LENZ in the call to E04NKF. |
| CUSER |
is unique to E04NQF. |
| IUSER |
is unique to E04NQF. |
| RUSER |
is unique to E04NQF. |
| IFAIL |
has the same meaning in both calls. |
E04NLF/E04NLA
Scheduled for withdrawal at Mark 23.
Replaced by
E04NRF.
Old: CALL E04NLF(IOPTNS,INFORM)
New: CALL E04NPF(CW,LENCW,IW,LENIW,RW,LENRW,IFAIL) !initialisation
IF (IFAIL.EQ.0) THEN
INFORM=1
CALL E04NRF(IOPTNS,CW,IW,RW,INFORM) !set options
etc ...
E04NMF/E04NMA
Scheduled for withdrawal at Mark 23.
Replaced by
E04NSF,
E04NTF and
E04NUF.
Old: CALL E04NMF(string)
New: CALL E04NPF(CW,LENCW,IW,LENIW,RW,LENRW,IFAIL) !initialisation
IF (IFAIL.EQ.0) THEN
INFORM=0
CALL E04NSF(string,CW,IW,RW,INFORM) !set options
etc ...
Or to set an integer value:
Old: CALL E04NMF('option = n')
New: CALL E04NPF(CW,LENCW,IW,LENIW,RW,LENRW,IFAIL) !initialisation
IF (IFAIL.EQ.0) THEN
INFORM=0
CALL E04NTF('option',n,CW,IW,RW,INFORM) !set options
etc ...
Or to set a double precision value:
Old: CALL E04NMF('option = v')
New: CALL E04NPF(CW,LENCW,IW,LENIW,RW,LENRW,IFAIL) !initialisation
IF (IFAIL.EQ.0) THEN
INFORM=0
CALL E04NUF('option',v,CW,IW,RW,INFORM) !set options
etc ...
E04UAF
Withdrawn at Mark 13.
Replaced by
E04UCF/E04UCA.
No comparative calls are given between
E04UAF and
E04UCF/E04UCA since both routines have considerable flexibility and can be called with many different options. However users of
E04UAF should have no difficulty in making the transition. Most of the ‘tuning’ parameters in
E04UAF have their counterparts as optional parameters to
E04UCF/E04UCA, and these may be provided by calling an option setting routine prior to the call to
E04UCF/E04UCA. The subroutines providing function and constraint values to
E04UCF/E04UCA are OBJFUN and CONFUN respectively; they have different parameter lists to FUNCT1 and CON1, but can be constructed simply
as
SUBROUTINE OBJFUN(MODE,N,X,OBJF,OBJGRD,NSTATE,IUSER,USER)
INTEGER MODE, N, NSTATE, IUSER(*)
double precision X(N), OBJF, OBJGRD(N), USER(*)
C
CALL FUNCT1(MODE,N,X,OBJF)
RETURN
END
SUBROUTINE CONFUN(MODE,NCNLN,N,NROWJ,NEEDC,X,C,CJAC.NSTATE,
+ IUSER,USER)
INTEGER MODE, NCNLN, N, NROWJ, NEEDC(*), NSTATE, IUSER(*)
double precision X(X), C(*), CJAC(NROWJ,*), USER(*)
C
CALL CON1(MODE,N,NCNLN,X,C)
RETURN
END
The parameters OBJGRD, NEEDC, CJAC, IUSER and USER are the same as those for
E04UCF/E04UCA itself. It is important to note that, unlike FUNCT1 and CON1, a call to CONFUN is not preceded by a call to OBJFUN with
the same values in X, so that FUNCT1 and CON1 will need to be modified if this property was being utilized. It should also
be noted that
E04UCF/E04UCA allows general linear constraints to be supplied separately from nonlinear constraints, and indeed this is to be encouraged,
but the above call to CON1 assumes that linear constraints are being regarded as nonlinear.
E04UCF/E04UCA
Scheduled for withdrawal at Mark 23.
Replaced by
E04WDF.
Old: CALL E04UCF(N,NCLIN,NCNLN,LDA,LDCJ,LDR,A,BL,BU,CONFUN,
+ OBJFUN,ITER,ISTATE,C,CJAC,CLAMDA,OBJF,OBJGRD,
+ R,X,IWORK,LIWORK,WORK,LWORK,IUSER,USER,IFAIL)
New: CALL E04WDF(N,NCLIN,NCNLN,LDA,LDCJ,LDH,A,BL,BU,CONFUN,OBJFUN,
+ MAJITS,ISTATE,CCON,CJAC,CLAMDA,OBJF,GRAD,HESS,X,IW,
+ LENIW,RW,LENRW,IUSER,RUSER,IFAIL)
where
- N, NCLIN, NCNLN, LDA, LDCJ have the same meaning in both calls.
- LDH corresponds to LDR.
- A, BL, BU have the same meaning in both calls.
- CONFUN has the same parameter list and definitions in both calls. Note however that the MODE parameter of CONFUN in E04WDF has an extended definition to allow you set MODE=-1. This requests E04WDF to evaluate the functions closer to the last acceptable point.
- OBJFUN has the same parameter list and definitions in both calls. Note however that the MODE parameter of OBJFUN in E04WDF has an extended definition to allow you set MODE=-1. This requests E04WDF to evaluate the functions closer to the last acceptable point.
- MAJITS corresponds to ITER of E04UCF/E04UCA.
- ISTATE is similar in both calls. However the negative values allowed in E04UCF/E04UCA are not permitted in E04WDF.
- CCON corresponds to C in E04UCF/E04UCA.
- CJAC, CLAMDA, OBJ have the same meaning in both calls.
- GRAD corresponds to OBJGRD in E04UCF/E04UCA.
- HESS roughly corresponds to R in E04UCF/E04UCA:
- There is exact correspondence if a ‘Cold Start’ option is used.
- For a ‘Warm Start’ HESS must contain an approximation to the Hessian of the Lagrangian, whereas R in E04UCF/E04UCA contained a triangular factor of a Cholesky decomposition of this matrix.
- X has the same meaning in both calls.
- IW, LENIW, RW, LENRW are unique to E04WDF.
- IUSER has the same meaning in both calls.
- RUSER corresponds USER in E04UCF/E04UCA.
- IFAIL has the same meaning in both calls.
E04UNF
Scheduled for withdrawal at Mark 22.
Replaced by
E04USF/E04USA.
Old: CALL E04UNF(M,N,NCLIN,NCNLN,LDA,LDCJ,LDFJ,
+ LDR,A,BL,BU,Y,CONFUN,OBJFUN,ITER,
+ ISTATE,C,CJAC,F,FJAC,CLAMDA,OBJF,
+ R,X,IWORK,LIWORK,WORK,LWORK,IUSER,
+ USER,IFAIL)
New: CALL E04USF(M,N,NCLIN,NCNLN,LDA,LDCJ,LDFJ,
+ LDR,A,BL,BU,Y,CONFUN,OBJFUN,ITER,
+ ISTATE,C,CJAC,F,FJAC,CLAMDA,OBJF,
+ R,X,IWORK,LIWORK,WORK,LWORK,IUSER,
+ USER,IFAIL)
The specification of the subroutine OBJFUN must also be changed as follows:
Old: SUBROUTINE OBJFUN(MODE,M,N,LDFJ,X,F,FJAC,NSTATE,IUSER,USER)
INTEGER MODE,M,N,LDFJ,NSTATE,IUSER(*)
double precision X(N),F(*),FJAC(LDFJ,*),USER(*)
New: SUBROUTINE OBJFUN(MODE,M,N,LDFJ,NEEDFI,X,F,FJAC,NSTATE,
+ IUSER,USER)
INTEGER MODE,M,N,NEEFI,NSTATE,IUSER(*)
double precision X(N),F(*),FJAC(LDFJ,*),USER(*)
See the routine documents for further information.
E04UPF
Withdrawn at Mark 19.
Replaced by
E04UNF.
Old: CALL E04UPF(M,N,NCLIN,NCNLN,LDA,LDCJ,LDFJ,LDR,A,BL,BU,
+ CONFUN,OBJFUN,ITER,ISTATE,C,CJAC,F,FJAC,
+ CLAMDA,OBJF,R,X,IWORK,LIWORK,WORK,LWORK,
+ IUSER,USER,IFAIL)
New: CALL E04USF(M,N,NCLIN,NCNLN,LDA,LDCJ,LDFJ,
+ LDR,A,BL,BU,Y,CONFUN,OBJFUN,ITER,
+ ISTATE,C,CJAC,F,FJAC,CLAMDA,OBJF,
+ R,X,IWORK,LIWORK,WORK,LWORK,IUSER,
+ USER,IFAIL)
E04USF/E04USA contains one additional parameter as follows:
-
Y(M)
– double precision array.
Note that a call to
E04UPF is the same as a call to
E04USF/E04USA with
Y(i)
=0.0
, for
i=1,2,…,M
.
The specification of the subroutine OBJFUN must also be changed as follows:
Old: SUBROUTINE OBJFUN(MODE,M,N,LDFJ,X,F,FJAC,NSTATE,IUSER,USER)
INTEGER MODE,M,N,LDFJ,NSTATE,IUSER(*)
double precision X(N),F(*),FJAC(LDFJ,*),USER(*)
New: SUBROUTINE OBJFUN(MODE,M,N,LDFJ,NEEDFI,X,F,FJAC,NSTATE,
+ IUSER,USER)
INTEGER MODE,M,N,NEEFI,NSTATE,IUSER(*)
double precision X(N),F(*),FJAC(LDFJ,*),USER(*)
See the routine documents for further information.
E04VAF
Withdrawn at Mark 12.
Replaced by
E04UCF/E04UCA.
E04VBF
Withdrawn at Mark 12.
Replaced by
E04UCF/E04UCA.
E04VCF
Withdrawn at Mark 17.
Replaced by
E04UCF/E04UCA.
Old: CALL E04VCF(ITMAX,MSGLVL,N,NCLIN,NCNLN,NCTOTL,NROWA,NROWJ,
+ NROWR,BIGBND,EPSAF,ETA,FTOL,A,BL,BU,FEATOL,
+ CONFUN,OBJFUN,COLD,FEALIN,ORTHOG,X,ISTATE,R,ITER,
+ C,CJAC,OBJF,OBJGRD,CLAMDA,IWORK,LIWORK,WORK,LWORK,
+ IFAIL)
New: CALL E04UCF(N,NCLIN,NCNLN,NROWA,NROWJ,NROWR,A,BL,BU,CONFUN,
+ OBJFUN,ITER,ISTATE,C,CJAC,CLAMDA,OBJF,OBJGRD,R,X,
+ IWORK,LIWORK,WORK,LWORK,IUSER,USER,IFAIL)
The specification of the subroutine OBJFUN must also be changed as follows:
Old: SUBROUTINE OBJFUN(MODE,N,X,OBJF,OBJGRD,NSTATE)
INTEGER MODE, N, NSTATE
double precision X(N), OBJF, OBJGRD(N)
New: SUBROUTINE OBJFUN(MODE,N,X,OBJF,OBJGRD,NSTATE,IUSER,USER)
INTEGER MODE, N, NSTATE, IUSER(*)
double precision X(N), OBJF, OBJGRD(N), USER(*)
If
NCNLN
>
0
, the specification of the subroutine CONFUN must also be changed as follows:
Old: SUBROUTINE CONFUN(MODE,NCNLN,N,NROWJ,X,C,CJAC,NSTATE)
INTEGER MODE, NCNLN, N, NROWJ, NSTATE
double precision X(N), C(NROWJ), CJAC(NROWJ,N)
New: SUBROUTINE CONFUN(MODE,NCNLN,N,NROWJ,NEEDC,X,C,CJAC,NSTATE,
+ IUSER,USER)
INTEGER MODE, NCNLN, N, NROWJ, NEEDC(NCNLN), NSTATE, IUSER(*)
double precision X(N), C(NCNLN), CJAC(NROWJ,N), USER(*)
If
NCNLN
=
0
, then the name of the dummy routine E04VDM (VDME04 in some implementations) may need to be changed to E04UDM (UDME04 in some
implementations) in the calling program.
The parameters NCTOTL, EPSAF, FEALIN and ORTHOG are no longer required. Values for ITMAX, MSGLVL, BIGBND, ETA, FTOL, COLD
and FEATOL may be supplied by calling an option setting routine.
E04UCF/E04UCA contains two additional parameters as follows:
-
IUSER(*)
– INTEGER array of dimension at least 1.
-
USERR(*)
– double precision array of dimension at least 1.
The minimum value of the parameter LIWORK must be increased from
3
×
N
+
NCLIN
+
NCNLN
to
3
×
N
+
NCLIN
+
2
×
NCNLN
. The minimum value of the parameter LWORK may also need to be changed. See the routine documents for further information.
E04VDF
Withdrawn at Mark 17.
Replaced by
E04UCF/E04UCA.
Old: IFAIL = 110
CALL E04VDF(ITMAX,MSGLVL,N,NCLIN,NCNLN,NCTOTL,NROWA,NROWJ,
+ CTOL,FTOL,A,BL,BU,CONFUN,OBJFUN,X,ISTATE,C,CJAC,
+ CJAC,OBJF,OBJGRD,CLAMDA,IWORK,LIWORK,WORK,LWORK,
+ IFAIL)
New: IFAIL = -1
CALL E04UCF(N,NCLIN,NCNLN,NROWA,NROWJ,N,A,BL,BU,CONFUN,OBJFUN,
+ ITER,ISTATE,C,CJAC,CLAMDA,OBJF,OBJGRD,R,X,IWORK,
+ LIWORK,WORK,LWORK,IUSER,USER,IFAIL)
The specification of the subroutine OBJFUN must also be changed as follows:
Old: SUBROUTINE OBJFUN(MODE,N,X,OBJF,OBJGRD,NSTATE)
INTEGER MODE, N, NSTATE
double precision X(N), OBJF, OBJGRD(N)
New: SUBROUTINE OBJFUN(MODE,N,X,OBJF,OBJGRD,NSTATE,IUSER,USER)
INTEGER MODE, N, NSTATE, IUSER(*)
double precision X(N), OBJF, OBJGRD(N), USER(*)
If
NCNLN
>
0
, the specification of the subroutine CONFUN must also be changed as follows:
Old: SUBROUTINE CONFUN(MODE,NCNLN,N,NROWJ,X,C,CJAC,NSTATE)
INTEGER MODE, NCNLN, N, NROWJ, NSTATE
double precision X(N), C(NROWJ), CJAC(NROWJ,N)
New: SUBROUTINE CONFUN(MODE,NCNLN,N,NROWJ,NEEDC,X,C,CJAC,NSTATE,
+ IUSER,USER)
INTEGER MODE, NCNLN, N, NROWJ, NEEDC(NCNLN), NSTATE, IUSER(*)
double precision X(N), C(NCNLN), CJAC(NROWJ,N), USER(*)
If
NCNLN
=
0
, then the name of the dummy routine E04VDM (VDME04 in some implementations) may need to be changed to E04UDM (UDME04 in some
implementations) in the calling program.
The parameter NCTOTL is no longer required. Values for ITMAX, MSGLVL, CTOL and FTOL may be supplied by calling an option
setting routine.
E04UCF/E04UCA contains four additional parameters as follows:
- ITER – INTEGER.
-
R(NN)
– double precision array.
-
IUSER(*)
– INTEGER array of dimension at least 1.
-
USER(*)
– double precision array of dimension at least 1.
The minimum value of the parameter LIWORK must be increased from
3
×
N
+
NCLIN
+
NCNLN
to
3
×
N
+
NCLIN
+
2
×
NCNLN
. The minimum value of the parameter LWORK may also need to be changed. See the routine documents for further information.
E04WAF
Withdrawn at Mark 12.
Replaced by
E04UCF/E04UCA.
E04ZAF
Withdrawn at Mark 12.
Replaced by
E04ZCF/E04ZCA.
E04ZBF
Withdrawn at Mark 12.
no longer required.
F01AAF
Withdrawn at Mark 17.
Replaced by
F07ADF (DGETRF) and
F07AJF (DGETRI).
Old: CALL F01AAF(A,IA,N,X,IX,WKSPCE,IFAIL)
New: CALL sgetrf(N,N,A,IA,IPIV,IFAIL)
CALL F06QFF('General',N,N,A,IA,X,IX)
CALL sgetri(N,X,IX,IPIV,WKSPCE,LWORK,IFAIL)
where IPIV is an INTEGER vector of length N, and the INTEGER LWORK is the length of array WKSPCE, which must be at least
max(1,N)
. In the replacement calls,
F07ADF (DGETRF) computes the
LU
factorization of the matrix
A
,
F06QFF copies the factorization from A to X, and
F07AJF (DGETRI) overwrites X by the inverse of
A
. If the original matrix
A
is no longer required, the call to
F06QFF is not necessary, and references to X and IX in the call of
F07AJF (DGETRI) may be replaced by references to A and IA, in which case A will be overwritten by the inverse.
F01ACF
Withdrawn at Mark 16.
Replaced by
F01ABF.
Old: CALL F01ACF(N,EPS,A,IA,B,IB,Z,L,IFAIL)
New: CALL F01ABF(A,IA,N,B,IB,Z,IFAIL)
The number of iterative refinement corrections returned by
F01ACF in L is no longer available. The parameter EPS is no longer required.
F01AEF
Old: CALL F01AEF(N,A,IA,B,IB,DL,IFAIL)
New: DO 20 J = 1, N
DO 10 I = J, N
A(I,J) = A(J,I)
B(I,J) = B(J,I)
10 CONTINUE
DL(J) = B(J,J)
20 CONTINUE
CALL spotrf('L',N,B,IB,INFO)
IF (INFO.EQ.0) THEN
CALL ssygst(1,'L',N,A,IA,B,IB,INFO)
ELSE
IFAIL = 1
END IF
CALL sswap(N,DL,1,B,IB+1)
IFAIL is set to 1 if the matrix
B
is not positive-definite. It is essential to test IFAIL.
F01AFF
Withdrawn at Mark 18.
Replaced by
F06EGF (DSWAP) and
F06YJF (DTRSM).
Old: CALL F01AFF(N,M1,M2,B,IB,DL,Z,IZ)
New: CALL sswap(N,DL,1,B,IB+1)
CALL strsm('L','L','T','N',N,M2-M1+1,1.0D0,B,IB,Z(1,M1),IZ)
CALL sswap(N,DL,1,B,IB+1)
F01AGF
Withdrawn at Mark 18.
Replaced by
F08FEF (DSYTRD).
Old: CALL F01AGF(N,TOL,A,IA,D,E,E2)
New: CALL ssytrd('L',N,A,IA,D,E(2),TAU,WORK,LWORK,INFO)
E(1) = 0.0D0
DO 10 I = 1, N
E2(I) = E(I)*E(I)
10 CONTINUE
where TAU is a double precision array of length at least
(N-1)
, WORK is a real array of length at least (1) and LWORK is its actual length.
Note that the tridiagonal matrix computed by
F08FEF (DSYTRD) is different from that computed by
F01AGF, but it has the same eigenvalues.
F01AHF
Withdrawn at Mark 18.
Replaced by
F08FGF (DORMTR).
The following replacement is valid only if the previous call to
F01AGF has been replaced by a call to
F08FEF (DSYTRD) as shown above.
Old: CALL F01AHF(N,M1,M2,A,IA,E,Z,IZ)
New: CALL sormtr('L','L','N',N,M2-M1+1,A,IA,TAU,Z(1,M1),IZ,WORK,
+ LWORK,INFO)
where WORK is a double precision array of length at least
(M2-M1+1)
, and LWORK is its actual length.
F01AJF
Withdrawn at Mark 18.
Replaced by
F08FEF (DSYTRD) and
F08FFF (DORGTR).
Old: CALL F01AJF(N,TOL,A,IA,D,E,Z,IZ)
New: CALL ssytrd('L',N,A,IA,D,E(2),TAU,WORK,LWORK,INFO)
E(1) = 0.0D0
CALL F06QFF('L',N,N,A,IA,Z,IZ)
CALL sorgtr('L',N,Z,IZ,TAU,WORK,LWORK,INFO)
where TAU is a double precision array of length at least
(N-1)
, WORK is a real array of length at least
(N-1)
and LWORK is its actual length.
Note that the tridiagonal matrix
T
and the orthogonal matrix
Q
computed by
F08FEF (DSYTRD) and
F08FFF (DORGTR) are different from those computed by
F01AJF, but they satisfy the same relation
QTAQ=T
.
F01AKF
Withdrawn at Mark 18.
Replaced by
F08NEF (DGEHRD).
Old: CALL F01AKF(N,K,L,A,IA,INTGER)
New: CALL sgehrd(N,K,L,A,IA,TAU,WORK,LWORK,INFO)
where TAU is a double precision array of length at least
(N-1)
, WORK is a real array of length at least
(N)
and LWORK is its actual length.
Note that the Hessenberg matrix computed by
F08NEF (DGEHRD) is different from that computed by
F01AKF, because
F08NEF (DGEHRD) uses orthogonal transformations, whereas
F01AKF uses stabilized elementary transformations.
F01ALF
Withdrawn at Mark 18.
Replaced by
F08NGF (DORMHR).
The following replacement is valid only if the previous call to
F01AKF has been replaced by a call to
F08NEF (DGEHRD) as indicated above.
Old: CALL F01ALF(K,L,IR,A,IA,INTGER,Z,IZ,N)
New: CALL sormhr('L','N',N,IR,K,L,A,IA,TAU,Z,IZ,WORK,LWORK,INFO)
where WORK is a double precision array of length at least
(IR)
and LWORK is its actual length.
F01AMF
Withdrawn at Mark 18.
Replaced by
F08NSF (ZGEHRD).
Old: CALL F01AMF(N,K,L,AR,IAR,AI,IAI,INTGER)
New: DO 20 J = 1, N
DO 10 I = 1, N
A(I,J) = cmplx(AR(I,J),AI(I,J))
10 CONTINUE
20 CONTINUE
CALL cgehrd(N,K,L,A,IA,TAU,WORK,LWORK,INFO)
where A is a complex*16 array of dimension
(IA,N)
, TAU is a complex*16 array of length at least
(N-1)
, WORK is a complex*16 array of length at least
(N)
and LWORK is its actual length.
Note that the Hessenberg matrix computed by
F08NSF (ZGEHRD) is different from that computed by
F01AMF, because
F08NSF (ZGEHRD) uses orthogonal transformations, whereas
F01AMF uses stabilized elementary transformations.
F01ANF
Withdrawn at Mark 18.
Replaced by
F08NTF (ZUNGHR).
The following replacement is valid only if the previous call to
F01AMF has been replaced by a call to
F08NSF (ZGEHRD) as indicated above.
Old: CALL F01ANF(K,L,IR,AR,IAR,AI,IAI,INTGER,ZR,IZR,ZI,IZI,N)
New: CALL cunhmr('L','N',N,IR,K,L,A,IA,TAU,Z,IZ,WORK,LWORK,INFO)
DO 20 J = 1, IR
DO 10 I = 1, N
ZR(I,J) = real(Z(I,J))
ZI(I,J) = imag(Z(I,J))
10 CONTINUE
20 CONTINUE
where A is a complex*16 array of dimension
(IA,N)
, TAU is a complex*16 array of length at least
(N-1)
, Z is a complex*16 array of dimension
(IZ,IR)
, WORK is a complex*16 array of length at least
(IR)
and LWORK is its actual length.
F01APF
Withdrawn at Mark 18.
Replaced by
F06QFF and
F08NFF (DORGHR).
The following replacement is valid only if the previous call to
F01AKF has been replaced by a call to
F08NEF (DGEHRD) as indicated above.
Old: CALL F01APF(N,K,L,INTGER,H,IH,V,IV)
New: CALL F06QFF('L',N,N,H,IH,V,IV)
CALL sorghr(N,K,L,V,IV,TAU,WORK,LWORK,INFO)
where WORK is a double precision array of length at least
(N)
, and LWORK is its actual length.
Note that the orthogonal matrix formed by
F08NFF (DORGHR) is not the same as the non-orthogonal matrix formed by
F01APF. See
F01AKF above.
F01ATF
Withdrawn at Mark 18.
Replaced by
F08NHF (DGEBAL).
Old: CALL F01ATF(N,IB,A,IA,K,L,D)
New: CALL sgebal('B',N,A,IA,K,L,D,INFO)
Note that the balanced matrix returned by
F08NHF (DGEBAL) may be different from that returned by
F01ATF.
F01AUF
Withdrawn at Mark 18.
Replaced by
F08NJF (DGEBAK).
Old: CALL F01AUF(N,K,L,M,D,Z,IZ)
New: CALL sgebak('B','R',N,K,L,D,M,Z,IZ,INFO)
F01AVF
Withdrawn at Mark 18.
Replaced by
F08NVF (ZGEBAL).
Old: CALL F01AVF(N,IB,AR,IAR,AI,IAI,K,L,D)
New: DO 20 J = 1, N
DO 10 I = 1, N
A(I,J) = cmplx(AR(I,J),AI(I,J))
10 CONTINUE
20 CONTINUE
CALL cgebal('B',N,A,IA,K,L,D,INFO)
DO 20 J = 1, N
DO 10 I = 1, N
AR(I,J) = real(A(I,J))
AI(I,J) = imag(A(I,J))
10 CONTINUE
20 CONTINUE
where A is a complex*16 array of dimension
(IA,N)
.
Note that the balanced matrix returned by
F08NVF (ZGEBAL) may be different from that returned by
F01AVF.
F01AWF
Withdrawn at Mark 18.
Replaced by
F08NWF (ZGEBAK).
Old: CALL F01AWF(N,K,L,M,D,ZR,IZR,ZI,IZI)
New: DO 20 J = 1, M
DO 10 I = 1, N
Z(I,J) = cmplx(ZR(I,J),ZI(I,J))
10 CONTINUE
20 CONTINUE
CALL cgebak('B','R',N,K,L,D,M,Z,IZ,INFO)
DO 40 J = 1, M
DO 30 I = 1, N
ZR(I,J) = real(Z(I,J))
ZI(I,J) = imag(Z(I,J))
30 CONTINUE
40 CONTINUE
where Z is a complex*16 array of dimension
(IZ,M)
.
F01AXF
Withdrawn at Mark 18.
Replaced by
F08BEF (DGEQPF) and
F06EFF (DCOPY).
Old: CALL F01AXF(M,N,QR,IQR,ALPHA,IPIV,Y,E,IFAIL)
New: CALL sgeqpf(M,N,QR,IQR,IPIV,Y,WORK,INFO)
CALL scopy(N,QR,IQR+1,ALPHA,1)
where WORK is a double precision array of length at least
(3×N)
.
Note that the details of the Householder matrices returned by
F08BEF (DGEQPF) are different from those returned by
F01AXF, but they determine the same orthogonal matrix
Q
.
F01AYF
Withdrawn at Mark 18.
Replaced by
F08GEF (DSPTRD).
Old: CALL F01AYF(N,TOL,A,IA,D,E,E2)
New: CALL ssptrd('U',N,A,D,E(2),TAU,INFO)
E(1) = 0.0D0
DO 10 I = 1, N
E2(I) = E(I)*E(I)
10 CONTINUE
where TAU is a double precision array of length at least
(N-1)
.
F01AZF
Withdrawn at Mark 18.
Replaced by
F08GGF (DOPMTR).
The following replacement is valid only if the previous call to
F01AYF has been replaced by a call to
F08GEF (DSPTRD) as shown above.
Old: CALL F01AZF(N,M1,M2,A,IA,Z,IZ)
New: CALL sopmtr('L','U','N',N,M2-M1+1,A,TAU,Z(1,M1),IZ,WORK,INFO)
where WORK is a double precision array of length at least
(M2-M1+1)
.
F01BCF
Withdrawn at Mark 18.
Replaced by
F08FSF (ZHETRD) and
F08FTF (ZUNGTR).
Old: CALL F01BCF(N,TOL,AR,IAR,AI,IAI,D,E,WK1,WK2)
New: DO 20 J = 1, N
DO 10 I = 1, N
A(I,J) = cmplx(AR(I,J),AI(I,J))
10 CONTINUE
20 CONTINUE
CALL chetrd('L',N,A,IA,D,E(2),TAU,WORK,LWORK,INFO)
E(1) = 0.0D0
CALL cungtr('L',N,A,IA,TAU,WORK,LWORK,INFO)
DO 40 J = 1, N
DO 30 I = 1, N
AR(I,J) = real(A(I,J))
AI(I,J) = imag(A(I,J))
30 CONTINUE
40 CONTINUE
where A is a complex*16 array of dimension
(IA,N)
, TAU is a complex*16 array of length at least
(N-1)
, WORK is a complex*16 array of length at least
(N-1)
, and LWORK is its actual length.
Note that the tridiagonal matrix
T
and the unitary matrix
Q
computed by
F08FSF (ZHETRD) and
F08FTF (ZUNGTR) are different from those computed by
F01BCF, but they satisfy the same relation
QHAQ=T
.
F01BDF
Old: CALL F01BDF(N,A,IA,B,IB,DL,IFAIL)
New: DO 20 J = 1, N
DO 10 I = J, N
A(I,J) = A(J,I)
B(I,J) = B(J,I)
10 CONTINUE
DL(J) = B(J,J)
20 CONTINUE
CALL spotrf('L',N,B,IB,INFO)
IF (INFO.EQ.0) THEN
CALL ssygst(2,'L',N,A,IA,B,IB,INFO)
ELSE
IFAIL = 1
END IF
CALL sswap(N,DL,1,B,IB+1)
IFAIL is set to 1 if the matrix B is not positive-definite. It is essential to test IFAIL.
F01BEF
Withdrawn at Mark 18.
Replaced by
F06YFF (DTRMM).
Old: CALL F01BEF(N,M1,M2,B,IB,DL,V,IV)
New: CALL sswap(N,DL,1,B,IB+1)
CALL strmm('L','L','N','N',N,M2-M1+1,1.0D0,B,IB,V(1,M1),IV)
CALL sswap(N,DL,1,B,IB+1)
F01BFF
Withdrawn at Mark 8.
Replaced by
F07GDF (DPPTRF) or
F07PDF (DSPTRF).
F01BHF
Withdrawn at Mark 9.
Replaced by
F02WEF.
F01BJF
Withdrawn at Mark 9.
Replaced by
F08HEF (DSBTRD).
F01BKF
Withdrawn at Mark 9.
Replaced by
F02WDF.
F01BMF
Withdrawn at Mark 9.
Replaced by
F07BDF (DGBTRF).
F01BNF
Withdrawn at Mark 17.
Replaced by
F07FRF (ZPOTRF).
Old: CALL F01BNF(N,A,IA,P,IFAIL)
New: CALL cpotrf('Upper',N,A,IA,IFAIL)
where, before the call, array A contains the upper triangle of the matrix to be factorized rather than the lower triangle
(note that the elements of the upper triangle are the complex conjugates of the elements of the lower triangle). The double precision array P is no longer required; the upper triangle of A is overwritten by the upper triangular factor
U
, including the diagonal elements (which are not reciprocated).
F01BPF
Withdrawn at Mark 17.
Replaced by
F07FRF (ZPOTRF) and
F07FWF (ZPOTRI).
Old: CALL F01BPF(N,A,IA,V,IFAIL)
New: CALL cpotrf('Upper',N,A,IA,IFAIL)
CALL cpotri('Upper',N,A,IA,IFAIL)
where, before the calls, the upper triangle of the matrix to be inverted must be contained in rows 1 to N of A, rather than
the lower triangle being in rows 2 to
N+1
(note that the elements of the upper triangle are the complex conjugates of the elements of the lower triangle). The workspace
vector V is no longer required.
F01BQF
Withdrawn at Mark 16.
Replaced by
F07GDF (DPPTRF) or
F07PDF (DSPTRF).
The replacement routines do not have exactly the same functionality as
F01BQF; if this functionality is genuinely required, please contact NAG.
- where the symmetric matrix is known to be positive-definite (if the matrix is in fact not positive-definite, the replacement
routine will return a positive value in IFAIL)
Old: CALL F01BQF(N,EPS,RL,IRL,D,IFAIL)
New: CALL spptrf('Lower',N,RL,IFAIL)
- where the matrix is not positive-definite (the replacement routine forms an
LDLT
factorization where
D
is block diagonal, rather than a Cholesky factorization)
Old: CALL F01BQF(N,EPS,RL,IRL,D,IFAIL)
New: CALL ssptrf('Lower',N,RL,IPIV,IFAIL)
For the replacement calls in both (a) and (b), the array RL must now hold the complete lower triangle of the symmetric matrix,
including the diagonal elements, which are no longer required to be stored in the redundant array D. The declared dimension
of RL must be increased from at least
N(N-1)
/2
to at least
N(N+1)
/2
. It is important to note that for the calls of
F07GDF (DPPTRF) and
F07PDF (DSPTRF), the lower triangle of the matrix must be stored packed by column instead of by row. The dimension parameter IRL is no longer
required. For the call of
F07PDF (DSPTRF), the INTEGER array IPIV of length N must be supplied.
F01BTF
Withdrawn at Mark 18.
Replaced by
F07ADF (DGETRF).
Old: CALL F01BTF(N,A,IA,P,DP,IFAIL)
New: CALL sgetrf(N,N,A,IA,IPIV,IFAIL)
where IPIV is an INTEGER array of length N which holds the indices of the pivot elements, and the array P is no longer required.
It may be important to note that after a call of
F07ADF (DGETRF), A is overwritten by the upper triangular factor
U
and the off-diagonal elements of the unit lower triangular factor
L
, whereas the factorization returned by
F01BTF gives
U
the unit diagonal. The permutation determinant DP returned by
F01BTF is not computed by
F07ADF (DGETRF). If this value is required, it may be calculated after a call of
F07ADF (DGETRF) by code similar to the following:
DP = 1.0D0
DO 10 I = 1, N
IF (I.NE.IPIV(I)) DP = -DP
10 CONTINUE
F01BWF
Withdrawn at Mark 18.
Replaced by
F08HEF (DSBTRD).
Old: CALL F01BWF(N,M1,A,IA,D,E)
New: CALL ssbtrd('N','U',N,M1-1,A,IA,D,E(2),Q,1,WORK,INFO)
E(1) = 0.0D0
where Q is a dummy double precision array of length (1) (not used in this call), and WORK is a double precision array of length at least
(N)
.
Note that the tridiagonal matrix computed by
F08HEF (DSBTRD) is different from that computed by
F01BWF, but it has the same eigenvalues.
F01BXF
Withdrawn at Mark 17.
Replaced by
F07FDF (DPOTRF).
Old: CALL F01BXF(N,A,IA,P,IFAIL)
New: CALL spotrf('Upper',N,A,IA,IFAIL)
where, before the call, array A contains the upper triangle of the matrix to be factorized rather than the lower triangle.
The array P is no longer required; the upper triangle of A is overwritten by the upper triangular factor
U
, including the diagonal elements (which are not reciprocated).
F01CAF
Withdrawn at Mark 14.
Replaced by
F06QHF.
Old: CALL F01CAF(A,M,N,IFAIL)
New: CALL F06QHF('General',M,N,0.0D0,0.0D0,A,M)
F01CBF
Withdrawn at Mark 14.
Replaced by
F06QHF.
Old: CALL F01CBF(A,M,N,IFAIL)
New: CALL F06QHF('General',M,N,0.0D0,1.0D0,A,M)
F01CCF
Withdrawn at Mark 7.
Replaced by
F06QFF.
F01CDF
Withdrawn at Mark 15.
Replaced by
F01CTF.
Old: CALL F01CDF(A,B,C,M,N,IFAIL)
New: CALL F01CTF('N','N',M,N,1.0D0,B,M,1.0D0,C,M,A,M,IFAIL)
F01CEF
Withdrawn at Mark 15.
Replaced by
F01CTF.
Old: CALL F01CEF(A,B,C,M,N,IFAIL)
New: CALL F01CTF('N','N',M,N,1.0D0,B,M,-1.0D0,C,M,A,M,IFAIL)
F01CFF
Withdrawn at Mark 14.
Replaced by
F06QFF.
Old: CALL F01CFF(A,MA,NA,P,Q,B,MB,NB,M1,M2,N1,N2,IFAIL)
New: CALL F06QFF('General',M2-M1+1,N2-N1+1,B(M1,N1),MB,A(P,Q),MA)
F01CGF
Withdrawn at Mark 15.
Replaced by
F01CTF.
Old: CALL F01CGF(A,MA,NA,P,Q,B,MB,NB,M1,M2,N1,N2,IFAIL)
New: CALL F01CTF('N','N',M2-M1+1,N2-N1+1,1.0D0,A(P,Q),MA,1.0D0,
+ B(M1,N1),MB,A(P,Q),MA,IFAIL)
F01CHF
Withdrawn at Mark 15.
Replaced by
F01CTF.
Old: CALL F01CHF(A,MA,NA,P,Q,B,MB,NB,M1,M2,N1,N2,IFAIL)
New: CALL F01CTF('N','N',M2-M1+1,N2-N1+1,1.0D0,A(P,Q),MA,-1.0D0,
+ B(M1,N1),MB,A(P,Q),MA,IFAIL)
F01CJF
Withdrawn at Mark 8.
Replaced by
F01CRF.
F01CLF
Withdrawn at Mark 16.
Replaced by
F06YAF (DGEMM).